ABB机器人Modbus RTU通讯协议

[复制链接]
查看48641 | 回复0 | 2024-10-19 10:56:29 | 显示全部楼层 |阅读模式


一、定义Modbus通信协议,最主要的是Modbus RTU (RS-485总线)转232接线ABB的COM口,Modbus ASCII和Modbus TCP(以太网)三种。Modbus RTU协议,一般大家说的基于串口通信的Modbus通信协议都是指Modbus RTU通信协议。Modbus ASCII协议:报文使用 ASCII 字符。ASCII 格式使用纵向冗余校验和。Modbus ASCII 报文由冒号 (“:”)开始 和换行符 (CR/LF) 结尾构成。Modbus TCP协议,则是在RTU协议上加一个MBAP报文头,并且由于TCP是基于可靠连接的服务,RTU协议中的CRC校验码就不再需要,所以在Modbus TCP协议中是没有CRC校验码的,所以就常用一句比较通俗的话来说:Modbus TCP协议就是ModbusRTU协议在前面加上五个0以及一个6,然后去掉两个CRC校验码字节就OK。通讯模式:轮询(读0.1s,写0.1s)二、协议


    存储区
读写特性数据类型只读线圈读写线圈只读寄存器读写寄存器
只读不可写线圈(BOOL)输入线圈输出线圈输入寄存器输出寄存器
可读可写寄存器(num)1区0区3区4区
寄存器地址范围
存储区类型相对地址长地址短地址
1区0-65535100001-16553510001-19999
0区0-65535000001-06553500001-09999
3区0-65535300001-36553530001-39999
4区0-65535400001-46553540001-49999


    通讯格式
波特率:4800 9600 19200数据位:8校验位:O/E/N停止位:1奇校验ODD(奇数个1为0)偶校验EVEN(偶数个1为0)无校验NONE
起始12345678奇偶停止
00/10/10/10/10/10/10/10/10/11


    发送格式
发送格式:设备地址+功能代码+数据(起始寄存器+寄存器数量)+校验(CRC)


接受格式:设备地址+功能代码+数据(字节计数+具体数据)+校验(CRC)



    功能码
Modbus的功能码使用16进制
读取输出线圈读取输入线圈读取输出寄存器读取输入寄存器写入单个线圈写入单个寄存器写入多个线圈写入多个寄存器
0X010X020X030X040X050X060X0F0X10
三、CRC校验在RTU 模式包含一个对全部报文内容执行的,基于循环冗余校验 (CRC - Cyclical RedundancyChecking) 算法的错误检验域。CRC 域检验整个报文的内容。不管报文有无奇偶校验,均执行此检验。CRC 包含由两个8 位字节组成的一个16 位值。CRC 域作为报文的最后的域附加在报文之后。计算后,首先附加低字节,然后是高字节。CRC高字节为报文发送的最后一个子节。附加在报文后面的CRC 的值由发送设备计算。接收设备在接收报文时重新计算CRC 的值,并将计算结果于实际接收到的CRC 值相比较。如果两个值不相等,则为错误。CRC 的计算, 开始对一个16 位寄存器预装全1。然后将报文中的连续的8 位子节对其进行后续的计算。只有字符中的8个数据位参与生成CRC 的运算,起始位,停止位和校验位不参与CRC计算。CRC 的生成过程中, 每个 8–位字符与寄存器中的值异或。然后结果向最低有效位(LSB)方向移动(Shift) 1位,而最高有效位(MSB)位置充零。然后提取并检查LSB:如果LSB 为1, 则寄存器中的值与一个固定的预置值异或;如果LSB 为 0, 则不进行异或操作。这个过程将重复直到执行完8 次移位。完成最后一次(第8 次)移位及相关操作后,下一个8位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8 次。当所有报文中子节都运算之后得到的寄存器忠的最终值,就是CRC。.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则