求助把这个C语言程序改为松下PLC的程序 点击:242 | 回复:2



modbus_tcp

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 55回
  • 年度积分:0
  • 历史总积分:102
  • 注册:2018年4月23日
发表于:2018-04-23 16:01:25
楼主

CRC16C语言算法:

#define PRESET_VALUE 0xFFFF

#define POLYNOMIAL  0x8408

unsigned int uiCrc16Cal(unsigned char const  * pucY, unsigned char ucX)

{

     unsigned char ucI,ucJ;

     unsigned short int  uiCrcValue = PRESET_VALUE;

 

         for(ucI = 0; ucI < ucX; ucI++)

        {

               uiCrcValue = uiCrcValue ^ *(pucY + ucI);

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

           {

                  if(uiCrcValue & 0x0001)

                {

                      uiCrcValue = (uiCrcValue >> 1) ^ POLYNOMIAL;

                }

                  else

                {

                      uiCrcValue = (uiCrcValue >> 1);

                }

            }

    }

return uiCrcValue;

}

pucY是要计算CRC16的字符数组的入口,ucX是字符数组中字符个数。

上位机收到数据的时候,只要把收到的数据按以上算法进行计算CRC16,结果为0x0000表明数据正确。





657082308

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 203回
  • 年度积分:3
  • 历史总积分:117
  • 注册:2014年4月13日
发表于:2018-11-08 20:49:12
1楼

感謝分享。。。。。学习了


工控专家1688

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 100回
  • 年度积分:0
  • 历史总积分:101
  • 注册:2017年10月18日
发表于:2019-07-10 14:37:02
2楼

很简单呀,就是运用IF和FOR指令


相关主题

官方公众号

智造工程师