VB与欧姆龙PLC进行hostlink C-mode通讯

aliealie 2016-12-28 06:31:07
hostlink C-mode通讯,PLC程序已经写好。
VB里程序有个疑问:
“WD02001234”与 Loop Until MSComm1.InBufferCount > =10 有对应关系么?
如果写成“RD02000013” 那么 Loop Until MSComm1.InBufferCount > =63,这个63我修改大小,都不能完成通讯。表示从0200开始连读13个字
而如果写成“RD02000010” 那么 Loop Until MSComm1.InBufferCount > =51。表示从0200开始连读10个字
不明白怎么计算出63、51呢?

这里是响应数据格式:
①起始符@,该符号必须置于每个响应的开头;1字节
②节点号表示返回的响应数据PLC的单元号;2字节
③命令符表示本帧返回的是何种命令的响应数据;2字节
④状态符即显示正常或错误的响应结果;2字节
⑤操作内容为根据命令符,返回的响应数据;如果是13*2字节
⑥FCS校验码 2字节
⑦结束符*号+回车键 1字节
明明36字节啊


Private Sub Form Load()
Data =“WD02001234”
outdata =“@00”+ Data
L =Len(outdata)
fcsl = 0
For i = 1 To L
fcsl =fcs1 Xor Asc(Mid(outdata,i,1))
Next i
FCS = Hex(fcs 1) ’计算校验码 FCS
Dim Instring As String ’保存输入子串的缓冲
MSComm1.Output = outdata + FCS + “*”+ Chr$(13)’将命令送到 PLC
Do
DoEvents
Loop Until MSComm1.InBufferCount > = 10 ’等待数据返回到串行端口
Instring = MSComm1.Input ’ 从串行端口读响应。
MSComm1.PortOpen = False ’关闭串行端口
If Mid (Instring,Len (Instring)- 1,1)<>“*” Then ’检查响应数据“*”
MsgBox“通讯出错”
Else
fcs2 = 0
For i = 1 To Len(Instring)- 4 ’校验响应数据FCS
fcs2 = fcs2 Xor Asc(Mid(Instring,i,1))
Next i
fcs3 = Hex(fcs2)
If fcs3 = Mid(Instring,Len(Instring)- 3,2)Then
MsgBox“通讯有效”
Else
MsgBox“通讯出错”
End If
End If
End Sub
...全文
1357 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44111045 2018-12-29
  • 打赏
  • 举报
回复
您好,那么WD02001234”,Loop Until MSComm1.InBufferCount > =10 这句又怎么理呢,能解释下吗,谢谢
埃和智能 2017-09-17
  • 打赏
  • 举报
回复
推荐一篇文章,里面有源代码下载的: http://blog.sina.com.cn/s/blog_16d7d3ecb0102x3qi.html
埃和智能 2017-06-25
  • 打赏
  • 举报
回复
埃和智能 2017-06-22
  • 打赏
  • 举报
回复
这里有VB.NET和C#的源代码下载,支持浮点数据、BCD码、双整型数据等: http://blog.sina.com.cn/s/blog_16d7d3ecb0102x3qi.html
qq_36204741 2017-05-11
  • 打赏
  • 举报
回复
948563949@qq。com
qq_36204741 2017-05-11
  • 打赏
  • 举报
回复
哥,我也研究vb与plc通信。你可以发个ni写的vb程序吗?我写出来连不上plc
qedawei 2017-02-21
  • 打赏
  • 举报
回复
兄弟,可以给一份完整无误的VB.net通信代码作为学习吗,非常感谢
of123 2016-12-29
  • 打赏
  • 举报
回复
看你的命令,似乎是 ASCII 编码的。这样的话,数值部分每十六进制的半字节需要一个字符,也就是每字节需要 2 字节。 你在正确传输的情况下,看看接收到的数据是什么。
Tiger_Zhao 2016-12-29
  • 打赏
  • 举报
回复
万能答案:
要供应商提供样例啊!
你付钱卖硬件还不要服务,太傻了吧!

aliealie 2016-12-29
  • 打赏
  • 举报
回复
上边编辑错了,应该是 ⑤操作内容为根据命令符,返回的响应数据;如果是13*4 个 ASCII 码 跟别人交流真的比自己瞎想效率高
aliealie 2016-12-29
  • 打赏
  • 举报
回复
引用 2 楼 of123 的回复:
看你的命令,似乎是 ASCII 编码的。这样的话,数值部分每十六进制的半字节需要一个字符,也就是每字节需要 2 字节。 你在正确传输的情况下,看看接收到的数据是什么。
您的这句话“每字节需要 2 字节”,虽然看起来很矛盾,但是提醒了我 之前看中文手册中提到一句话“传送命令的一帧不能超过131字节”,当时不能理解这个数字怎么来的,不零不整的,也没仔细想。刚才又找了一份英文手册仍然有这么一句“131 characters of data”,但是下边又多了一些描述“A maximum of 30 words of data can be transferred for the first command frame ”。 所以characters不是指数据本身data 的Byte,应给是指131个ASCII 码。ASCII 码本身也是7位,即一字节 我的理解:一个word的十六进制数,比如“1234”H,用ASCII 码表示就是“31H 32H 33H 34H”,所以有1个word data =4个ASCII 码 验证了一下这个理解: ①起始符@,该符号必须置于每个响应的开头;1个 ASCII 码 ②节点号表示返回的响应数据PLC的单元号;2个 ASCII 码 ③命令符表示本帧返回的是何种命令的响应数据;2个 ASCII 码 ④状态符即显示正常或错误的响应结果;2个 ASCII 码 ⑤操作内容为根据命令符,返回的响应数据;如果是13个word*4 个 ASCII 码 ⑥FCS校验码 2个 ASCII 码 ⑦结束符*号+回车键 2 个 ASCII 码 [color=#FF0000]*号和回车各是一个ASCII 码 ———————————————————————— 正好63个 ASCII 码,感谢大家关注~~~~
Tiger_Zhao 2016-12-29
  • 打赏
  • 举报
回复
就算没有VB,C++/C#/VB.Net总有一个样例程序啊。
不给样例你就说不能证明板子是好的,要换货/退款。
aliealie 2016-12-29
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
万能答案: 要供应商提供样例啊! 你付钱卖硬件还不要服务,太傻了吧!
打了欧姆龙客服电话,客服没给我解决,而且那个意思是这是VB的问题,问我不清楚。 最后我问能否给样例程序,说没有~~~ 不知道是不是我打电话已经快下午6点了,估计影响下班了

7,759

社区成员

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

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