帧校验序列码FCS
2010-09-10 22:32 Daniel Xu 阅读(8162) 评论(0) 编辑 收藏 举报在上位机与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#写的,把VB版本的修改成c#了,代码如下:
static string fcs(string data) { int xorresult = 0; string tempfes = ""; for (int i = 0; i < data.Length; i++) { xorresult = xorresult ^ Convert.ToInt32(data[i]); } tempfes = Convert.ToString(xorresult, 16); if (tempfes.Length == 1) { tempfes = "0" + tempfes; } return tempfes; }
作者:DanielXu
出处:http://www.cnblogs.com/lovetsfuer/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。