EtherNet/IP 读
x/eipRead组件:v0.37.0+ 用于通过 EtherNet/IP (CIP) 协议批量读取罗克韦尔 Allen-Bradley ControlLogix/CompactLogix/Micro820 PLC 的控制器标签。仅支持 CIP 设备,不支持 PLC5/SLC/MicroLogix 等 PCCC 协议设备。
需要额外引入扩展库: rulego-components-iot (opens new window)
# 配置
| 字段 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| server | string | PLC 主机地址(host),端口 44818 由 gologix 内置,例如 127.0.0.1;支持 ref://节点ID 复用链内已有连接 | 127.0.0.1 |
| slot | int | CPU 在背板上的槽位号,自动生成 CIP 路径(如 1,0) | 0 |
| path | string | 可选:手动覆盖 CIP 路径,如 1,0;留空则按 slot 自动生成 | 无 |
| timeout | int | 请求超时时间,单位为秒 | 5 |
| points | array | 默认点位表;msg.Data 带点位时优先使用 msg.Data | 无 |
Points 字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 点位名称 |
| addr | string | 控制器标签名(CIP tag),如 MyTag、MyDB.Temperature |
| type | string | 标签数据类型,必填(gologix 读取需要明确的类型指针),可选值见下表 |
| scale | float | 可选,缩放系数(默认 1),换算公式 eng = raw*scale + offset |
| offset | float | 可选,偏移量(默认 0) |
# 点位(Point)字段说明
addr: 控制器标签名。支持控制器域标签(如 Temperature)、结构体成员(如 MyDB.Temperature)、数组元素(如 MyArray[0])以及程序域标签(如 Program:MainProgram.Tag)。
type: 标签数据类型,必填。因 gologix 的 Read 需要具体的 Go 类型指针(Go 静态类型限制),无法从标签自动推断,必须由调用方显式指定。
可选值(大小写不敏感):
| 类型分类 | 支持的别名 |
|---|---|
| 布尔 | BOOL |
| 8 位整数 | BYTE、SINT、USINT |
| 16 位整数 | INT、INT16、UINT、WORD、UINT16 |
| 32 位整数 | DINT、INT32、UDINT、DWORD、UINT32 |
| 64 位整数 | LINT、INT64、ULINT、UINT64 |
| 32 位浮点 | REAL、FLOAT |
| 64 位浮点 | LREAL、DOUBLE |
| 字符串 | STRING |
# 输出
读取结果以统一契约写回 msg.Data(JSON 数组),经 Success 链转出。每个点位一个对象,字段如下:
| 字段 | 类型 | 说明 |
|---|---|---|
| name | string | 点位名称 |
| address | string | 标签名(等于配置/输入的 addr) |
| value | any | 读取到的值 |
| type | string | 数据类型(大写) |
| quality | string | 质量:good 或 bad |
| timestamp | string | 采集时间(RFC3339 格式) |
示例数据:
[
{
"name": "temperature",
"address": "MyDB.Temperature",
"value": 23.5,
"type": "REAL",
"quality": "good",
"timestamp": "2026-07-23T10:00:00.123456789Z"
}
]
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
单个点位读取失败不影响其它点位(该点位标记 quality=bad);仅当全部点位失败时才认定为连接级错误,触发 Failure 链。
# 输入(可选)
msg.Data 可携带点位列表 JSON,格式同 points 配置;非空时优先于节点配置的 points 使用,适用于动态采集场景:
[
{"name": "temp", "addr": "MyDB.Temperature", "type": "REAL"}
]
1
2
3
2
3
# 特性
- 定时采集:搭配
endpoint/schedule端点前置触发,点位在points配置中维护。 - 模板变量:点位字段(
name/addr/type/value)支持${msg.xx}/${metadata.xx}占位符。 - 动态点位:
msg.Data带点位时优先于配置points。 - 同链连接池:链内其它节点可通过
ref://节点ID借用本节点已建立的 EtherNet/IP 连接,避免重复建连。 - 自动重连重试:连接级失败(全部标签失败)自动重连并重试,最多
3次。
# Relation Type
- Success: 执行成功,把消息发送到
Success链。 - Failure: 执行失败,把消息发送到
Failure链。
# 示例
{
"ruleChain": {
"name": "eip-read-demo",
"root": true,
"debugMode": false
},
"metadata": {
"endpoints": [],
"nodes": [
{
"type": "x/eipRead",
"name": "read tags",
"debugMode": false,
"configuration": {
"server": "192.168.1.10",
"slot": 0,
"timeout": 5,
"points": [
{"name": "temperature", "addr": "MyDB.Temperature", "type": "REAL"},
{"name": "running", "addr": "MyDB.Running", "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
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
在 GitHub 上编辑此页 (opens new window)
上次更新: 2026/07/29, 07:07:39