Skip to main content

GE SRTP Driver

Overview

GE SRTP (Service Request Transport Protocol) — the Ethernet communication protocol for GE Fanuc Series 90 / RX3i / RX7i / VersaMax PLCs. PlantPulse Edge implements it with the NativeProcessDriver pattern: an external native client (GEClient) is spawned as a child process, and its standard output lines are parsed to accumulate values.

ItemValue
opc_typeGE
Implementation classplantpulse.driver.protocol.ge.GEDriver
Communication libraryExternal native binary (./GEClient, based on uGESRTP)
InheritanceNativeProcessDriver
read✅ (cache polling)
write
SecurityNone
Default port18245 (SRTP TCP) — specified via opc_agent_port

Class Structure / Behavior

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() — ICMP ping to NetUtils.isReachable(ip) → terminates immediately on failure. If the use-multi=true option is set and channel-thread is greater than 1, the address list is partitioned and multiple child processes are started concurrently.
  • Child working directory: /opt/kopens/plantpulse-edge/plc/ge. Executable: ./GEClient.
  • read() — returns the last value from current_value_map.get(addr + ":" + format) (the child updates it every timecycle).
  • close()process.destroyForcibly() of all ProcessTasks.

OPC Registration Options

FieldMeaningDefault
opc_agent_ip / opc_agent_portPLC IP / SRTP port (normally 18245)
timecyclePolling period (ms) — passed to the child process as an argument
options.use-multiMulti-process modetrue
options.channel-threadNumber of partitions (1 = single process)1

Internal constant: GE_DEFAULT_CONNECTION_DELAY_MS = 1500 — wait after the first connect. If no tag is read for 10 seconds, START-ADDRESS-SCAN-SLOW logs a warning.


Tag plc_address Format

Format passed to the child process (commaIOAddress): <dev>:<idx>:<data_type>:<format> joined by commas.

NotationMeaning (GE Fanuc standard)
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 mapping (afterFormat):

formatBehavior
BIN[N]Read the word, then extract bit N (N = 0..F, hex allowed)
STRWord → 16-bit binary → ASCII text conversion
(otherwise)The string sent by the child, as-is

Unsupported Areas

  • Writewrite() is always false. Requires SRTP write to be exposed by the native client.
  • Pure Java SRTP implementation — currently depends on an external binary. Moving in-process with the uGESRTP / iot-communication libraries is a follow-up task in the same direction as the LS driver (legacy .NET → Java).
  • Symbolic Tag — only coordinates (area + index) are supported; named tags are not.
  • Programming/Service Request mode — simple read queries only.

Test Coverage

test/java/plantpulse/driver/protocol/ge/GEDriverTest — address conversion (commaIOAddress) and verification of the BIN/STR branches in afterFormat. The wire level is delegated to the external binary, so unit tests with a mock child process are handled separately.


References

  • GE Fanuc SRTP — public reverse engineering: uGESRTP, Wireshark dissector.
  • Code: plantpulse-edge-driver/src/plantpulse/driver/protocol/ge/GEDriver.java.
  • Operations: if the child binary is missing, the connect stage logs a PROCESS-SLOW warning plus a ERROR: log — first check whether /opt/kopens/plantpulse-edge/plc/ge/GEClient is executable (+x).