MODBUS通讯CRC校验码怎么算,有那位能告诉我呀
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MODBUS通讯CRC校验码怎么算,有那位能告诉我呀相关的知识,希望对你有一定的参考价值。
http://zhidao.baidu.com/question/347531285.html2011-12-6 00:03 满意回答
循环校验码(CRC码):
是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。
生成CRC码的基本原理:
任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。
CRC码集选择的原则:
若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得
V(x)=A(x)g(x)=xRm(x)+r(x);
其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式,
g(x)称为生成多项式:
g(x)=g0+g1x+ g2x2+...+g(R-1)x(R-1)+gRxR
发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。
3
| 评论
向TA求助
回答者: WTAO7610 | 十六级采纳率:60%
擅长领域: 山东 购物 贸易 交通出行 地区
参加的活动: 暂时没有参加的活动 参考技术A CRC校验码的产生:
CRC域是两个字节,包含一16位的二进制值。它由传输设备计算后加入到消息中。接收设备重新计算收到消息的CRC,并与接收到的CRC域中的值比较,如果两值不同,则有误。
CRC是先调入一值是全“1”的16位寄存器,然后调用一过程将消息中连续的8位字节跟当前寄存器中的值进行处理。仅每个字符中的8Bit数据对CRC有效,起始位和停止位以及奇偶校验位均无效。
CRC产生过程中,每个8位字符都单独和寄存器内容相异或,结果向最低有效位方向移动,最高有效位以0填充。LSB被提取出来检测,如果 LSB为1,寄存器单独和预置的值或一下,如果LSB为0,则不进行。整个过程要重复8次。在最后一位(第8位)完成后,下一个8位字节又单独和寄存器的 当前值相或。最终寄存器中的值,是消息中所有的字节都执行之后的CRC值。
串口通讯:请教报文里crc16检验
报文为(高字节在前):
EB 80 05 DD 01 B1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 D6 B0 EB
倒数第二三个字节 :D6 B8 是得出的校验码,现在我不知道怎么算出来的。只有报文,也不知道从哪儿算的,用工具分段测也得不出结果。
下面是另外两个
EB 80 05 DD 01 B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 87 4C EB
EB 80 00 DD 00 00 03 00 00 00 00 00 00 00 00 00 31 00 00 00 00 00 00 19 31 EB
协议大概如下:
startCode:1 Control Unit: 3 AplicationUnit:19 FramChecksum:2 EndCode:1
另一个范例:
EB 00 00 DD 00 02 01 00 00 00 00 00 00 00 00 00 01 0F 04 01 13 27 29 EA 72 EB
是modbus协议的CRC16校验,可以用格西烽火之类的测试软件进行测试和验证。
追问我用那个工具还是没测出来正确结果。我不知道它从那儿计算的。也不知道用的哪个多项式。您有时间帮忙测下吗?
就针对某一条报文就行。
以上是关于MODBUS通讯CRC校验码怎么算,有那位能告诉我呀的主要内容,如果未能解决你的问题,请参考以下文章
modbus_RTU协议报文解析我发:01 03 9F 2E 00 04 0A 14收到:01 03 08 00 00 00 01 00 00 00 00 A8 17。