GE SRTP Treiber
Übersicht
GE SRTP (Service Request Transport Protocol) — Ethernet-Kommunikationsprotokoll der GE Fanuc Series 90 / RX3i / RX7i / VersaMax PLC.
PlantPulse Edge startet einen externen nativen Client (GEClient) als Kindprozess und implementiert das NativeProcessDriver-Muster, 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 | ❌ |
| 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. Sind die Optionenuse-multi=true+channel-threadgrößer als 1, wird die Adressliste partitioniert und mehrere Kindprozesse werden gleichzeitig gestartet.- Ausführungsverzeichnis des Kindprozesses:
/opt/kopens/plantpulse-edge/plc/ge. Ausführbare Datei:./GEClient. read()— gibt übercurrent_value_map.get(addr + ":" + format)den letzten Wert zurück (der Kindprozess aktualisiert ihn in jedem Timecycle).close()—process.destroyForcibly()aller ProcessTasks.
OPC-Registrierungsoptionen
| Feld | Bedeutung | Standard |
|---|---|---|
opc_agent_ip / opc_agent_port | PLC-IP / SRTP-Port (üblicherweise 18245) | — |
timecycle | Polling-Intervall (ms) — wird dem Kindprozess als Argument ü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. Wird 10 Sekunden lang kein einziger Tag gelesen, erfolgt eine START-ADDRESS-SCAN-SLOW-Warnung.
Format von Tag 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] | Wort lesen, dann N-tes Bit extrahieren (N = 0..F, hex möglich) |
STR | Wort → 16-bit binär → ASCII-Text-Konvertierung |
| (sonstige) | Zeichenkette unverändert wie vom Kindprozess gesendet |
Nicht unterstützte Bereiche
- Write —
write()ist immer false. Möglich erst, wenn SRTP write im nativen Client verfügbar ist. - 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 (alte Version .NET → Java).
- Symbolic Tag — nur Koordinaten (Bereich + Index) werden unterstützt, keine named Tags.
- Programming-/Service-Request-Modus — ausschließlich einfache Read-Abfragen.
Testabdeckung
test/java/plantpulse/driver/protocol/ge/GEDriverTest — Adressumsetzung (commaIOAddress), Prüfung der BIN/STR-Verzweigung von afterFormat. Da die Wire-Level-Verarbeitung an das externe Binary delegiert wird, sind Unit-Tests mit einem Mock-Kindprozess separat zu betrachten.
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, erscheint in der Connect-Phase eine
PROCESS-SLOW-Warnung +ERROR:-Log — zuerst prüfen, ob/opt/kopens/plantpulse-edge/plc/ge/GEClientausführbar ist (+x).