一、定义
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)
二、功能
Modbus TCP就是使用TCP协议传输数据,传输的数据是Modbus格式。客户端传输数据时是以十六进制发送,每次发送两位;服务器接收数据时也是以十六进制的形式接收,每次接收两位。 如:0X00,两位十六进制数是8位二进制数。
Modbus TCP的操作对象有四种:线圈、离散输入、保持寄存器、输入寄存器。
|
对象 |
含义 |
|
线圈 |
PLC的输出位,开关量,在Modbus中可读可写 |
|
离散量 |
PLC的输入位,开关量,在Modbus中只读 |
|
输入寄存器 |
PLC中只能从模拟量输入端改变的寄存器,在Modbus中只读 |
|
保持寄存器 |
PLC中用于输出模拟量信号的寄存器,在Modbus中可读可写 |
Modbus的功能码有:(使用16进制)
|
功能码 |
含义 |
功能码 |
含义 |
|
0x01 |
读线圈 |
0x04 |
读输入寄存器 |
|
0x05 |
写单个线圈 |
0x03 |
读保持寄存器 |
|
0x0F |
写多个线圈 |
0x06 |
写单个保持寄存器 |
|
0x02 |
读离散量输入 |
0x10 |
写多个保持寄存器 |
三、通讯
- 通信方式
Modbus TCP设备可分为主站(poll)和从站(slave)。主站只有一个,从站有多个,主站向各从站发送请求帧,从站给予响应。在使用TCP通信时,主站为client端,主动建立连接;从站为server端,等待连接。
主站请求:功能码+数据
从站正常响应:请求功能码+响应数据
从站异常响应:异常功能码+异常码,其中异常功能码即将请求功能码的最高有效位置1,异常码指示差错类型
注意:需要超时管理机制,避免无期限的等待可能不出现的应答
- 通信过程
1,connect 建立TCP连接
2,准备Modbus报文
3,使用send命令发送报文
4,在同一连接下等待应答
5,使用recv命令读取报文,完成一次数据交换
6,通信任务结束时,关闭TCP连接






