永宏PLC 华南总代商   大客户热线:13425124451

销售:张小姐:18126538285  商务 QQ:2734279883

商务:王小姐:18126438385  技术热线:400-850-1221


永宏PLC自由通讯CRC校验的生成

分享到:
点击次数:1161 更新时间:2019年01月25日09:11:43 打印此页 关闭


永宏PLC自由通讯CRC校验的生成

自由通讯的意思是:上位可以依据下位给出的协议,按照该协议对下位进行存取操作。用在触摸屏或者PLC上就是:通讯命令完全交由宏指令(对HMI而言)或者梯形图(对PLC而言)来完成。

这里要举的例子就是用永宏自由通讯(FUN151 MD1模式)实现对MODBUS_RTU通讯(MODBUS_RTU协议内容网上可以下载)。我觉得RTU的比较难的在于CRC校验的实现,当然永宏本身是有 CRC16 指令的,这样可以省去CRC生成算法,但在一些没有CRC指令的PLC上面,就需要自己编写了,这里来编写CRC算法。

台湾永宏触摸屏,永宏PLC, 永宏伺服一托二,永宏变频器,永宏传感器,台湾永宏开关电源。 信捷PLC,信捷触摸屏,信捷伺服,松下伺服,三菱PLC,显控人机界面,显控触摸屏。

CRC算法说明,大概就是下面这几个意思:
1.设置CRC寄存器,并给其赋值FFFF(hex)。
 2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或,并把结果存入CRC寄存器。
3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。
4.如果LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。
 5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。
 6.重复第2至第5步直到所有数据全部处理完成,最终CRC寄存器的内容即为CRC值。
 
举例:对 02H  03H  07H  D0H  00H  03H 这6个数据进行CRC校验。我们可以事先用winproladder算出这6个数据的CRC校验值或者在通讯表格里面,拖动选中需要进行CRC校验的寄存器号,也可以得出CRC值,如下图

现在通过编程来计算CRC了,我把这个过程做成子程序,并且命名为 CRC,说明
1.    R100=FFFFH(CRC寄存器),在CRC运算前,事先被赋值;
2.    V 指针,在CRC运算前,先被清零;
3.    02H  03H  07H  D0H  00H  03H 被放在 R6003 ~R6008 这6个寄存器内。
 
再来看看主程序部分



通过监视页观察 CRC结果

由于CRC校验结果是高低位对调的,这里把CRC累加器的值对应存放到需要存储CRC结果的寄存器就可以了。
永宏的B1/B1z系列
永宏PLC之前不能使用CRC16指令,所以之前的CRC结果比较麻烦,但现在winproladder V3.20里面,B1/B1z已经支持该指令,并且也可以进行浮点运算了。

上一条:可编程控制器与变频器连接时应注意哪些问题? 下一条:PLC无输出怎么办?