GE SRTP Treiber
Überblick
GE SRTP (Service Request Transport Protocol) — Ethernet-Kommunikationsprotokoll der GE Fanuc Series 90 / RX3i / RX7i / VersaMax PLC.
PlantPulse Edge startet einen externen Native Client (GEClient) als Kindprozess und implementiert das Muster NativeProcessDriver, bei dem die Zeilen der Standardausgabe geparst und die Werte akkumuliert werden.
| Position | Wert |
|---|---|
opc_type | GE |
| Implementierungsklasse | plantpulse.driver.protocol.ge.GEDriver |
| Kommunikationsbibliothek | Externes natives Binary (./GEClient, basierend auf uGESRTP) |
| Vererbung | NativeProcessDriver |
| read | ✅ (Cache-Polling) |
| write | ✅ (%R WORD/DWORD/FLOAT · %M BIT · %Q BIT) |
| Sicherheit | Keine |
| Standardport | 18245 (SRTP TCP) — Angabe über opc_agent_port |
Klassenstruktur / Funktionsweise
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 → bei Fehlschlag sofortiger Abbruch. Wenn die Optionuse-multi=true+channel-threadgrößer als 1 ist, wird die Adressliste partitioniert und es werden mehrere Kindprozesse parallel gestartet.- Ausführungsverzeichnis des Kindprozesses:
/opt/kopens/plantpulse-edge/plc/ge. Ausführbare Datei:./GEClient. read()— Rückgabe des letzten Werts übercurrent_value_map.get(addr + ":" + format)(der Kindprozess aktualisiert bei jedem Timecycle).close()—process.destroyForcibly()aller ProcessTasks.
OPC-Registrierungsoptionen
| Feld | Bedeutung | Standardwert |
|---|---|---|
opc_agent_ip / opc_agent_port | PLC-IP / SRTP-Port (üblicherweise 18245) | — |
timecycle | Polling-Intervall (ms) — wird als Argument an den Kindprozess übergeben | — |
options.use-multi | Multiprozess-Modus | true |
options.channel-thread | Anzahl der Partitionen (1 = Einzelprozess) | 1 |
Interne Konstante: GE_DEFAULT_CONNECTION_DELAY_MS = 1500 — Wartezeit nach dem ersten Connect. Wenn 10 Sekunden lang kein Tag gelesen wird, erfolgt eine START-ADDRESS-SCAN-SLOW-Warnung.
Tag-Format plc_address
Format zur Übergabe an den Kindprozess (commaIOAddress): <dev>:<idx>:<data_type>:<format> per Komma verbunden.
| Notation | Bedeutung (GE Fanuc Standard) |
|---|---|
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 | Analogeingang |
AQ00001 | Analogausgang |
format-Zuordnung (afterFormat):
format | Verhalten |
|---|---|
BIN[N] | Nach Wort-Read Extraktion von N Bit (N = 0..F, hex möglich) |
STR | Wort → 16-bit binary → Umwandlung in ASCII-Text |
| (sonstige) | Zeichenkette unverändert, wie vom Kindprozess gesendet |
Nicht unterstützte Bereiche
- Write — ist implementiert.
%Runterstützt WORD/DWORD/FLOAT,%Mund%Qarbeiten bitweise. - Reine Java-SRTP-Implementierung — derzeit besteht eine Abhängigkeit vom externen Binary. Die Umstellung auf In-Process mittels uGESRTP / iot-communication-Bibliothek ist eine Folgeaufgabe in derselben Richtung wie beim LS Treiber (ältere Version .NET → Java).
- Symbolic Tag — nur Koordinaten (Bereich + Index) werden unterstützt, Named Tags nicht.
- Programming-/Service-Request-Modus — nur einfache Read-Abfragen.
Testabdeckung
test/java/plantpulse/driver/protocol/ge/GEDriverTest — Adressumwandlung (commaIOAddress), Prüfung der BIN/STR-Verzweigung von afterFormat. Da die Wire-Level-Kommunikation an das externe Binary delegiert wird, erfolgen Unit-Tests mit einem Mock-Kindprozess separat.
Referenzen
- GE Fanuc SRTP — öffentliches Reverse Engineering: uGESRTP, Wireshark Dissector.
- Code:
plantpulse-edge-driver/src/plantpulse/driver/protocol/ge/GEDriver.java. - Betrieb: Fehlt das Kind-Binary, erfolgt in der Connect-Phase eine
PROCESS-SLOW-Warnung +ERROR:-Log — zuerst prüfen, ob/opt/kopens/plantpulse-edge/plc/ge/GEClientausführbar ist (+x).