跳到主要内容

Modbus TCP

Modbus 是历史最悠久、应用最广泛的工业通信协议。几乎所有仪表、变频器和通用工业设备都支持 Modbus。

本网关支持 Modbus TCP(以太网)和 Modbus UDP。仅具备串口(RS-485)的设备需要经由 Modbus 网关(RS-485 → 以太网)接入。


注册表单填写项

输入栏填写内容示例
IP 地址Modbus 从站的 IP192.168.0.50
端口Modbus 端口502(标准)
响应超时 (request-timeout)等待从站响应的最长时间 (ms)5000(5 秒)

Modbus 没有用户名 / 密码的概念。只要 IP 可达,任何人都能读取数值。


标签的 PLC 地址表示法

Modbus 按内存区域分为以下 4 种类型。

区域表示起始含义
Holding Registerholding-register:N16 位,读/写 — 最常用
Input Registerinput-register:N16 位,只读
Coilcoil:N1 位,读/写
Discrete Inputdiscrete-input:N1 位,只读

N 是从站手册中标注的地址编号(通常从 1 开始)。

带数据类型的表示法

即使是同一内存区域,也可能被解释为 16 位 / 32 位 / 浮点数 / 字符串等,因此可以一并标注数据类型。

表示法含义
holding-register:1普通 16 位整数(有符号)
holding-register:1:UINT16 位无符号整数
holding-register:1:DINT32 位整数(占用两个寄存器)
holding-register:1:REAL32 位浮点数(占用两个寄存器)
holding-register:1:LREAL64 位浮点数(占用四个寄存器)
holding-register:100:STRING[10]100~109 的 ASCII 字符串
coil:1线圈 1 号(1 位)

若不指定数据类型,则按 16 位整数解释。若数值为 32 位及以上,务必显式指定。


数据格式 / 格式辅助

标签注册 中的 [数据格式] 与 [格式辅助] 栏,按下表对应填写较为方便。

PLC 中的值数据格式格式辅助PLC 地址示例
线圈 / 离散输入Boolean(留空)coil:1discrete-input:1
16 位整数Integer(留空)holding-register:1
16 位无符号整数IntegerUIholding-register:1:UINT
32 位整数IntegerDWholding-register:1:DINT
32 位浮点数(最常见)FloatREALholding-register:1:REAL
64 位浮点数DoubleLREALholding-register:1:LREAL
N 个字符的字符串StringSTR[N]holding-register:10:STRING[N]

常见问题与处理

现象 / 提示信息可能原因处理方法
“Read timeout” / 响应缓慢从站响应延迟,线缆 / 防火墙 / 端口 (502) 被阻断pingtelnet <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 示例。