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-11-18
查看liuqiang2012的 主题 / 回贴
1楼  发表于: 2013-04-12 08:53
我做过一个读三菱的PLC的VB程序,用时间同样出这样的问题,问别人原因说是用TIMER事件接收与发送的时候产生了冲突.....
搞工控不自学不行,因为你一天不学你就落后了,这就是这个行业的特点
oyiwiw
级别: 略有小成
精华主题: 0
发帖数量: 113 个
工控威望: 267 点
下载积分: 555 分
在线时间: 81(小时)
注册时间: 2007-10-21
最后登录: 2024-06-03
查看oyiwiw的 主题 / 回贴
2楼  发表于: 2013-04-14 15:57
在电脑上装上三菱的MX C0MPEMT软件,在VB中找到相应的控件来做通讯非常方便,可以批量读取PLC的M、X、Y的状态,也可以直接将数值写入到PLC的数据寄存器里。
poorwer
级别: 略有小成
精华主题: 0
发帖数量: 277 个
工控威望: 485 点
下载积分: 1387 分
在线时间: 225(小时)
注册时间: 2008-07-26
最后登录: 2021-01-19
查看poorwer的 主题 / 回贴
3楼  发表于: 2013-04-14 21:11
你发送什么命令?校验码那些对不对?乱那些又是返回那些信息?
manjialin
专业工业控制软件开发!
级别: 略有小成
精华主题: 0
发帖数量: 144 个
工控威望: 334 点
下载积分: 718 分
在线时间: 110(小时)
注册时间: 2008-11-28
最后登录: 2020-08-26
查看manjialin的 主题 / 回贴
4楼  发表于: 2013-04-14 22:38
直接把X转成M然后读,不就可以解决了么?