CRC校验? 点击:212 | 回复:2



运动天使

    
  • 精华:4帖
  • 求助:81帖
  • 帖子:120帖 | 940回
  • 年度积分:0
  • 历史总积分:2632
  • 注册:2010年10月22日
发表于:2013-01-12 21:02:28
楼主

那位师傅帮忙讲下MODBUS rtu通讯的    CRC是如何校验的?




bhdxzgp

  • 精华:5帖
  • 求助:8帖
  • 帖子:141帖 | 5451回
  • 年度积分:0
  • 历史总积分:21609
  • 注册:2006年4月16日
发表于:2013-01-12 23:01:07
1楼

CRC16校验

CRC16校验为2字节,从报文的首字节(从站号)至数据区的最末字节以CRC16 方法计算出的校验和。

【示例】采用C语言实现CRC16校验算法如下:

unsigned short CRC16(unsigned char* buf, unsigned short len)

{

   unsigned short crc=0xffff;

   unsigned short i,j,k;

   for(i=0;i<len;i++)

   {

         crc =crc ^ buf【i】;

         for(j=0;j<8;j++)

         {

                k=crc & 01;

                crc=crc >> 1;

                if (k==0) continue;

                crc =crc ^ 0xA001;

         }

   }

   return crc;

}

liujian5118

  • 精华:2帖
  • 求助:8帖
  • 帖子:31帖 | 3109回
  • 年度积分:199
  • 历史总积分:19924
  • 注册:2009年3月25日
发表于:2013-01-12 23:37:21
2楼

楼上的没错。百度百科也有

http://baike.baidu.com/view/80377.htm#2

另外,如果要求计算速度的话,使用查表法要比循环计算要快!

http://wenku.baidu.com/view/a8482445b307e87101f6966f.html


热门招聘
相关主题

官方公众号

智造工程师