帧校验序列码FCS

本文介绍了帧校验序列码FCS在上位机与PLC通信中的作用,确保数据准确性的关键。通过异或运算生成FCS,并在接收端进行校验。文中分享了从VB转换而来的C# FCS校验代码,供开发者参考学习。
摘要由CSDN通过智能技术生成

   在上位机与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#写的ÿ

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为您计算CRC校验序列FCS: 首先,将要发送的数据1101011011左移4位变成11010110110000,即在末尾补上4个0,作为校验序列的初始值。 然后,用生成多项式G(X) = X^4 + X + 1,对11010110110000进行除法运算,得到余数0101,即为校验序列FCS。 因此,校验序列FCS为0101。 ### 回答2: 要发送的数据是1101011011,已知CRC的生成多项式G(X) = X^4 + X + 1。 首先,将发送数据拓展为11010110110000,其中后面添加了4个零,以便可以进行CRC校验。 然后,用生成多项式G(X)对扩展后的数据进行除法运算。由于生成多项式的次数为4,所以我们进行4次除法运算。 首先,将G(X)左移4位,得到10000。将此位数与扩展数据的前5位进行异或运算,即1101011011 xor 10000,结果为1010110111。将此结果作为新的被除数。 然后,将G(X)左移3位,得到1000。将此位数与新的被除数的前4位进行异或运算,即1010110111 xor 1000,结果为1010111111。将此结果作为新的被除数。 然后,将G(X)左移2位,得到100。将此位数与新的被除数的前3位进行异或运算,即1010111111 xor 100,结果为1010111011。将此结果作为新的被除数。 最后,将G(X)左移1位,得到10。将此位数与新的被除数的前2位进行异或运算,即1010111011 xor 10,结果为1010111001。将此结果作为新的被除数。 当无法再移动G(X)时,未被除尽的数据1010111001就是校验序列FCS。 因此,校验序列FCS为1010111001。 ### 回答3: 要发送的数据是1101011011,CRC的生成多项式G(X) = X^4 + X + 1。求校验序列FCS。 首先,将要发送的数据与0进行异或运算,并在最高位补充4个0,得到新的数据111010110110000。 然后,用生成多项式G(X)对新的数据进行除法运算。 第一步,将G(X)的最高次项X^4与新数据的头部相对应的4位数1110进行异或运算,结果为1010。然后将这个结果与新数据的第5位进行异或运算,结果为0000。将这个结果继续与新数据的第6位进行异或运算,结果为0000。将这个结果继续与新数据的第7位进行异或运算,结果为0000。依此类推,直到将所有的新数据都用完。 最终,除法运算得到的余数为0000,即为校验序列FCS。 因此,校验序列FCS为0000。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值