设备接入(Modbus Server)
这篇解决什么
设备主动连上网关之后,谁发读请求。读完能对上 protocol: modbus_tcp_server:网关听 503,先用自定义功能码认证,再云端轮询。
产品 protocolType 填 modbus_tcp_server。网关去连从站见 设备接入(Modbus Client)。
示意图:先建 TCP。未认证不发标准读。认证后按点位轮询。
从哪改
| 名称 | 说明 | 仓库路径 |
|---|---|---|
| 协议 | Vert.x NetServer | ruoyi-office/yudao-module-iot/yudao-module-iot-gateway/.../modbus/tcpserver/IotModbusTcpServerProtocol.java |
| 认证 / 上行 | 自定义功能码 | IotModbusTcpServerUpstreamHandler |
| 编解码 | MBAP 帧 | IotModbusFrameDecoder / IotModbusFrameEncoder |
| 点位配置 | 与 Client 同一套表 | iot_device_modbus_config / iot_device_modbus_point |
| 样例 | id: modbus-tcp-server-1,默认关,端口 503 | application.yaml |
类注释:设备用自定义功能码(默认 FC 65,合法范围 65–72)发认证;通过后网关再发标准读,设备响应。这是「云端轮询」,不是设备自己周期上报。
custom-function-code 默认 65。request-timeout 默认 5000 ms,request-cleanup-interval 默认 10000 ms,管 pending 读。config-refresh-interval 默认 30 秒。
连接:IotModbusTcpServerConnectionManager。轮询:IotModbusTcpServerPollScheduler。点位仍挂物模型 identifier,功能码 FC01–04。
mode / frameFormat 与 Client 共用枚举。Server 场景下设备不用填「从站 IP」给网关去连,但点位和从站号仍要在配置表里。
字段
| 名称 | 说明 | 仓库路径 |
|---|---|---|
port | 网关监听,样例 503 | ProtocolProperties |
custom-function-code | 认证用,默认 65 | IotModbusTcpServerConfig |
request-timeout | 一笔读等待 | 同上 |
slaveId / 点位 | 认证后轮询 | IotDeviceModbusConfigDO / IotDeviceModbusPointDO |
不要和 Client 抢同一产品
modbus_tcp_client 是网关连出去。modbus_tcp_server 是设备连进来。产品行只能选一个字符串。
认证功能码要写进固件
标准从站不会理 FC 65。只开 503、不改设备固件,连接在、永远不会进入轮询。
示意图:按本仓库实现画的时序。
配置与操作
yaml 开 id: modbus-tcp-server-1,protocol: modbus_tcp_server,网关听 503。设备主动连上后,先走自定义功能码认证(样例 FC 65),再由网关发读请求。产品 protocolType 填 modbus_tcp_server。
和 Client 方向相反:不要让网关去连从站 502。开启见 IoT 功能设计。

本系统截图:IoT 首页。协议实例在网关 yaml,没有「MQTT / HTTP」独立菜单。
