Modbus 点位写
x/modbusWrite组件:v0.37.0+ 通过 Modbus 协议(TCP/RTU)批量写入点位,地址用工业主流的 Modicon 传统地址,成功走 Success 链、失败走 Failure 链。
与命令式 x/modbus(单点 Cmd/Address/Quantity)不同,本组件面向点位表写入,与 x/modbusRead 共享同一套点位结构与连接配置。
需要额外引入扩展库: rulego-components-iot (opens new window)
# 配置
| 字段 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| server | string | Modbus 服务器地址(tcp://host:port 或 rtu:///dev/ttyUSB0) | tcp://127.0.0.1:502 |
| unitId | uint8 | 从机编号 | 1 |
| points | array | 默认写入点位表(见下)。若 msg.Data 带点位列表则优先使用 | 无 |
| tcpConfig | object | TCP 配置(timeout/certFile/certKeyFile/caFile) | 无 |
| rtuConfig | object | RTU 串口配置(speed/dataBits/parity/stopBits) | 无 |
| encodingConfig | object | 编码配置(endianness/wordOrder,多寄存器字节序) | 大端高字 |
# 点位表 points
| 字段 | 说明 |
|---|---|
| name | 点位名称 |
| addr | Modicon 地址(1-based):00001=线圈(Coil)、10001=离散输入(Discrete Input)、30001=输入寄存器(Input Register)、40001=保持寄存器(Holding Register);扩展 6 位 400001+ 为保持寄存器 |
| type | 数据类型:BOOL/UINT16/INT16/UINT32/INT32/UINT64/INT64/FLOAT32/FLOAT64 |
| value | 写入值(字符串形式,如 "23.5"、"true"、"0x1F"),支持 ${msg.xx} 模板 |
| endian | 多寄存器字节序:ABCD/CDAB/BADC/DCBA |
各字段支持 ${msg.xx} / ${metadata.xx} 模板。
# 写入规则
- 只读区拒写:
10001(离散输入) /30001(输入寄存器) 为只读,写入直接失败 - BOOL 写仅限线圈区:
BOOL类型只能写00001(线圈);寄存器区无原子位写能力 - 多寄存器类型:
UINT32/INT32/FLOAT32/UINT64/INT64/FLOAT64跨多个寄存器,按endian编码写入
# 输入/输出
- 输入:
msg.Data带点位列表[{"name","addr","type","value"}](优先于配置 points) - 输出:成功走
Success链,失败走Failure链(任一点位失败即失败)
# 示例
配置默认写入点位:
{
"id": "modbus_write",
"type": "x/modbusWrite",
"configuration": {
"server": "tcp://192.168.1.100:502",
"unitId": 1,
"points": [
{"name": "setpoint", "addr": "40010", "type": "FLOAT32", "value": "${msg.targetTemp}"},
{"name": "motor", "addr": "00001", "type": "BOOL", "value": "true"}
]
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
按需写(msg.Data 带点位列表,优先于配置):
[{"name": "setpoint", "addr": "40010", "type": "FLOAT32", "value": "50.5"}]
1
# 关联组件
- 读取:x/modbusRead
- 统一写入入口:x/iotWrite(driver=modbus)
- 命令式(旧):x/modbus(保留)
在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/07/31, 09:31:44