FX-PLC的CRC另类计算方式 点击:1447 | 回复:4



yjig

    
  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2011-12-25 21:18:57
楼主

众所周知,三菱PLC没有计算CRC的指令,通常的计算方式,先进行逻辑与(WAND),对最低位的“1”判断,然后采用移位(ROR),而后再对首位强行置0(用H7FFF进行逻辑与),最后一步,如果寄存器的最低位=1,则进行H0A001逻辑异或计算。以上过程共分4步(见以下附图1)。

本人觉得以上的计算方式太繁,近来突发奇想,异想天开采用非常规的方式,进行CRC计算,见下图:

以上程序的依据及理由:

通常在ROR移位后,原有2进制数据“1”的总数不会减少,右移动液出的“1”将循环到寄存器的最高位,这将与CRC计算首位补“0”相矛盾。但此时寄存器是否液出,完全可以判断,如果液出,特殊继电器M8022将置1,此时只要将原有的逻辑异或的模(H0A001)进行变换,使他们的计算结果与原有的保持一致,也就是说将H0A001换成H02001,再进行逻辑异或计算。以上方式,经实际验证,其CRC计算结果与原有方式完全一致。

 

尽管简化后的程序也减少不了几步,但可以借此提高对功能指令的理解能力。




  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 564回
  • 年度积分:0
  • 历史总积分:688
  • 注册:2008年3月01日
发表于:2013-06-03 10:04:03
1楼

请问一下这个程序计算的是哪几个寄存器的CRC ?计算出的CRC校验码结果在哪个寄存器?

yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2013-06-03 18:09:34
2楼

计算出的CRC校验码结果存在D500中,不过,此时的CRC结果是暂时存放在D500,还需将其转移到其他寄存器(上式中未体现),因为,在下一次计算时,D500又将被赋予新的数值,也就是说D500将被更新。

此外,还有一重要的原因:

D500需分解为两个数值,高8位、低8位,并需要高低对调。

  • 精华:0帖
  • 求助:0帖
  • 帖子:18帖 | 564回
  • 年度积分:0
  • 历史总积分:688
  • 注册:2008年3月01日
发表于:2013-06-04 11:49:14
3楼

回复内容:

对: yjig  计算出的CRC校验码结果存在D500中,不过,此时的C... 内容的回复!


 主要是你这样计算算出的CRC到底是哪些寄存器的?

yjig

  • 精华:2帖
  • 求助:5帖
  • 帖子:97帖 | 5237回
  • 年度积分:0
  • 历史总积分:12514
  • 注册:2004年6月04日
发表于:2013-06-04 19:58:40
4楼

计算的寄存器:请看以上程序中的D500的解释:

是D510-D515的异或,以上程序仅仅是校验中的一部分,主要目的是介绍CRC的另类校验计算方式。

建议楼主参考其他人编写的完整的CRC校验程序。


热门招聘
相关主题

官方公众号

智造工程师