当前位置: 代码迷 >> VB >> 关于mscomm控件的通信有关问题
  详细解决方案

关于mscomm控件的通信有关问题

热度:171   发布时间:2016-05-19 04:22:42.0
关于mscomm控件的通信问题
有一个项目,单片机外扩存储器存储数据,工作结束后用上位机通过232串口将数据提取出来,在利用VB6.0编程时发现经常出现假死现象,有时甚至直接蓝屏。VB发提取数据指令无问题,从示波器上看波形,能够发出数据提取指令(一个单字节数据),单片机也能接到指令并通过串口发送数据,但上位机接收不了,有可能是什么原因?求助一个比较靠谱的程序。
1、波特率4800,奇校验,8个数据位,1个停止位;
2、用台式机自带串口可以通信,虽然接收的数据可能有漏掉,用笔记本扩展串口经常出现问题,经测试,购买的USB转232线的DTR/CTS等信号均有,用的是哪个PL2302什么的片子,质量应该无问题;
3、数据大概有30kB,不算多。
3、我没有用控件的oncomm事件,原来用过容易丢包,用的是查询法,判断串口缓冲区有数,则全部读入,存放到一个数组里面,然后接着判断,为防止缓冲区不够,设置的最大的32167了,如果无数,最终跳出,弹出消息接收完成,提示另存处理。
有没有朋友遇到过此类问题,或者有此类工程经验,求助有没有好的处理方法?买了一本书,可讲的太笼统太基础了,网上也查了些资料,都很轻松容易实现的样子,为什么我老搞不定,郁闷了。
------解决方案--------------------
1 这你个案子中,波特率并不高。按理说,应该没有什么问题。

2 U 转串的质量差别很大。我用过的最好的是 FT232 芯片的,自带的驱动程序还支持更改串口号。建议先用标准串口调试成功,再试 U 转串线。不用改代码,主要是测试挑选适用的 U 转串线。

3 有可能的话,把协议改一下,分包传送。也就是发一个命令传一包。每一包传送 1024 字节。因为 PC 端的 RS-232 驱动缺省的缓冲区是这么大。如果一次传更多,要重新设置一下缓冲区大小。

  命令可以包含包索引(也就是数据的地址偏移编码)信息。也可以在传回的数据后加校验码,出错时可以重传。

  你现在的传输方式有可能丢数据。因为连续的实时传输中,你在中间插入的处理有可能导致出错。


------解决方案--------------------
接收的中途不要做数据处理,特别是需要重新分配缓存空间的字符串连接处理。

首先将数据保存到一个足够大的 Byte 数组。接收完成后,再处理。

PC 机运行速度相对于 RS232 传输速率,是非常快的,这样的方式可以保证你能够及时地接收到所有数据,而不必开非常大的串口缓存。

当你要对字符串进行处理时,可能发生不确定地需要磁盘交换的情况,产生延迟。
  相关解决方案
本站暂不开放注册!
内测阶段只得通过邀请码进行注册!
 
  • 最近登录:Sun Apr 30 01:30:19 CST 2017
  • 最近登录:Sun Apr 30 01:30:19 CST 2017
  • 最近登录:Sun Apr 30 01:30:19 CST 2017
  • 最近登录:Sun Apr 30 01:30:19 CST 2017
  • 最近登录:Sun Apr 30 01:30:19 CST 2017