AB-EtherNet (PLC-5 / SLC-500) Treiber
Überblick
AB-EtherNet — CSP (Client/Server Protocol) über EtherNet plus PCCC-Befehle, wie sie von den Legacy-PLCs PLC-5 / SLC-500 von Allen-Bradley verwendet werden. Anders als EtherNet/IP (CIP) der ControlLogix nutzt es datei- und elementbasierte logische Adressierung (N7:0). Native Neuimplementierung 2026-07 — die alte Delegation an Apache PLC4j ab-eth wurde entfernt (jener Treiber sendete nach dem CSP-Verbindungsaufbau keine Anfrage, sondern trennte den Socket, sodass keine Erfassung möglich war). Jetzt kommt die eigene CSP/PCCC-Implementierung von plantpulse-plc-protocol (AbEthPLC) zum Einsatz — dasselbe native Muster wie bei FINS / MELSEC.
| Punkt | Wert |
|---|---|
opc_type | AB-ETH |
| Implementierungsklasse | plantpulse.driver.protocol.ab_eth.ABEthDriver |
| Bibliothek | eigene native Implementierung (abeth aus plantpulse-plc-protocol — CSP/PCCC direkt über Socket) |
| Vererbung | BaseProtocolDriver (nicht PLC4j) |
| Standardport | 2222 (CSP — nicht EtherNet/IP 44818) |
| Status | stabil (Unterstützung für Altgeräte) |
| read | OK (Protected Typed Logical Read) |
| write | ❌ (nur lesend — Protected Typed Logical Write nicht implementiert) |
| Sicherheit | keine |
AB-ETH verwendet CSP over TCP/2222, nicht den Port 44818 von EtherNet/IP (CIP) — die Angabe 44818 in älteren Dokumenten/Formularen war fehlerhaft. ControlLogix (L8x / L7x) verwendet den EtherNet/IP-Treiber (opc_type=EIP, 44818).
Der AB-ETH-Treiber ist ausschließlich für PLC-5 / SLC-500 gedacht — er verwendet keine symbolischen Tags (MyTag), sondern Legacy-Logikadressen wie N7:0.
Klassenstruktur
BaseProtocolDriver
└── ABEthDriver — connect() 에서 AbEthPLC(host, port, station) 생성 후 CSP register handshake
connect() öffnet einen AbEthPLC-Socket und führt das CSP-Register durch. Schlägt ein read fehl, wird der Socket invalidiert (connected=false), damit die Edge einen Neuaufbau der Verbindung anstößt.
Zusammenfassung des Wire-Formats (eigene Implementierung)
- PCCC-Befehle über CSP-Encapsulation (Register Session).
- PCCC: PLC-5 / SLC-500 Protected Typed Logical Read (Word Range).
- Logische Adresse:
N<file>:<element>[/<bit>].
OPC-Registrierungsoptionen
| Feld | Bedeutung | Standard |
|---|---|---|
opc_agent_ip | PLC-IP | 192.168.0.80 |
opc_agent_port | TCP-Port | 2222 (CSP) |
options.station | DF1-Zielstationsnummer | 1 |
options.read-timeout | Antwort-Timeout (ms) | 3000 |
Format von Tag-plc_address
N<file>:<element>[/<bit>]:<TYPE>[[size]]
Das Dateizeichen ist immer N (Integer). TYPE ist Pflicht:
| Schreibweise | Bedeutung |
|---|---|
N7:0:WORD | Integer-Datei 7, Element 0 — 16 Bit |
N7:0:INTEGER | identisch (Alias für WORD, signed 16 Bit) |
N7:3:DWORD | Element 3 — 32 Bit |
N7:5:FLOAT | Element 5 — 32-Bit-Float |
N7:10/0:SINGLEBIT | Bit 0 von Element 10 (Boolean) |
Unterstützte TYPE: WORD (16 Bit) / INTEGER (= WORD) / DWORD (32 Bit) / FLOAT (32 Bit) / SINGLEBIT (Einzelbit). Wird TYPE weggelassen oder ein anderer Wert verwendet, liefert read eine leere Zeichenkette.
.PRE / .ACC usw.) nicht unterstütztDie Unterfelder .PRE / .ACC von Timern/Zählern sowie die Präfixschreibweise F8: (Float-Datei) akzeptiert der native Parser nicht. Float-Werte werden über N<file>:<elem>:FLOAT gelesen.
Unterstützt / nicht unterstützt
- read: Protected Typed Logical Read (Word Range) — OK.
- write: nicht unterstützt —
isWriteSupported() = falseundwrite()liefern immerfalse. (Protected Typed Logical Write folgt später.) - Symbolische ControlLogix-Tags (
MyController:Tag1): nicht Ziel dieses Treibers — EIP-Treiber verwenden. - DH+ / DH-485 Gateway-Routing: nicht unterstützt — eine direkte EtherNet-Schnittstelle ist erforderlich.
Beispiel für die Registrierung per curl
curl -X POST http://<edge-host>/api/v1/opc \
-H "Content-Type: application/json" \
-d '{
"opc_id": "OPC_ABETH_L1",
"opc_type": "AB-ETH",
"opc_name": "SLC-500 Line 1",
"opc_agent_ip": "192.168.0.80",
"opc_agent_port": "2222",
"site_id": "SITE_00001",
"auto_collect": true,
"timecycle": 1000,
"options": { "station": "1", "read-timeout": "3000" },
"tag_list": [
{"tag_id":"OPC_ABETH_L1_T01","tag_name":"Count","plc_address":"N7:0:WORD","data_type":"Integer"},
{"tag_id":"OPC_ABETH_L1_T02","tag_name":"Temp","plc_address":"N7:5:FLOAT","data_type":"Float"},
{"tag_id":"OPC_ABETH_L1_T03","tag_name":"Run","plc_address":"N7:10/0:SINGLEBIT","data_type":"Boolean"}
]
}'
Referenzen
- Allen-Bradley DF1 / PCCC Programming Reference (1770-6.5.16).
- Code:
plantpulse-edge-driver/src/plantpulse/driver/protocol/ab_eth/ABEthDriver.java+ Paketabethinplantpulse-plc-protocol. - Betrieb: PLC-5 / SLC-500 sind abgekündigt (2017), die Ersatzteilverfügbarkeit sinkt — für Neuplanungen wird ControlLogix + EtherNet/IP empfohlen. Dieser Treiber dient der Datenerfassung an bereits installierten PLCs.