GE SRTP 驱动
概述
GE SRTP (Service Request Transport Protocol) — GE Fanuc Series 90 / RX3i / RX7i / VersaMax PLC 的
以太网通信协议。PlantPulse Edge 采用 NativeProcessDriver 模式实现:将外部 native client (GEClient) 作为子进程启动,
解析其标准输出行并累积数值。
| 项目 | 值 |
|---|---|
opc_type | GE |
| 实现类 | plantpulse.driver.protocol.ge.GEDriver |
| 通信库 | 外部原生二进制 (./GEClient,基于 uGESRTP) |
| 继承 | NativeProcessDriver |
| read | ✅ (缓存轮询) |
| write | ❌ |
| 安全 | 无 |
| 默认端口 | 18245 (SRTP TCP) — 通过 opc_agent_port 指定 |
类结构 / 运行方式
GEDriver
└── ProcessTask (Thread) — ProcessBuilder 로 ./GEClient ip port addresses timecycle
└── Binder (Thread) — 자식의 stdout 한 라인씩 파싱
↳ "VAL:<dev>:<idx>:<type>:<format>:<value>" → current_value_map
↳ "START:" / "READ_FAIL:" / "ERROR:" / "LOG:" → 로그
connect()—NetUtils.isReachable(ip)ICMP ping → 失败立即终止。若选项use-multi=true+channel-thread大于 1,则对地址 list 进行 partition,同时启动多个子进程。- 子进程执行目录:
/opt/kopens/plantpulse-edge/plc/ge。可执行文件:./GEClient。 read()— 以current_value_map.get(addr + ":" + format)返回最后一次的值(子进程在每个 timecycle 更新)。close()— 所有 ProcessTask 的process.destroyForcibly()。
OPC 注册选项
| 字段 | 含义 | 默认值 |
|---|---|---|
opc_agent_ip / opc_agent_port | PLC IP / SRTP 端口(通常为 18245) | — |
timecycle | 轮询周期 (ms) — 作为参数传递给子进程 | — |
options.use-multi | 多进程模式 | true |
options.channel-thread | partition 数量(1=单进程) | 1 |
内部常量:GE_DEFAULT_CONNECTION_DELAY_MS = 1500 — 首次 connect 后的等待时间。若 10 秒内所有标签均未被 read,则输出 START-ADDRESS-SCAN-SLOW warn。
标签 plc_address 格式
传递给子进程的格式 (commaIOAddress):<dev>:<idx>:<data_type>:<format> 以逗号 join。
| 表示 | 含义 (GE Fanuc 标准) |
|---|---|
R00001 | Register %R 1 (16-bit signed) |
R00500 | Register %R 500 |
I00001 | Input bit %I 1 |
Q00001 | Output bit %Q 1 |
T00001 | Temporary memory %T |
M00001 | Internal coil %M |
AI00001 | Analog input |
AQ00001 | Analog output |
format 映射 (afterFormat):
format | 动作 |
|---|---|
BIN[N] | read 字后提取第 N 位(N 可为 0..F hex) |
STR | 字 → 16-bit binary → ASCII text 转换 |
| (其他) | 原样使用子进程发送的字符串 |
未支持范围
- Write —
write()始终为 false。需 native client 暴露 SRTP write 才可实现。 - 纯 Java SRTP 实现 — 目前依赖外部二进制。借助 uGESRTP / iot-communication 库转为 in-process,是与 LS 驱动(旧版 .NET → Java)同方向的后续课题。
- Symbolic Tag — 仅支持坐标(区域+index),不支持 named tag。
- Programming/Service Request 模式 — 仅支持简单 read 查询。
测试覆盖
test/java/plantpulse/driver/protocol/ge/GEDriverTest — 验证地址转换 (commaIOAddress) 与 afterFormat 的 BIN/STR 分支。wire-level 委托给外部二进制,因此 mock 子进程的单元测试另行处理。
参考
- GE Fanuc SRTP — 公开逆向工程资料:uGESRTP、Wireshark dissector。
- 代码:
plantpulse-edge-driver/src/plantpulse/driver/protocol/ge/GEDriver.java。 - 运维:子进程二进制缺失时,在 connect 阶段输出
PROCESS-SLOWwarn +ERROR:日志 — 请优先确认/opt/kopens/plantpulse-edge/plc/ge/GEClient是否可执行 (+x)。