手把手教你用VB实现Modbus RTU串行通讯工程实例

用VB实现Modbus RTU串行通讯
在一些应用中可能需要使用诸如VB来进行上位机监控程序的开发,而Modbus协议是这类应用中首选的通讯协议;Modbus协议以其简单易用,在工业领域里已广泛的为其他第三方设备所支持。这里对VB和Twido PLC间的通讯进行说明。
美国种族简史
  对于大部分应用,Twido PLC作为从站,它不需要编制通讯程序,只要把通讯口的参数设置好即可,例如下图表示此Twido通过编程口和上位机连接,其站号地址为2;波特率、数据位、校验、停止位和上位机设置保持一致。
 
  VB程序通过利用MSComm控件很容易就能够实现。
  1. 通讯口初始化:
  MSComm1.Settings = "9600,n,8,1"
索爱z610  MSComm1.CommPort = 1
  MSComm1.SThreshold = 0
  If Not MSComm1.PortOpen Then MSComm1.PortOpen = True
 
  2. CRC校验码的计算方法,如以下函数,可以得到字节数组变量cmdstring指向的字符串的CRC校验码。
  Function crc16_1(ByRef cmdstring() As Byte, ByVal j As Integer)
  Dim data As Integer
  Dim i As Integer
  立体交叉桥
 
  Addressreg_crc = &HFFFF
  For i = 0 To j
  Addressreg_crc = Addressreg_crc Xor cmdstring(i)
  For j = 0 To 7
  data = Addressreg_crc And &H1
  If data Then
  Addressreg_crc = Int(Addressreg_crc / 2)
  Addressreg_crc = Addressreg_crc And &H7FFF
  Addressreg_crc = Addressreg_crc Xor &HA001
  Else
  Addressreg_crc = Addressreg_crc / 2
  Addressreg_crc = Addressreg_crc And &H7FFF
  End If
  Next j
  Next i
 
  If Addressreg_crc < 0 Then
  Addressreg_crc = Addressreg_crc - &HFFFF0000
  End If
 
  HiByte = Addressreg_crc And &HFF
  LoByte = (Addressreg_crc And &HFF00) / &H100
黄糊精  End Function
 
  3. 读多个字的命令(本例是从2号站读%MW10起始的4个字):
  Dim SendStr(7) As Byte
  Dim RcvStr() As Byte
  SendStr(0) = 2 ,从站号是2
  SendStr(1) = &H3 ,读多个字的命令代码
  SendStr(2) = 0 ,起始地址高字节
  SendStr(3) = 10,起始地址低字节
  SendStr(4) = &H0,数据长度高字节
  SendStr(5) = 4 ,数据长度低字节
 
  Call crc16(SendStr(), 5) ,CRC计算
  SendStr(6) = HiByte
  SendStr(7) = LoByte
  ,读命令发送后,当接收 5 + SendStr(5) * 2 个字节时产生中断
  CmdLenth = 5 + SendStr(5) * 2
  MSComm1.RThreshold = CmdLenth
  MSComm1.Output = SendStr ,发送命令
 
 
  4. 写多个字的命令(本例是写2号站%MW20起始的3个字):
  Dim WriteStr() As Byte
  k = 6 ,写6个字节
  ReDim WriteStr(8 + k)
 
  WriteStr(0) = 2 ,从站号是2
  WriteStr(1) = &H10 ,写多个字的命令代码
  WriteStr(2) = 0 ,起始地址高字节
  WriteStr(3) = 20 ,起始地址低字节
  WriteStr(4) = &H0 ,数据长度高字节<字的个数>
  WriteStr(5) = k / 2 ,数据长度低字节<字的个数>
 
  WriteStr(6) = k ,数据长度<字节的个数>
  WriteStr(7) = &H12,写的第1个字的高字节
  WriteStr(8) = &H34,写的第1个字的低字节
  WriteStr(9) = &H56,写的第2个字的高字节
  WriteStr(10) = &H78,写的第2个字的低字节山河之恋
  WriteStr(11) = &H9A,写的第3个字的高字节
  WriteStr(12) = &HBC,写的第3个字的低字节
工频电场 
  Call crc16(WriteStr(), 6 + k)
  WriteStr(9 + (k / 2 - 1) * 2) = HiByte
  WriteStr(10 + (k / 2 - 1) * 2) = LoByte
 
  MSComm1.InBufferCount = 0
  MSComm1.Output = WriteStr
  ,写命令发送后,当接收到8个字节时中断

本文发布于:2024-09-23 09:19:33,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/135032.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字节   上位   程序
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议