1、我们都知道Modbus-RTU实现需要增加CRC的校验,CRC-16的计算规则需要对每一位进行计算并判断最后一位是1还是0,下面就是先贴代码在说逻辑,CRC是一个16位的数据,分为高低位
2、前提-CRC的数值是 前面的数据进行逻辑计算得到的,
举例:01 04 00 00 00 01 ——>计算,然后得到一个CRC,放到发送数组内。
3、计算规则,从第一个8位字节开始,
第一步:字节n 异或 0xFFFF(m) ,
第二步:判断最后一位,如果是1,则向右移1位,同时对计算结果异或0xA001,
如果是0,则向右移1位。这个时候就结束了一个循环,
然后对这个字节N所有的数据进行一轮8次,最终的结果就是,m从0xFFFF变成这一个字节的数据CRC数值。对整个数据的数据进行一轮计算就可以得到整个数据的CRC。
第三步:计算之后的数值是高低位交换的,换句话就是,高8位是CRC_低,低8位是CRC_高
发送的时候,记得交换一下。