在上位机与PLC通信中,为了更好的校验发送与接收的数据的准确性,一般都会加一位校验位,校验码的算法有多种,帧校验序列码FCS就是其中的一种。
帧校验序列码FCS ( Frame Check Sequences)是为提高通信的可靠性设置的。将每一帧中的第一个字符@到该帧中正文的最后一个ASCII 字符作“异或”运算, 并将异或的结果转换为两个ASCII码, 便得到了FCS , 它作为帧的一部分发送到接收端。接收端计算出收到的帧的FCS , 如果与发送端传送过来的FCS 不同, 可以判定通信有误。
由于近段一直在做上位机与PLC有关的通信,了解了一些版本语言的FCS算法,在此提供一些代码供大家交流学习。
首先是VB写的FCS校验:
Function fcs(ByVal inputstr As String) As String
Dim slen, i, xorresult As Integer
Dim tempfes As String
slen = Len(inputstr) '求输入字符串长度
xorresult = 0
For i = 1 To slen
xorresult = xorresult Xor Asc(Mid$(inputstr, i, 1)) '按位异或
Next i
tempfes = Hex$(xorresult) '转化为16进制
If Len(tempfes) = 1 Then tempfes = "0" + tempfes
fcs = tempfes
End Function
由于我们的项目是c#写的ÿ