S7 读
x/s7Read 组件:v0.37.0+ 用于批量读取西门子 S7 系列 PLC(S7-200SMART/300/400/1200/1500)的点位数据,结果写回 msg.Data,经 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 | 数据类型,可选值见下表 | 无 |
| 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)可选值:
| 类型 | 字节数 | Go 输出类型 | 说明 |
|---|---|---|---|
BOOL | 1 | bool | 布尔量,地址用位语法(如 DB1.DBX0.1、M0.1) |
BYTE | 1 | byte | 字节 |
INT | 2 | int16 | 有符号 16 位整数(大端) |
WORD | 2 | uint16 | 无符号 16 位整数(大端) |
DINT | 4 | int32 | 有符号 32 位整数(大端) |
DWORD | 4 | uint32 | 无符号 32 位整数(大端) |
REAL | 4 | float32 | 32 位浮点数(大端) |
LREAL | 8 | float64 | 64 位浮点数(大端) |
STRING | 256 | string | S7 字符串(首字节为最大长度,次字节为实际长度) |
# 输出
读取结果重新赋值到 msg.Data,通过 Success 链传给下一个节点,格式为数组:
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 点位名称 |
| value | any | 读取值,类型由点位 type 决定 |
| timestamp | string | 读取时间(RFC3339) |
| error | string | 错误信息,成功时为空(单个点位失败不影响其他点位) |
示例数据:
[
{"name":"温度","value":25.6,"timestamp":"2026-07-23T10:00:00Z","error":""},
{"name":"运行","value":true,"timestamp":"2026-07-23T10:00:00Z","error":""}
]
1
2
3
4
2
3
4
# 特性
- 定时采集:搭配
endpoint/schedule定时端点前置触发,点位在下方points配置;按需读取可由上游节点在msg.Data注入点位。 - 模板变量:
addr等点位字段均支持${msg.xx}/${metadata.xx}模板变量。 - 动态点位优先:
msg.Data携带合法点位 JSON 列表时优先使用,否则回退到配置的points。 - 同链连接池:链内可通过
ref://节点ID借用复用其他 S7 节点已建立的 TCP 连接,避免重复建连。 - 失败重连重试:连接级失败(全部点位失败)自动重连并重试,最多 3 次(
maxRetries=3);单个点位失败仅标记错误信息(error字段),不中断整体流程。
# Relation Type
- Success: 执行成功,把消息发送到
Success链。 - Failure: 执行失败,把消息发送到
Failure链。
# 示例
{
"ruleChain": {
"id": "s7_read_demo",
"name": "S7 读节点示例",
"root": true,
"debugMode": false
},
"metadata": {
"firstNodeIndex": 0,
"nodes": [
{
"type": "x/s7Read",
"name": "读取 PLC 数据",
"debugMode": false,
"configuration": {
"server": "192.168.1.100:102",
"rack": 0,
"slot": 1,
"timeout": 5,
"points": [
{"name": "温度", "addr": "DB1.DBD0", "type": "REAL"},
{"name": "计数", "addr": "DB1.DBD4", "type": "DINT"},
{"name": "运行", "addr": "M10.5", "type": "BOOL"}
]
}
}
],
"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
30
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
30
在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/07/29, 07:07:39