Skip to content

Modbus TCP 驱动

dc3-driver-modbus-tcp 把 Modbus TCP 从站设备接入 IoT DC3——以从站为目标,周期性读取线圈/寄存器值,并支持向寄存器写值的命令。

Modbus TCP 是工业现场最常见的协议之一(PLC、电表、传感器网关大量在用)。本驱动作为 Modbus 主站(client),通过 TCP 连到一个或多个从站,按位号上配置的功能码与地址采数、写值。

  • 驱动名 / codeModbus TCP Driver / ModbusTcpDriver
  • 类型DRIVER_CLIENT(主动连从站)

驱动配置(设备级 driver-attribute

接入一台 Modbus TCP 设备时,在设备上填这些属性

属性code类型默认值说明
HosthostSTRINGlocalhostModbus 从站 IP
PortportINT502Modbus TCP 端口(标准 502)

位号配置(point-attribute

每个采集位号上填:

属性code类型默认值说明
Slave IDslaveIdINT1Modbus 从站单元号
Function CodefunctionCodeINT1读功能码 [1, 2, 3, 4]
OffsetoffsetINT0寄存器/线圈地址偏移

功能码决定读什么

读取用 01(线圈)/ 02(离散输入)/ 03(保持寄存器)/ 04(输入寄存器)。位号的数据类型(PointpointTypeFlag)要和功能码取回的数据宽度对得上——多寄存器量(如 32 位 FLOAT)由位号类型决定怎么拼。

写命令配置(command-attribute

可写位号还需在写命令上填:

属性code类型默认值说明
Slave IDslaveIdINT1从站单元号
Function CodefunctionCodeINT6写功能码 [5, 6, 15, 16]
OffsetoffsetINT0地址偏移
Value TemplatevalueTemplateSTRING${value}写值模板,用命令参数渲染

采集与健康

  • 采集周期:默认 cron 0/30 * * * * ?(每 30 秒读一轮)。
  • 健康/在线:设备健康检查默认 cron 0/15 * * * * ?,租约超时 45 秒——在线状态机制见设备

最小接入示例

把 IP 192.168.1.10:502 的一台 Modbus 从站接进来:

  1. Modbus TCP Driver 创建设备,driver 属性填 host=192.168.1.10port=502
  2. 给设备绑定的物模型加一个温度位号pointTypeFlag=FLOATREAD_ONLY),point 属性填 slaveId=1functionCode=3offset=0
  3. 启动驱动,30 秒内就能在位号值里看到采集值。

易错点

offset 是 0 基协议地址,不是 40001

offset 是协议层的 0 基偏移。按 Modbus 习惯写法读"保持寄存器 40001",应填 functionCode=3offset=0(第 2 个保持寄存器是 offset=1,以此类推)。把 40001 直接填进 offset 会读到错误地址。

一个驱动实例可接多台从站

同一个 Modbus TCP 驱动进程可服务多台设备。多台从站挂在同一网关不同单元号时,host 相同、由位号的 slaveId 区分。

延伸阅读

Released under the AGPL-3.0 License · 基于 AGPL-3.0 协议发布