Skip to content

Modbus 设备接入 ​

名尚智联内置 Modbus 主站,支持 TCP(MBAP)和 RTU 两种传输模式,自动轮询寄存器并映射到物模型属性。


一、支持功能 ​

传输函数码说明
TCP (MBAP)1 线圈 / 2 离散量 / 3 保持寄存器 / 4 输入寄存器主动轮询
RTU(经 TCP 透传串口服务器)同 TCPtransport: RTU + 指定串口服务器
点位缩放scale + offset自动换算(如原始值 2560 → 温度 25.6℃)
数据类型BOOL / INT16 / UINT16 / INT32_BE / INT32_LE / FLOAT_BE / FLOAT_LE / RAW大小端自动处理
离线判定连续 N 次采集失败可配置 fail-tolerance

二、网关配置 ​

2.1 application.yml ​

yaml
ms:
  modbus:
    enabled: true
    connect-timeout-ms: 3000
    request-timeout-ms: 3000
    gateways:
      - name: 一号车间网关
        serial: GW-MODBUS-001           # 需在 ms_device 中存在
        transport: TCP                   # TCP=MBAP;RTU=串口服务器
        host: 192.168.1.50
        port: 502
        unit-id: 1                      # RTU 从站地址
        interval-ms: 5000               # 采集周期
        fail-tolerance: 3               # 连续 N 次失败判离线
        points:
          - identifier: temperature      # 物模型属性标识
            function: 3                  # 3=保持寄存器
            address: 0
            quantity: 2                  # 2 个寄存器(FLOAT)
            data-type: FLOAT_BE          # 大端浮点数
            scale: 0.1                   # 原始值 × 0.1
            offset: -40                  # 再减 40
          - identifier: humidity
            function: 3
            address: 2
            quantity: 2
            data-type: FLOAT_BE
            scale: 0.1
            offset: 0

2.2 动态更新 ​

网关配置可通过 REST API 热加载,无需重启后端:

bash
# 查询所有网关
curl -H "Authorization: <token>" http://localhost:8080/api/modbus/gateways

# 重载配置
curl -X POST -H "Authorization: <token>" http://localhost:8080/api/modbus/reload

三、数据类型映射 ​

data-type长度说明示例原始值 → 实际值
BOOL1 bit布尔1 → true
INT162 bytes有符号 16 位-1 → -1
UINT162 bytes无符号 16 位65535 → 65535
INT32_BE4 bytes大端有符号 32 位0x00010000 → 65536
INT32_LE4 bytes小端有符号 32 位0x00010000 → 256
FLOAT_BE4 bytes大端 IEEE 7540x41C80000 → 25.0
FLOAT_LE4 bytes小端 IEEE 7540x0000C841 → 25.0
RAW可变原始字节(hex)→ "FF00"

四、scale + offset 计算 ​

java
实际值 = 原始值 × scale + offset

典型场景:

寄存器原始值scaleoffset实际含义
温度2560.1-40-14.4℃(传感器偏移)
湿度6230.1062.3% RH
电压22000.10220.0 V
电流150.0100.15 A

五、监控 ​

5.1 采集日志 ​

Redis Key:ms:modbus:{gatewaySerial}:{timestamp}

bash
redis-cli -p 6380 LRANGE ms:modbus:GW-MODBUS-001 0 5
# → ["2026-10-17T20:00:00 temperature=25.6", "2026-10-17T19:59:55 temperature=25.5"]

5.2 设备状态 ​

设备离线时自动标记 online=0,重新连上自动恢复。


六、常见问题 ​

问题排查
网关始终离线检查 host:port 是否可达、unit-id 是否正确、防火墙是否放行 502
读取值异常检查 data-type 大小端是否正确,FLOAT_BE vs FLOAT_LE
轮询过于频繁调整 interval-ms,Modbus RTU 建议 ≥ 200ms
寄存器地址错Modbus 地址有 0 起始 / 1 起始两种约定,注意核对