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 | ✅ (%R WORD/DWORD/FLOAT · %M BIT · %Q BIT) |
| 安全 | 无 |
| 默认端口 | 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 —— 已实现。
%R为 WORD/DWORD/FLOAT,%M与%Q为位单位。 - 纯 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)。