LabView在MODBUS规约CRC实现以及通讯技术
Modbus通讯协议分为RTU协议和ASCII协议。对于它的介绍可以参阅《MODBUS通讯协议及编程》。
LabView的介绍在我的BLOG已经够多的了,其优势不言而喻的。在此也不多介绍,可以参阅本BLOG关于它的串口通讯,三菱PLC通讯以及应用通讯等等。
对于CRC的介绍,那就太多了,也不做多于的介绍,下面就介绍它在VB和LabView中的实现方面的。
在VB中,下面的例子我们可以通过输入的16进制数据得到它的CRC校验以及根据一串数据判断它的CRC是否正确!
实现的程序如下:
Public Function CRC(Brr() As Byte) As Long
'CRC校验核,全部数据进行校验
Dim i As Integer, j As Integer
Dim TempVal As Long
Dim YWval As Long
Dim LSB As Integer
TempVal = &HFFFF&
For i = 0 To UBound(Brr())
TempVal = TempVal Xor Brr(i)
For j = 1 To 8
YWval = Int(TempVal / 2)
LSB = TempVal Mod 2
If LSB = 1 Then
YWval = YWval Xor &HA001&
End If
TempVal = YWval
Next j
Next i
CRC = TempVal Mod 65536
End Function
按下计算后
Dim Cmd() As Byte
Dim Jyh0 As Byte
Dim Jyh1 As Byte
Dim ValCRC As Long
‘Cmd()得到Text1控件中所有数据的十六进制数据:
‘01 03 00 00 00 02
Text2是得到CRC校验位的
ValCRC = CRC(Cmd)
Jyh0 = ValCRC Mod 256
Jyh1 = Int(ValCRC / 256)
Text2.Text = Right("0" + Hex(Jyh0), 2) + Right("0" + Hex(Jyh1), 2)
判断就是将最后C4 B0取出放置一个变量中,将01 03 00 00 00 02取出得到它的CRC(具体实现上面也有说明的)判断是否相等,等提示:
下面介绍LabView中的实现了,有了以上的代码,那么实现起来只是一个转换了,如果有兴趣的朋友可以不用看下面的实现,自己根据VB的代码进行转换即可。相信更有成就感的。
界面
由于是把它做成一个模块调用的,所以做的比较粗糙,但是可以看得出来的,在DATA下面输入16进制数据0103 0000 0002,CRC的结果为BC4。得到LOWER CRC BYTE为 C4,得到UPPER CRC BYTE为B,连接起来为C40B,直接转成16进制为String 2为: 4334 3024.进行处理转换为16进制为C40B。全部连接起来得到String4 为0103 0000
这样,与VB预算得到相同的结果。
图表示为:
由于一幅图剪切不下来,特做两幅图处理。
总结
本文以单独的视角来实现ModBUS协议中的CRC在VB和LABVIEW中的实现方式,对于CRC的介绍本BLOG做过大量的介绍,在此就是简单的提出以下,可以参阅本BLOG也可以参阅其他的资料。在此就略去。
后记
对于LabVIEW这几年在虚拟仪器中的发展情况上看,相信有着更大的作为。本人也一直致力于这方面的研究。由于其博大精深,算起来只是掌握冰山上的一角!写下这些心得,希望能在自己总结的同时也分享这些所谓的略微成果!希望与各位共同进步。如果觉得该文章能够给访问者有着启示,本人也深感欣慰,同时也希望各位留下建议和意见,一方面本人也能根据你们的信息反馈改进自己的不足,提高自己。另一方面也希望结识更多致力于自动测控等方面研究的朋友,这样对于本人来说是莫大的荣幸!
参考资料
www.cpubbs.com中的论坛,本人经常去的地方,里面许多问题可以请教到高手。