Modbus TCP Server
注意:Modbus TCP Server 功能只在 TKG(网关运行 TKL)和 TKE(边缘侧服务器)中支持,云平台不支持此功能。
ThinkLink 内置 Modbus TCP Server,可将设备的遥测数据、属性暴露为 Modbus 寄存器,供 SCADA、HMI 等工业系统以标准 Modbus TCP 协议读取。同时,第三方系统向寄存器写值时,ThinkLink 可自动触发绑定的 RPC 向下游设备下发指令,实现双向联动。
数据流向
ThinkLink 设备上报遥测 / 属性变更
↓
Modbus 寄存器自动更新
↑(读寄存器)
SCADA / HMI / PLC(Modbus TCP Client)
↓(写寄存器)
ThinkLink 触发绑定的 RPC → 下发指令给 IoT 设备配置步骤
第一步:启动 Modbus TCP Server
- 进入系统服务(System Services)
- 找到 Modbus TCP Server 条目,点击配置
- 填写监听端口(默认 502)和所属租户
- 点击启动
注意:每个租户只能运行一个 Modbus TCP Server 实例。同一时刻只有一个租户的服务处于 RUNNING 状态。如需为多个租户提供 Modbus 访问,需分别为各租户启动独立的服务实例(监听不同端口)。
第二步:在设备上启用 Modbus 映射
在设备管理中打开目标设备的配置详情:
- 切换到基本信息 Tab
- 将
modbus_tcp开关设为TRUE - 保存设备配置
只有启用了 modbus_tcp 的设备,其数据才会被映射到寄存器地址空间。
第三步:配置寄存器映射
进入运维管理 → Modbus TCP 的寄存器列表,为已启用的设备添加寄存器映射条目:
| 配置项 | 说明 |
|---|---|
| 设备 EUI | 选择要映射数据的目标设备 |
| 寄存器类型 | coils(线圈,1 bit 读写)/ discrete_inputs(离散输入,1 bit 只读)/ holding_registers(保持寄存器,16 bit 读写)/ input_registers(输入寄存器,16 bit 只读) |
| 寄存器地址 | 十六进制地址;ThinkLink 自动检测冲突,同一类型内地址不可重复 |
| 数据来源 | 映射到设备的哪个数据源:telemetry_data(遥测数据)/ shared_attrs(共享属性)/ server_attrs(服务端属性) |
字段路径(name_path) | 具体字段名,支持多级路径,如 temperature、sensor.value |
| 数值类型 | boolean / string / number |
| RPC 绑定 | 可选。绑定后,当 Modbus Client 写该寄存器时,ThinkLink 自动触发指定 RPC 向设备下发指令 |
读写行为说明
读寄存器(Client → ThinkLink)
- Client 读取寄存器时,ThinkLink 返回该寄存器映射的设备字段当前值
- 值在设备每次上报数据后自动更新,无需额外配置轮询
写寄存器(Client → ThinkLink → 设备)
- Client 写寄存器,该寄存器必须绑定了 RPC
- ThinkLink 收到写操作后,自动以写入值作为参数调用绑定的 RPC
- RPC 将指令通过 LoRaWAN 或 MQTT 下发给设备
典型用途:SCADA 系统通过写
holding_registers修改设备的采样间隔,ThinkLink 触发"设置采样间隔"RPC 下发到设备。
导出点表
Modbus 点表(寄存器地址映射表)可以导出为 Excel,用于交付给第三方系统集成商,也可从 Excel 导入批量配置。
- 在 Modbus 寄存器列表页点击"导出",下载当前所有寄存器映射
- 按需修改后点击"导入"批量写入(已存在 ID 的条目会被覆盖更新)
在正式部署前,通常需要将点表提供给 BMS/SCADA 的集成商,以便对方配置 Modbus Client 的点位地址。ThinkLink 的导出文件包含对象类型、地址、名称、描述、数据类型、单位、读写权限等完整信息。