mscomm控件使用,用计时器循环控制发送同样的数据帧,同样的程序发送的数据帧不同,为什么?

cynthiaming 2008-03-13 02:20:30
mscomm控件使用,用计时器循环控制发送同样的数据帧,同样的程序发送的数据帧不同,为什么?要疯掉了

我用orgSendData()方法组织数据,最后赋值给全局数组变量arrParameterSend。

用一个计时器控制每0.5秒(或者其他时间间隔)就去调用orgSendData,
然后将执行Me.AxMSComm1.Output = arrParameterSend '将数据帧发给串口控件发送缓存区


现在的问题是:
我在计时器timerComSend_Tick事件前加断点,或者在orgSendData方法加断点,单步调试的时候,不管循环几次,串口输出到下位机的数据帧都是相同的

但是我把断点去掉,让程序自己跑的时候,第一次输出的数据帧是正确的,后面循环控制的数据帧会出错。我看过后面发送的数据帧,数据的头、尾数据字节都是正确的,根据自己定义的协议计算的异或位、累计和位也是正确地,但是中间有两位总是变幻出错。——按我的理解程序是根据相同的数据算出的异或和累计和,但是发送给串口缓存,下位机收到的数据帧就变化了,实在想不通是什么原因。单步运行的时候每次发送的数据都是一样的。

哪位大虾帮帮忙



...全文
42 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cynthiaming 2008-03-13
  • 打赏
  • 举报
回复
不是timer的问题,我试过将间隔调宽到60秒都没有用

不过晚上的时候问题解决了,却是是需要延时,这个延时要在mscomm控件的oncomm响应事件中,comEvReceive响应和comEvSend响应的处理中,在运行其他语句之前增加2ms左右的延时,用Sleep就可以了

我怎么始终不能回复贴子??
cynthiaming 2008-03-13
  • 打赏
  • 举报
回复
不是timer的问题,我试过将间隔调宽到60秒都没有用

不过晚上的时候问题解决了,却是是需要延时,这个延时要在mscomm控件的oncomm响应事件中,comEvReceive响应和comEvSend响应的处理中,在运行其他语句之前增加2ms左右的延时,用Sleep就可以了
cynthiaming 2008-03-13
  • 打赏
  • 举报
回复
不是timer的问题,我试过将间隔调宽到60秒都没有用

不过晚上的时候问题解决了,却是是需要延时,这个延时要在mscomm控件的oncomm响应事件中,comEvReceive响应和comEvSend响应的处理中,在运行其他语句之前增加2ms左右的延时,用System.Threading.Thread.CurrentThread.Sleep(2)就可以了
cynthiaming 2008-03-13
  • 打赏
  • 举报
回复
这个问题在晚上的时候解决了,把解决的方法写下来,对别人也许有帮助

不是timer的问题,我之前将timer的间隔调到60s都没有用,不过还是谢谢xiaoxuanzhou

是mscomm控件oncomm事件,在MSCommLib.OnCommConstants.comEvSend事件和MSCommLib.OnCommConstants.comEvReceive的时候,估计发送和接收的最后,虽然触发了oncomm事件,但是将最后字节发给硬件缓存的时候,时间上还是有了冲突。程序立刻执行其他代码的时候,影响了串口控件。

解决办法,在处理oncomm响应之前,加2ms延时就可以了。
AxMSComm1_OnComm()
Select Case Me.AxMSComm1.CommEvent
Case MSCommLib.OnCommConstants.comEvReceive '接受数据
System.Threading.Thread.CurrentThread.Sleep(2) '当前线程sleep延时2ms
doMyOwn1()
Case MSCommLib.OnCommConstants.comEvSend '发送数据
System.Threading.Thread.CurrentThread.Sleep(2) '当前线程sleep延时2ms
doMyOwn2()
End Select
晓轩 2008-03-13
  • 打赏
  • 举报
回复
timer的问题。你试将timer的间隔调宽,1秒不行3秒看看。
cynthiaming 2008-03-13
  • 打赏
  • 举报
回复
没人知道原因吗?

我都要晕死了,进去单步运行都是好的,出来程序自己跑怎么就错了

有人碰见过吗?知道是哪里冲突了?或者其他原因?

谢谢

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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