Modbus TCP
Modbus 是历史最悠久、应用最广泛的工业通信协议。几乎所有仪表、变频器和通用工业设备都支持 Modbus。
本网关支持 Modbus TCP(以太网)和 Modbus UDP。仅具备串口(RS-485)的设备需要经由 Modbus 网关(RS-485 → 以太网)接入。
注册表单填写项
| 输入栏 | 填写内容 | 示例 |
|---|---|---|
| IP 地址 | Modbus 从站的 IP | 192.168.0.50 |
| 端口 | Modbus 端口 | 502(标准) |
| 响应超时 (request-timeout) | 等待从站响应的最长时间 (ms) | 5000(5 秒) |
Modbus 没有用户名 / 密码的概念。只要 IP 可达,任何人都能读取数值。
标签的 PLC 地址表示法
Modbus 按内存区域分为以下 4 种类型。
| 区域 | 表示起始 | 含义 |
|---|---|---|
| Holding Register | holding-register:N | 16 位,读/写 — 最常用 |
| Input Register | input-register:N | 16 位,只读 |
| Coil | coil:N | 1 位,读/写 |
| Discrete Input | discrete-input:N | 1 位,只读 |
N 是从站手册中标注的地址编号(通常从 1 开始)。
带数据类型的表示法
即使是同一内存区域,也可能被解释为 16 位 / 32 位 / 浮点数 / 字符串等,因此可以一并标注数据类型。
| 表示法 | 含义 |
|---|---|
holding-register:1 | 普通 16 位整数(有符号) |
holding-register:1:UINT | 16 位无符号整数 |
holding-register:1:DINT | 32 位整数(占用两个寄存器) |
holding-register:1:REAL | 32 位浮点数(占用两个寄存器) |
holding-register:1:LREAL | 64 位浮点数(占用四个寄存器) |
holding-register:100:STRING[10] | 100~109 的 ASCII 字符串 |
coil:1 | 线圈 1 号(1 位) |
若不指定数据类型,则按 16 位整数解释。若数值为 32 位及以上,务必显式指定。
数据格式 / 格式辅助
标签注册 中的 [数据格式] 与 [格式辅助] 栏,按下表对应填写较为方便。
| PLC 中的值 | 数据格式 | 格式辅助 | PLC 地址示例 |
|---|---|---|---|
| 线圈 / 离散输入 | Boolean | (留空) | coil:1 或 discrete-input:1 |
| 16 位整数 | Integer | (留空) | holding-register:1 |
| 16 位无符号整数 | Integer | UI | holding-register:1:UINT |
| 32 位整数 | Integer | DW | holding-register:1:DINT |
| 32 位浮点数(最常见) | Float | REAL | holding-register:1:REAL |
| 64 位浮点数 | Double | LREAL | holding-register:1:LREAL |
| N 个字符的字符串 | String | STR[N] | holding-register:10:STRING[N] |
常见问题与处理
| 现象 / 提示信息 | 可能原因 | 处理方法 |
|---|---|---|
| “Read timeout” / 响应缓慢 | 从站响应延迟,线缆 / 防火墙 / 端口 (502) 被阻断 | 用 ping、telnet <ip> 502 确认可达性。尝试加大响应超时 |
| 地址表示错误 (Invalid address) | 格式拼写有误 | 按 holding-register:1 那样准确使用冒号 |
数值始终为 0 | 区域类型不匹配(本应为 holding 却按 input 读取等) | 在从站手册中确认属于 “FC 03 / 04 / 01 / 02” 中的哪一种 |
| 32 位浮点数出现乱码 | 从站的字节 / 字序不同 | 若从站为 little-endian,请将数据类型改为 :UDINT_LSWORD_FIRST 等 |
字节序问题因从站厂商而异,查阅手册或用其他工具(如 Modbus Poll)比对验证是最快的办法。
使用模拟器进行测试
即使没有 PLC,也可以用 Modbus 模拟器验证运行情况。
- 在 [添加连接] 的卡片列表中选择 模拟器 → Modbus 模拟器,网关会自动启动模拟器进程并建立连接。
- 无需任何外部工具,holding register 中会立即出现模拟数值。
更详细的示例 / 自动化注册
请参阅 高级 — REST API 中的 Modbus 示例。