Modbus通信协议学习
Modbus 通讯是工业上用的比较广泛的通讯协议,它包含Modbus TCP ,RTU,ASCII,在日常的工作中我们用到的并比较多的是ModbusRTU.ModbusRTU与ModbusAscii均支持RS485通信协议。
1.这里介绍下ModbusTcp与ModbusRTU的区别在哪里:
1.1 通信硬件连接的区别:
RTU依托的的工业串口连接,例如RS485,TCP则依托的以太网传输。
1.2 通信协议的报文的区别,下文会列举。
2. 协议
协议:就是双方的通信约定,我需要以那种格式,及格式的内容代表的何种意思能够达成我们双方的沟通。
MoubusRTU 通信报文格式:
报文:简单的说就是我们发送的一连串完整的数据,就是我们发送的一帧数据,可以把他们叫做报文。
CRC校验:
其实就是检测发送的报文与接收方收到的报文是否一致,如果一直就发送给成功,否则代表发送有误,具体以的CRC如何实现检验的呢?就是将前面的一连串的报文进行 累加求和得到一个数据,再将高低位分别存放到CRC校验的高低八位上,就是先了CRC检验(TCP没有CRC校验)。
报文格式:那报文格式到底是长个啥样子呢?下面来进一步学习。
Eg:
01 06 00 01 0017 98 04
那上面的这一长串的数据代表什么意思呢?其实这就是RTU的报文格式及数据,下面一一列举所带代表的意思;
01 从机的地址,也就是你要往哪台设备上发送数据的那台设备的地址。
06 功能号,意思是你要对这台从机做何种操作,读线圈/寄存器?写线圈/寄存器?注意一点的是这个线圈与寄存器的区别,是个啥玩意,其实就是对位变量与16位变量的操作。
00 01 操作的寄存器地址,代表往0001地址上操作。
00 17 向寄存器上写入的数据,数据就是16位数据00 17.
98 04 CRC 校验(将 01 06 00 01 00 17累加后得到的16位数据98 04)
说到这大家对报文格式有了初步的认识了,下面列举下到底有多少功能码?他们分别的作用是什么?
功能码列举:
0x01 读线圈状态
0X02 读取输入状态
0x03 读保持寄存器
0x04 读输入寄存器
0x05 读取单个线圈
0x06 写单个寄存器
0x0F 写多个线圈
0x10 写多个寄存器
ModbusTCP与RTU区别与联系可以参考如下链接https://wenku.baidu.com/view/43b10bc26294dd88d0d26b8e.html(来自百度文库)本文不做赘述