串口编程问题

zhouxm0521 2003-09-11 05:10:06
我使用Mscomm控件,现在要实现每个字符到达都能产生oncomm事件,经过试验,好像在接收超过40个字符的时候就会出现有多个字符到了才有oncomm事件,你们遇到这中类似的问题吗?请高手支招?
...全文
26 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouxm0521 2003-09-12
  • 打赏
  • 举报
回复
怎么没有人拉
zhouxm0521 2003-09-12
  • 打赏
  • 举报
回复
还有其他的办法能确保每个字符到达时都捕获到吗?
zhouxm0521 2003-09-12
  • 打赏
  • 举报
回复
谢谢大家 我将rthreshold设置为1了,能后有在另一台机器上用串口调试工具给我发送数据,我在每触发oncomm事件的时候就将inbuffercount的值显示在文本框中,但是发现并不是一直都连续的,这是我受到的数据 大家帮忙看一下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 52 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 121 121 122 123 124 125 ,有50 120 没有产生中断 能后是 52 121 有两次中断的inbuffercount值是一样的
  • 打赏
  • 举报
回复
丟失數據的原因有很多,一般為延時不當,可能使數據被沖掉,因為你發送的是字符,長度不一樣所以所要等待的時間也不同,如果系統運行一現一些問題,在多進程中有別的進程出問題就會出現問題。
zhouxm0521 2003-09-12
  • 打赏
  • 举报
回复
我要的是要知道两个相邻字符到达的时间间隔,所以我必须要确保每个字符达到能够产生oncomm事件
of123 2003-09-12
  • 打赏
  • 举报
回复
3 规定更加合理的协议,例如
(1) 先发送几个字节的帧头,其中包含数据长度。接收端将RThreshold属性设置为此长度。接收到后,将RThreshold属性改为后续数据长度,发回确认信息。
(2) 发送端收到确认后,再发送数据。接收端在事件触发后接收数据。计算检查和,发回确认帧。如果数据检查和正确,将RThreshold属性设置为帧头长度,否则不变。
(3) 发送端接收到确认后,如果检查和不正确,重发;否则发后续数据,或结束。

注意发送端设置超时,以免发生错误时死机。
of123 2003-09-12
  • 打赏
  • 举报
回复
1 如果传送长度不定,在事件触发后,用Sleep方法延时一会儿,等数据全部收到再开始接收。留有余地,保证最长的数据传输过程不丢数据。

2 如果协议规定了固定的帧长度,事件中循环检查InBufferCount属性,直至达到规定的字节数;或者干脆将rthreshold设置为规定的长度。
zhouxm0521 2003-09-12
  • 打赏
  • 举报
回复
对了,大家有谁做过Modbus程序的吗?能否单独交流交流,我的qq号是:122123933
zhouxm0521 2003-09-12
  • 打赏
  • 举报
回复
我试了如果波特率低于9600的话,在接收800个字符内基本上不会出现那种问题(多个字节一起到达的问题)
sliverfish 2003-09-12
  • 打赏
  • 举报
回复
你用的波特率是多少的?试着降看看吧!
zhouxm0521 2003-09-12
  • 打赏
  • 举报
回复
我现在要确保两个字符间的事件间隔不能超过正常的1.5个字符的时间,所以必须要能确保每个字节到达时都能捕捉到
smiwang 2003-09-12
  • 打赏
  • 举报
回复
最好用循环检测
ipman 2003-09-12
  • 打赏
  • 举报
回复
mscomm可能反映不够及时
ipman 2003-09-12
  • 打赏
  • 举报
回复
如果你取得够及时的话应该可以保证,要不降低波特率
yijiansong 2003-09-12
  • 打赏
  • 举报
回复
up
zhonghuashen 2003-09-11
  • 打赏
  • 举报
回复
不会的,我做过,是不是与仪器相关的,如果是的话,那就是仪器的问题,得在属性中设置一下。
佛的光辉 2003-09-11
  • 打赏
  • 举报
回复
将RThreshold设置成1,Mscomm只要受到一个字节数据就会触发oncomm事件,但不是说没收到一个字节数据就会触发oncomm
of123 2003-09-11
  • 打赏
  • 举报
回复
不会。oncomm事件是否触发,与RThreshold属性的设置有关。如果此属性未改变,触发条件是一样的。
当然,在oncomm事件中开始执行时,已经有多个字符到达是很正常的。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧