Skip to content

Modbus TCP / RTU 协议介绍 ​

协议概述 ​

Modbus 由 Modicon(现 Schneider Electric)于 1979 年发布,是工业自动化领域应用最广泛的通信协议。它采用简单的主从(Master/Slave)请求-响应模型,广泛用于 PLC、RTU、传感器、变频器等设备的互联。

EMS Simulate 基于 pymodbus 库实现 Modbus 协议,支持 Modbus TCP(以太网)与 Modbus RTU(RS-232/RS-485 串口)两种常见变体,可配置为服务端(模拟从站)或客户端(作为主站读取真实设备)。

支持的模式 ​

模式物理介质特点
Modbus TCP以太网基于 TCP 502 端口,帧 = MBAP 头 + PDU,无需校验码
Modbus RTURS-232 / RS-485基于串口,帧 = 地址 + 功能码 + 数据 + CRC16 校验,报文间需 ≥3.5 字符间隔

Modbus ASCII 变体暂不支持。

数据模型(四类数据区) ​

Modbus 以"数据区 + 地址"寻址,共四类数据区:

数据区地址范围读写属性典型用途
线圈(Coil)0xxxx可读可写开关量输出(继电器等)
离散输入(Discrete Input)1xxxx只读开关量输入(按钮、限位等)
保持寄存器(Holding Register)4xxxx可读可写参数、设定值(16 位)
输入寄存器(Input Register)3xxxx只读采集量(16 位)

每个寄存器为 16 位,多个寄存器可组合表示 32 位整数或 IEEE 754 浮点数(由解析码决定解释方式)。

支持的功能码 ​

功能码名称操作对象
01读线圈线圈
02读离散输入离散输入
03读保持寄存器保持寄存器
04读输入寄存器输入寄存器
05写单个线圈线圈
06写单个寄存器保持寄存器
15写多个线圈线圈
16写多个寄存器保持寄存器

解析码系统 ​

不同厂商设备的寄存器字节序各异,EMS Simulate 内置 27 种解析码,覆盖常见的数据格式:

  • 8 位:Byte(无符号 / 有符号);
  • 16 位:Short AB(大端)、Short BA(字节交换)、Short CD(小端),各有符号/无符号;
  • 32 位整数:Long AB CD(大端)、Long BA DC(大端字交换)、Long DC BA(小端)、Long CD AB(小端字交换),各有符号/无符号;
  • 32 位浮点:Float AB CD、Float BA DC、Float CD AB(对应不同字节序);
  • 64 位:Int64、Double(大端 / 小端)。

配合乘法系数与加法系数可将原始值换算为工程值:

真实值 = 寄存器原始值 × 乘法系数 + 加法系数

角色说明 ​

角色行为
服务端(Server / 从站)软件监听端口(TCP)或串口,维护四类数据区内容,响应主站的读/写请求
客户端(Client / 主站)软件主动发起请求,读取或写入真实从站的数据

常用术语 ​

术语含义
从站地址(Slave ID / Unit ID)RTU 中为 1~247,TCP 中为单元标识符
PDU协议数据单元(功能码 + 数据)
事务标识符TCP 帧中用于匹配请求与响应的编号
解析码(Decode Code)决定寄存器原始值如何解释为数值

📄 详细操作见 Modbus 操作指南,报文结构见 Modbus 报文查看。

Released under the Apache 2.0 License.