登录
首页 电脑编程
回帖 发帖
正文

主题:VB mscomm 接收数据不全,恳请高手赐教!!!!

点击:11991 回复:13

我用VB的mscomm控制串口和仪器相连,通过计算机向仪器发送文件或是数据,然后另外的仪器接收到数据或是文件后再转发给计算机,通过计算机读取,但是我发现收到的数据不完整,并不是我一下就能把完整的一帧数据接收过来,这样就导致了接收端收数据解码时候出错。
mscomm属性
handShaking :2  CTS/RTS
Sthreshold=1
Rthreshold=1
Inputlen=0
inbuffersize=1024
outbuffersize=512
接收数据时候是这样处理的:
private sub ON_msomm ()
   select case mscomm.commevent
      case  2
          RecTime.interval=50
          RecTime.enable=true  ‘打开接收计时器,在这段程序中进行接收和解码
   end select
end sub
Private Sub RecTime_timer()
  dim inbyte() as byte
  dim str as string
   Inbyte = MSComm.Input
........... '开始判断和解码
...........
RecTime.enable=false       ’关闭定时器
end sub
这样写完代码后发送短小的文件可以接收完全,但是要是长文件就不行了,改变timer的interval的值后会产生不同的效果,但是不管怎么样都收不完全,帧尾总是被收到下一帧数据或是被直接舍弃,而且我就是自己编写一个小的程序(就发一条命令)的时候接收的只有10 比特返回值也是被分成两次接收,一次8个,一次两个,这是怎么回事呢??? 请问有什么好办法可以接受到完整的数据帧。
   这个问题已经困扰我好长时间了,我也尝试了好多办法,但是效果都不好,请高手赐教!!!真是万分感谢!!


 表情
05-04-09 19:09
ms没用过,建议用Pcomm.
05-04-12 15:19
我也遇到过类似问题,这是因为计算机来不及接收到8个以上的数据了,响应速度的问题,你可以采取定义一个全局变量的方法把先前接受到的字符累积起来,只要用一个简单的字符连接累积程序,并将此全局变量在一定的条件下清空就可以了,我用PLC试过了,很成功的!!!
05-05-04 15:41
suly2001,你的代码的意思是:有接收事件发生,就启动计时器,50ms后启动接收程序,对吗?
我通常是直接用延时函数,不用Timer了,我好象没碰到过你说的情况~
05-06-03 00:55
我也有碰到过这种情况,要延时一下就行了
05-09-24 11:34
是由于timer定时器的定时时间不稳定造成的!我曾遇到类似情况。
05-09-24 19:36
我觉得问题有二:
1.接收到一个字节就产生一次ONCOMM事件的话,如果下位机的一次数据量有好几个字节该如何办呢?必然会丢失后面的!
2.我的经验,VB的TIMER延时在100毫秒以上还是稳定的,以下就不好说了,着主要是由于WINDOWS本身的多线程不稳定造成的
05-10-03 08:53
485通信编程的难点在于完整正确的数据包的提取,一般有二种方法:
  1: 数据包前加同步帧,包长度信息,校验码.
  2: 通过接收数据的时间判断,如>50ms未有新数据,判断一个包接收结束.
欢迎到我网站下载 www.tiasky.com
  串口调试工具:SPCfgTest.zip 大小为 252 KB
   调整字节串接收时间(10mS~200mS),可将一般串口调试工具收不全的数据全收全;或不应断开收的数据收全、收完整。
05-10-16 08:25
上文为"串口接收数据不全"的原因和解决的方法,顶一下
05-12-09 11:13
vb中的mscomm中你可以设置一下接收多少个字节产生一个ONCOMM事件,我想就可以了吧
06-02-21 10:51

上一页下一页

工控新闻

更多新闻资讯