Zum Hauptinhalt springen

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.

PunktWert
opc_typeAB-ETH
Implementierungsklasseplantpulse.driver.protocol.ab_eth.ABEthDriver
Bibliothekeigene native Implementierung (abeth aus plantpulse-plc-protocol — CSP/PCCC direkt über Socket)
VererbungBaseProtocolDriver (nicht PLC4j)
Standardport2222 (CSP — nicht EtherNet/IP 44818)
Statusstabil (Unterstützung für Altgeräte)
readOK (Protected Typed Logical Read)
write❌ (nur lesend — Protected Typed Logical Write nicht implementiert)
Sicherheitkeine
Standardport 2222 (nicht 44818)

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).

Unterschied zu ControlLogix

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

FeldBedeutungStandard
opc_agent_ipPLC-IP192.168.0.80
opc_agent_portTCP-Port2222 (CSP)
options.stationDF1-Zielstationsnummer1
options.read-timeoutAntwort-Timeout (ms)3000

Format von Tag-plc_address

N<file>:<element>[/<bit>]:<TYPE>[[size]]

Das Dateizeichen ist immer N (Integer). TYPE ist Pflicht:

SchreibweiseBedeutung
N7:0:WORDInteger-Datei 7, Element 0 — 16 Bit
N7:0:INTEGERidentisch (Alias für WORD, signed 16 Bit)
N7:3:DWORDElement 3 — 32 Bit
N7:5:FLOATElement 5 — 32-Bit-Float
N7:10/0:SINGLEBITBit 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.

Legacy-Dateitypsuffixe (.PRE / .ACC usw.) nicht unterstützt

Die 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ütztisWriteSupported() = false und write() liefern immer false. (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 + Paket abeth in plantpulse-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.