S7 写
x/s7Write 组件:v0.37.0+ 用于把点位值列表批量写入西门子 S7 系列 PLC(S7-200SMART/300/400/1200/1500),成功经 Success 链转出。
需要额外引入扩展库:rulego-components-iot (opens new window)
# 配置
| 字段 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| server | string | PLC 地址,格式 host:port,ISO-on-TCP 默认端口 102 | 127.0.0.1:102 |
| rack | int | 机架号 | 0 |
| slot | int | CPU 槽位:S7-1200/1500/200SMART=1,S7-300/400=2 | 1 |
| timeout | int | 请求超时时间,单位为秒 | 5 |
| points | []object | 默认点位表;msg.Data 携带合法点位时优先使用 msg.Data | [] |
# 点位(points)字段
| 字段 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| name | string | 点位名称 | 无 |
| addr | string | 西门子地址(语法见下);支持 ${msg.xx} | 无 |
| type | string | 数据类型,可选值见下表 | 无 |
| value | string | 待写入值(字符串形式);支持 ${msg.xx} | 无 |
| scale | float | 可选,缩放因子;工程值 = 原始值 × scale + offset | - |
| offset | float | 可选,偏移量 | - |
| endian | string | 可选,字节序 | - |
# 点位(Point)字段说明
addr 字段: 使用西门子地址语法,支持 ${msg.xx} 模板变量。
- DB 区:
DB<n>.<DBX|DBB|DBW|DBD><偏移>[.位],如DB1.DBD0、DB1.DBW2、DB1.DBX0.1 - M/I/Q 区:字/双字地址如
MW0、MD0、IW0、QW0;位地址如M0.1
数据类型(type)可选值:
| 类型 | 字节数 | 值格式说明 |
|---|---|---|
BOOL | 1 | 布尔量,value 支持 true/false/0/1,地址用位语法(如 DB1.DBX0.1、M0.1);底层按读-改-写实现 |
BYTE | 1 | 无符号字节 |
INT | 2 | 有符号 16 位整数 |
WORD | 2 | 无符号 16 位整数 |
DINT | 4 | 有符号 32 位整数 |
DWORD | 4 | 无符号 32 位整数 |
REAL | 4 | 32 位浮点数 |
LREAL | 8 | 64 位浮点数 |
STRING | 256 | S7 字符串,内容超过 254 字节将截断 |
# 输入
写入点位从 msg.Data 读取(JSON 数组);若 msg.Data 为空则回退到配置的 points。每个点位对象字段如下:
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 点位名称(可选) |
| addr | string | 西门子地址,如 DB1.DBD8、M10.5 |
| type | string | 数据类型 |
| value | string | 待写入值,支持 ${msg.xx} |
| scale | float | 缩放因子(可选) |
| offset | float | 偏移量(可选) |
示例 msg.Data:
[{"addr":"DB1.DBD8","type":"REAL","value":"23.5"}]
1
# 特性
- 定时写入:搭配
endpoint/schedule定时端点前置触发;按需写入可由上游节点在msg.Data注入点位列表。 - 模板变量:
addr、value等点位字段均支持${msg.xx}/${metadata.xx}模板变量。 - 动态点位优先:
msg.Data携带合法点位 JSON 列表时优先使用,否则回退到配置的points。 - 同链连接池:链内可通过
ref://节点ID借用复用其他 S7 节点已建立的 TCP 连接,避免重复建连。 - 失败重连重试:写入失败自动重连并重试,最多 3 次(
maxRetries=3);任一点位失败即整体失败并走Failure链。
# Relation Type
- Success: 执行成功,把消息发送到
Success链。 - Failure: 执行失败,把消息发送到
Failure链。
# 示例
{
"ruleChain": {
"id": "s7_write_demo",
"name": "S7 写节点示例",
"root": true,
"debugMode": false
},
"metadata": {
"firstNodeIndex": 0,
"nodes": [
{
"type": "x/s7Write",
"name": "写入 PLC 数据",
"debugMode": false,
"configuration": {
"server": "192.168.1.100:102",
"rack": 0,
"slot": 1,
"timeout": 5,
"points": [
{"name":"设定温度","addr":"DB1.DBD0","type":"REAL","value":"${msg.setTemp}"},
{"name":"启动","addr":"M10.5","type":"BOOL","value":"true"}
]
}
}
],
"connections": []
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/07/29, 07:07:39