8255842
级别: 探索解密
精华主题: 0
发帖数量: 3 个
工控威望: 122 点
下载积分: 497 分
在线时间: 19(小时)
注册时间: 2013-01-20
最后登录: 2024-04-29
查看8255842的 主题 / 回贴
楼主  发表于: 2013-04-10 20:51
关于VB的MSComm串口接收两次,Time事件 10分



如下:(1)和(2)单独用按钮命令可以正常执行..用Timer1执行1和Timer2执行2,收回来的数据就很乱..把(1)(2)都写到Timer1下面下,收回来的数据也乱..是不是输入输出缓冲区两个混乱

Private Sub Timer1_Timer() '时钟事件,间隔设定Interval毫秒就执行一次

(1)DIM SENTDATA AS STRING,,Dim getdata
MSComm1.InBufferCount = 0 '清空接收缓冲区
MSComm1.OutBufferCount = 0 '清空发送缓冲区
MSComm1.Output = 读取数据指令
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 20 'PLC应该返回8个字符 固定的4+2*N
'一个起始符+一个寄存器(有两个字节)(每个字节=2字符)+一个结束符+两个校验和
getdata = MSComm1.Input
Text1.Text = getdata ''返回的低字节在前,高在后

(2)Dim sendat As String,,Dim getdat
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.Output =读取数据指令
Do
DoEvents
Loop Until MSComm1.InBufferCount >= 8
getdat = MSComm1.Input
Text4.Text = getdat ''返回的低字节在前,高在后
liuqiang2012
慎言慎行,三思而后行!
级别: 家园常客
精华主题: 0
发帖数量: 304 个
工控威望: 505 点
下载积分: 967 分
在线时间: 550(小时)
注册时间: 2012-06-08
最后登录: 2024-12-09
查看liuqiang2012的 主题 / 回贴
1楼  发表于: 2013-04-12 08:53
我做过一个读三菱的PLC的VB程序,用时间同样出这样的问题,问别人原因说是用TIMER事件接收与发送的时候产生了冲突.....
搞工控不自学不行,因为你一天不学你就落后了,这就是这个行业的特点