modbus rtu协议可以算是一种事实上的工业标准协议,为许多仪表、PLC等所支持。以前有几个用户问如何使用VB编程来与我们的KND-K3系列PLC通讯,于是整了一个demo程序。这次把这个demo共享,希望能给大家一点帮助。
WW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW.PLCJS.COM——可编程控制器技术门户
1) 模块文件:modCRC,其中包含了CRC校验的函数。P.L.C.技.术.网——可编程控制器技术门户
WWW_PL※CJS_COM-PLC-技.术_网
data 待校验的数组名称WWW.PLCJS.COM——可编程控制器技术门户
no 数组中元素个数P_L_C_技_术_网——可——编——程——控-制-器-技——术——门——户
btLoCRC 算出的CRC高字节WW.W_PLC※JS_C,OM-PL,C-技.术_网
btHiCRC 算出的CRC低字节W1WW_P4LCJS_COM-PLC-技.术_网
——可——编——程——控-制-器-技——术——门——户
Public Function CalCRC16Fast(data() As Byte, no As Integer, btLoCRC As Byte, btHiCRC As Byte) As String——可——编——程——控-制-器-技——术——门——户
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
Dim CL As Byte, CH As Byte 多项式码&HA001WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
Dim SaveHi As Byte, SaveLo As ByteWWW.PLCJS.COM——可编程控制器技术门户
Dim i As IntegerWWW_P※LCJS_COM-PLC-)技.术_网
Dim Flag As IntegerWWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
plcjs.技.术_网
btHiCRC = &HFFWWW_PLCJS_COM-PLC-技.术_网
btLoCRC = &HFFplcjs.技.术_网
CL = &H1WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)
CH = &HA0WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
WWW_PL※CJS_COM-PLC-技.术_网
For i = 0 To (no - 1)WWW.PLCJS.COM——可编程控制器技术门户
——可——编——程——控-制-器-技——术——门——户
btHiCRC = btHiCRC Xor data(i) 每一个数据与CRC寄存器进行异或P.L.C.技.术.网——可编程控制器技术门户
WWW_PLC※JS_COM-PmLC-技.术_网
For Flag = 0 To 7WW.W_PLC※JS_C,OM-PL,C-技.术_网
WWW_PLCJS_COM-PLC-技.术_网
SaveHi = btLoCRC——可——编——程——控-制-器-技——术——门——户
SaveLo = btHiCRCWWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
btLoCRC = btLoCRC \ 2 高位右移一位WWW_PLCJS_COM-PLC-技.术_网
btHiCRC = btHiCRC \ 2 低位右移一位WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
WWW_PLCJS※COM-PLC-技.术_网(可※编程控※制器技术门户)
If ((SaveHi And &H1) = &H1) Then 如果高位字节最后一位为1WWW_PLCJS※COM-PLC-技×术_网(可编程控※制器技术门户)
btHiCRC = btHiCRC Or &H80 则低位字节右移后前面补1WW.W_PLCJS_COM-PLC-技.术_网
End If 否则自动补0WWW_PLC※JS_COM-PLC-技.术_网(可编程控※制器技术门户)
WWW_PLCJ-S_COM-PLC-技.术_网(可-编程控-制器技术-门户)
If ((SaveLo And &H1) = &H1) Then 如果LSB为1,则与多项式码进行异或WWW※PLCJS_COM-PL#C-技.术_网(可编※程控※制器技术门户)