课程表
G110G120G130G150G180/ET200 分布式变频器
V20/V10V70/V60V90/V80V50及其他V系列综合产品
SIMOTION DSIMOTION CSIMOTION P
SINAMICS 6RA80Simoreg 6RA70/28/24
低压交流电机伺服电机/主轴电机防爆/齿轮/直流/高压电机
3TF3RT13RT6/53RT2其他接触器产品
3RW3/3RW40/3RW443RW513RW50/3RW52/3RW55其他软起动器产品
3SB33SU1其他信令产品
时间继电器中间继电器监控继电器小型插针式继电器电流继电器其他继电器产品
安全继电器行程开关其他安全类产品
3VU3RV6/53RV23RV1其他电机保护断路器
3UA3RU6/53RU23RU13RB其他过载继电器
提示
置评已完成,谢谢!
您现在可以为该问题添加标签。
最近一直在自学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有什么区别,在什么地方用到?
谢谢,我一直自学,也没有人可以问,所以经常在论坛请教各位前辈,非常感谢。。。。。
图片说明:
产品版区:SIMATIC S7-300(F)/S7-400(F/H/FH)
2016LWW - 毕业实践员 第4级
问题ID:207868
看了这个问题的网友还看了
最佳答案
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个步骤实现对收、发数据的校验,以验证对数据出错的检验。
回答者:
WWCWWC
提问者对于答案的评价:
谢谢
暂无评论
其他答案
1.PLC控制变频器RTU通讯不需要发送CRC校验码吗?
要发的。这是MODBUS RTU通讯协议必须的。
MODBUS RTU 协议主站的请求帧以及从站的响应帧的最后的两个字节是 CRC 校验码。
只不过当你调用 MODBUS RTU 的库指令时,只要定义好管脚,数据帧由指令库组织好,然后串行发送。这个功能已经封装在指令库中了。 你附图的就是 S7-200 的指令库主站指令。
2.为什么串口工具需要发CRC校验?
这是MODBUS RTU通讯协议的规范,串口调试工具不具备自动产生请求帧的功能,所以你要自已通过软件也好还是推导也好,计算出 CRC 校验码。
3、还有CRC8,CRC16,CRC32有什么区别,在什么地方用到?
它们都是循环冗余校验码,CRC8 是位的,CRC16是16位的,CRC32是32位的,它们的生成多项式的最高次幂是不同的。这方面的内容一般在计算机原理中有讲到。也可以在网上搜相关内容来看。
MODBUS RTU 协议使用的是 CRC16 循环冗余校验码。
回答者:
大宝朱林森 - 高级顾问 第14级
1.PLC控制变频器RTU通讯不需要发送CRC校验码吗?
使用自由口编写MODBUS指令或使用串口调试助手调试MODBUS时需要用户自行考虑CRC校验,计算校验码放在报文最后两字节,一起发送;MICROWIN或SMART软件自带MODBUS库指令,不需要按报文填写详细信息,库指令自动补齐报文,如读数据我们只写0模式,库指令会自动按读地址填写好发送报文的功能码是F03,并自动补齐CRC校验码。
2.为什么串口工具需要发CRC校验?还有CRC8,CRC16,CRC32有什么区别,在什么地方用到?
串口工具带CRC校验功能,是手动的,无法自动补充,所以需要自己手动计算一下。
CRC8,16,32是对字节计算,字计算还是双字计算CRC。
回答者:
weiyt - 资深顾问 第13级
一、转帖:
Modbus RTU采用16位的循环冗余校验码(CRC)。通过一个对数据进行“或”运算以及移位运算的复杂程序,由主设备产生CRC,并且由接收设备进行检查。如果双方计算出的CRC值不符,从设备就会要求重新传送信息。
Modbus RTU协议分为Modbus RTU主站协议和Modbus RTU从站协议。Modbus通信是由功能码来控制的,主站直接访问从站的数据区。
附:Modbus RTU CRC校验码计算方法
在CRC计算时只用8个数据位,起始位及停止位,如有奇偶校验位也包括奇偶校验位,都不参与CRC计算。
CRC计算方法是:
1、 加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器。
2、 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的相异或,异或的结果仍存放于该CRC寄存器中。
3、 把CRC寄存器的内容右移一位,用0填补最高位,并检测移出位是0还是1。
4、 如果移出位为零,则重复第三步(再次右移一位);如果移出位为1,CRC寄存器与0XA001进行异或。
5、 重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理。
6、 重复步骤2和5,进行通讯信息帧下一个字节的处理。
7、 将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换
8、 最后得到的CRC寄存器内容即为:CRC校验码。
二、见:
、实例:
http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=88795&cid=1081
、使用西门子S7-300 PLC 指针实现CRC16 校验计算:
回答者:紫方 - 资深顾问 第13级
扫描打开手机版