EtherNet/IP 写
x/eipWrite组件: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 写入需要明确的类型来编码值),可选值见下表 |
| value | string | 待写入的值(字符串形式),支持 ${msg.xx} 模板变量 |
| scale | float | 可选,缩放系数(默认 1),换算公式 eng = raw*scale + offset |
| offset | float | 可选,偏移量(默认 0) |
# 点位(Point)字段说明
addr: 控制器标签名。支持控制器域标签(如 Temperature)、结构体成员(如 MyDB.Temperature)、数组元素(如 MyArray[0])以及程序域标签(如 Program:MainProgram.Tag)。
type: 标签数据类型,必填。gologix 写入需要明确的类型指针来正确编码值,无法自动推断。
可选值(大小写不敏感):
| 类型分类 | 支持的别名 |
|---|---|
| 布尔 | BOOL(值支持 true/false/0/1) |
| 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 |
value: 写入值的字符串形式。整数支持十进制和 0x 十六进制前缀;布尔支持 true/false/0/1;浮点按 Go 标准解析。
# 输入
写入点位列表从 msg.Data 获取,格式如下;非空时优先于节点配置的 points:
[
{"addr": "MyDB.Setpoint", "type": "REAL", "value": "50.5"},
{"addr": "MyDB.Running", "type": "BOOL", "value": "true"},
{"addr": "MyDB.Count", "type": "DINT", "value": "${msg.counter}"}
]
1
2
3
4
5
2
3
4
5
value 支持 ${msg.xx} / ${metadata.xx} 模板变量,便于按上游消息动态写入。
# 特性
- 定时写入:搭配
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-write-demo",
"root": true,
"debugMode": false
},
"metadata": {
"endpoints": [],
"nodes": [
{
"type": "x/eipWrite",
"name": "write tags",
"debugMode": false,
"configuration": {
"server": "192.168.1.10",
"slot": 0,
"timeout": 5,
"points": [
{"name": "setpoint", "addr": "MyDB.Setpoint", "type": "REAL", "value": "50.5"},
{"name": "running", "addr": "MyDB.Running", "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
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