跳到主要内容

GE SRTP 驱动

概述

GE SRTP (Service Request Transport Protocol) — GE Fanuc Series 90 / RX3i / RX7i / VersaMax PLC 的 以太网通信协议。PlantPulse Edge 采用 NativeProcessDriver 模式实现:将外部 native client (GEClient) 作为子进程启动, 解析其标准输出行并累积数值。

项目
opc_typeGE
实现类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_portPLC IP / SRTP 端口(通常为 18245)
timecycle轮询周期 (ms) — 作为参数传递给子进程
options.use-multi多进程模式true
options.channel-threadpartition 数量(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 标准)
R00001Register %R 1 (16-bit signed)
R00500Register %R 500
I00001Input bit %I 1
Q00001Output bit %Q 1
T00001Temporary memory %T
M00001Internal coil %M
AI00001Analog input
AQ00001Analog output

format 映射 (afterFormat):

format动作
BIN[N]read 字后提取第 N 位(N 可为 0..F hex)
STR字 → 16-bit binary → ASCII text 转换
(其他)原样使用子进程发送的字符串

未支持范围

  • Writewrite() 始终为 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 — 公开逆向工程资料:uGESRTPWireshark dissector
  • 代码:plantpulse-edge-driver/src/plantpulse/driver/protocol/ge/GEDriver.java
  • 运维:子进程二进制缺失时,在 connect 阶段输出 PROCESS-SLOW warn + ERROR: 日志 — 请优先确认 /opt/kopens/plantpulse-edge/plc/ge/GEClient 是否可执行 (+x)。