最近一直在自学MODBUS RTU通讯,在论坛看到SMART200控制V90 V20 RTU通讯教学视频,我看主要调用MBUS_CRTL跟MBUS_MSG块,为什么没看到PLC发送CRC校验码,没看到关于CRC方面的程序,而我在看MODBUS视频,一直强调RTU通讯,最后要计算CRC码,一并发给变频器,串口工具里面有自动计算校验码,如截图所示,问题如下:
1.PLC控制变频器RTU通讯不需要发送CRC校验码吗?
2.为什么串口工具需要发CRC校验?还有CRC8,CRC16,CRC32有什么区别,在什么地方用到?
谢谢,我一直自学,也没有人可以问,所以经常在论坛请教各位前辈,非常感谢。。。。。
图片说明:
最佳答案
1)这个是自选的,在mbus_ctrl的modbus rtu初始化指令中,就有Parity管脚,这个管脚是让用户自“定义”校验方式。其中,0(无奇偶校验)、1(奇校验)和 2(偶校验)。
你的modbus rtu初始化没有指定需要的校验。
2)这个仍然是自定义为主的,CRC8,CRC16,CRC32只不过是校验时的方式不同而异,主要的区别在于“拿”多少个位来参与校验。就modbus rtu是modbus通讯中一个特例,它的校验方式:RTU模式下,报文中的每个8位字节被转化为两个16进制字符,然后以字节为单位进行传输,并采用CRC(循环冗余校验)方式进行校验。
就拿CRC16校验过程来讲(常用)的modbus校验方式:
1)设置CRC存储器为16#FFFF,存储区:AC0
2)把第一个参与校验的低8位与CRC的低8位进行异或运算,结果存放在CRC
3)把CRC右移一位,最高位补0,检查最低位b0值
4)若b0=0,CRC不变,CRC与16#A001进行异或运算,结果存放在CRC
5)重复3、4两步,直到右移8次,这样第一个8位数均进行处理了,结果存放在CRC
6)重复2、5步,处理第二个8位数
CNC16就是遵循上述6个步骤实现对收、发数据的校验,以验证对数据出错的检验。
提问者对于答案的评价:
谢谢
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc350643.html