回复:MODBUS协议CRC校验,先发的是高字节呢还是低字节呢?

Zaxife

  • 帖子

    2450
  • 精华

    31
  • 被关注

    78

论坛等级:至圣

注册时间:2008-07-24

普通 普通 如何晋级?

发布于 2017-05-27 12:29:28

8楼

根据CRC16算法,01 03 00 00 00 03 得到的检验码是 0xCB05;

根据RTU的报文,CRC低字节放在前面,高字节放在后面。


MODBUS 协议中文版.zip



/**原始计算 usNorCRC16 异或0xA001 效率比较低  (默认循环一个字节)

   具体计算方法为:

1、设置CRC寄存器,给其赋值0xffff;

2、将待校验数据的第一个字节(8bit)与16位CRC的低字节进行异或操作,结果存入CRC寄存器;

3、CRC寄存器向右移一位,MSB补零,移出并检查LSB;

4、如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码(A001)相异或,结果依然存入CRC寄存器;

5、重复第3、4步,直到8次移位全部完成。即一个8bit字节处理完毕;

6、重复第2至第5步,即依次处理后面的数据字节,直到全部数据处理完成;

7、最终CRC寄存器里的内容即为CRC值。

**/

unsigned short usNorCRC16(unsigned char *buf, unsigned short len){

    unsigned short crc,data,val;

    unsigned char i;

    crc = 0xFFFF;


    while(len-- > 0){

        unsigned char i = 8;

        crc = *buf ^ crc;

        while(i-- > 0){

            if (crc & 0x1){

                crc >>= 1;

                crc ^= 0xA001;

            }else{

                crc >>= 1;

            }

        }

        buf++;

    }

    return crc;

}


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33294条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。