1、CRC 校验原理以及梯形图的实现计算法:CRC 校验生成步骤:1、 预置一个 16 位 CRC 寄存器为 16 进制 FFFF,即所有数均为 1.2、 该 16 位寄存器的低 8 位字节与信息帧的第一位字节的 8 位进行异或运算,运算结果放入 16 位寄存器。3、 把这个 16 位寄存器向右移一位,用 0 补充高位。4、 若向右移出的是 1,则生成多项式 A001 和这个寄存器进行异或运算若移出数为 0 则返回第三步。5、 重复 3 和 4 直至移出 8 位。6、 重复 2 步到第 5 步进行下一个 8 位数据的处理。7、 最后得到的 CRC 寄存器即为 CRC 码。梯形图实现 CRC 校验:
2、由上述步骤可知要实现 CRC 校验要用到双重循环,而在西门子 S7-1200 中没有像 S7-300 中那样的 loop 虚幻指令,所以我们只能用普通指令进行编写循环。首先,建立第五步的内部循环,首先建立函数块命名为“校验” ,在“校验”函数块中定义输出参数:准备惊醒校验的“校验数” 、校验时要移动的位数“校验次数”首次惊醒异或的“校验值_1”输出参数:校验后的结果“校验值”然后,建立第 6 步的函数块,命名“为 CRC 校验块 ”在函数块中定义输入输出参数。输入参数:要校验的数组“数组” 、开始校验的位置“起始下标” 、校验的数“元素值” 、要校验的个数“字节数”输出参数:校验完成后的地校验值“校验结果”在函数中会用到调用上一步中所建立的函数块“校验”最后在函数中调用“CRC 校验块”即可实现 CRC 校验,用此校验方法在校验中犹豫用到的校验方法为一位法,所以在循环时所需的时间比较长。可以采用查表的方法来降低计算所需要的时间。