您现在所在的是:

电脑编程

回帖:13个,阅读:11798 [上一页] [1] [2] [下一页]
920
suly2001
文章数:6
年度积分:50
历史总积分:920
注册时间:2005/3/23
发站内信
发表于:2005/4/9 19:09:00
#0楼
我用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个,一次两个,这是怎么回事呢??? 请问有什么好办法可以接受到完整的数据帧。
   这个问题已经困扰我好长时间了,我也尝试了好多办法,但是效果都不好,请高手赐教!!!真是万分感谢!!





 表情
902
qinzzhi
文章数:1
年度积分:50
历史总积分:902
注册时间:2005/4/12
发站内信
发表于:2005/4/12 15:19:00
#1楼
ms没用过,建议用Pcomm.
961
missingjing
文章数:11
年度积分:50
历史总积分:961
注册时间:2004/10/10
发站内信
发表于:2005/5/4 15:41:00
#2楼
我也遇到过类似问题,这是因为计算机来不及接收到8个以上的数据了,响应速度的问题,你可以采取定义一个全局变量的方法把先前接受到的字符累积起来,只要用一个简单的字符连接累积程序,并将此全局变量在一定的条件下清空就可以了,我用PLC试过了,很成功的!!!
912
lairice
文章数:4
年度积分:50
历史总积分:912
注册时间:2005/6/3
发站内信
发表于:2005/6/3 0:55:00
#3楼
suly2001,你的代码的意思是:有接收事件发生,就启动计时器,50ms后启动接收程序,对吗?
我通常是直接用延时函数,不用Timer了,我好象没碰到过你说的情况~
573
mayi1121
文章数:30
年度积分:50
历史总积分:573
注册时间:2005/6/28
发站内信
发表于:2005/9/24 11:34:00
#4楼
我也有碰到过这种情况,要延时一下就行了
940
cqzhoumang
文章数:19
年度积分:50
历史总积分:940
注册时间:2005/7/19
发站内信
发表于:2005/9/24 19:36:00
#5楼
是由于timer定时器的定时时间不稳定造成的!我曾遇到类似情况。
923
xhlin2004
文章数:10
年度积分:50
历史总积分:923
注册时间:2005/10/3
发站内信
发表于:2005/10/3 8:53:00
#6楼
我觉得问题有二:
1.接收到一个字节就产生一次ONCOMM事件的话,如果下位机的一次数据量有好几个字节该如何办呢?必然会丢失后面的!
2.我的经验,VB的TIMER延时在100毫秒以上还是稳定的,以下就不好说了,着主要是由于WINDOWS本身的多线程不稳定造成的
972
tiasky
文章数:23
年度积分:50
历史总积分:972
注册时间:2005/10/15
发站内信
发表于:2005/10/16 8:25:00
#7楼
485通信编程的难点在于完整正确的数据包的提取,一般有二种方法:
  1: 数据包前加同步帧,包长度信息,校验码.
  2: 通过接收数据的时间判断,如>50ms未有新数据,判断一个包接收结束.

欢迎到我网站下载 www.tiasky.com
  串口调试工具:SPCfgTest.zip 大小为 252 KB
   调整字节串接收时间(10mS~200mS),可将一般串口调试工具收不全的数据全收全;或不应断开收的数据收全、收完整。
中央解决"三农",又迅解决"三太":太贵、太难、太复杂。
http://www.autoyx.com/
http://www.autoyx.com/
1105
tiaskyzml
文章数:104
年度积分:50
历史总积分:1105
注册时间:2005/12/2
发站内信
发表于:2005/12/9 11:13:00
#8楼
上文为"串口接收数据不全"的原因和解决的方法,顶一下
控制系统网络结构、软硬件技术见:
www.autoyx.com
1050
shxu2005
文章数:50
年度积分:50
历史总积分:1050
注册时间:2005/12/30
发站内信
发表于:2006/2/21 10:51:00
#9楼
vb中的mscomm中你可以设置一下接收多少个字节产生一个ONCOMM事件,我想就可以了吧

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

140.4009