Zum Hauptinhalt springen

EtherNet/IP (Logix) Treiber

Überblick

EtherNet/IP auf Basis von CIP (Common Industrial Protocol). Kommuniziert vorwiegend mit Allen-Bradley / Rockwell ControlLogix / CompactLogix PLCs.

PositionWert
opc_typeEIP
Implementierungsklasseplantpulse.driver.protocol.eip.EIP_34_Driver
Bibliothekdigitalpetri/ethernet-ip (CipClient + GetAttributeListService)
read✅ (attribute list raw bytes → String)
write❌ (separater Service-Aufruf erforderlich)
Sicherheitkeine
Unterschied zu PLC4j

Anders als die übrigen PLC-Treiber verwendet dieser Treiber nicht PLC4j, sondern direkt digitalpetri/ethernet-ip (er erbt von BaseProtocolDriver, nicht von PLC4jProtocolDriver). Das plc4j-driver-eip von PLC4j liegt zwar ebenfalls in lib, wird von dieser Klasse aber nicht genutzt.


OPC-Registrierungsformular

FeldBedeutungBeispiel
opc_agent_ipPLC-IP192.168.0.90
opc_agent_portEIP-Port44818
timecycleAbfrageintervall (ms)1000
options.backplaneBackplane-Nummer1 (default)
options.local-slotCPU-Slot-Nummer0 (default)

Das interne Timeout ist fest auf 2 Sekunden eingestellt (Duration.ofSeconds(2)).


Format von Tag plc_address

Der raw read von EIP arbeitet mit den Koordinaten CIP class / instance / attribute. Im Edge wird im Feld plc_address das Format <class>,<instance>,<attribute> (dezimal oder hexadezimal) eingetragen.

NotationBedeutung
0x6B,1,1Symbol class 0x6B, instance 1, attribute 1
0x6C,1,1Template class
0x01,1,7Product Name des Identity Object
Symbolische Tags (Tag1.Member)

Der in Logix übliche Lesezugriff auf symbolische Tags (MyController:Tag1) erfordert einen separaten Service (Read Tag Service); dieser Treiber nutzt ausschließlich raw GetAttributeListService. Wird symbolisches Lesen benötigt, ist ein Wechsel auf den PLC4j-EIP-Treiber oder eine spätere Implementierung erforderlich.


Zuordnung data_type / format

data_typeformatAnmerkung
String(empty)Raw Bytes der Antwort werden unverändert als String akkumuliert
Integer / Float / …(empty)Casting in der Nachverarbeitung. Der aktuelle Treiber liefert raw bytes → String

Das Casting nach data_type erfolgt in der Nachverarbeitung (PLCValueFomula / Sparkplug DataTypeMapper).


Häufige Fehler + Behebung

Meldung / SymptomUrsacheBehebung
Connection timeoutPort 44818 blockiert, EIP nicht aktivEtherNet/IP-Modul in RSLogix / Studio5000 aktivieren
Forward Open failurerack/slot mismatchoptions.backplane / options.local-slot korrigieren
Class/Instance not foundfalsche class-/instance-IDAntwort im Tag Browser von Studio5000 oder mit wireshark prüfen
Werte erscheinen verstümmeltBytes werden direkt in String gewandeltIn der Nachverarbeitung eine Formel zur Interpretation als 4-Byte Little Endian anwenden

curl-Registrierungsbeispiel

curl -X POST http://<edge-host>/api/v1/opc \
-H "Content-Type: application/json" \
-d '{
"opc_id": "OPC_EIP_LOGIX",
"opc_type": "EIP",
"opc_name": "Logix L83E",
"opc_agent_ip": "192.168.0.90",
"opc_agent_port": "44818",
"site_id": "SITE_00001",
"auto_collect": true,
"timecycle": 1000,
"options": {
"backplane": "1",
"local-slot": "0"
},
"tag_list": [
{
"tag_id": "OPC_EIP_LOGIX_TAG_00001",
"tag_name": "ProductName",
"plc_address": "0x01,1,7",
"data_type": "String"
}
]
}'

Beispielsammlung (nach Datentyp)

Der EIP raw read akkumuliert die raw bytes der Koordinate <class>,<instance>,<attribute> (dezimal oder hexadezimal mit Präfix 0x) als String. In der Nachverarbeitung wird nach data_type / fomula gecastet.

Format der CIP-Koordinaten

plc_addressBedeutung
0x01,1,1Identity → Vendor ID
0x01,1,2Identity → Device Type
0x01,1,7Identity → Product Name (String)
0x6B,1,1Symbol Class (Logix tag list) instance 1 attribute 1
0x6C,1,1Template Class
0x6C,2,1Template Class instance 2
0x73,1,1Connection Manager

Zuordnung nach Datentyp

data_typeformatBeispiel plc_addressAnmerkung
String(empty)0x01,1,7Product name (raw bytes unverändert als String)
Integer(empty)0x01,1,1Vendor ID. raw bytes → Interpretation als Little Endian per Formel
Integer(empty)0x01,1,2Device Type
Boolean(empty)0x01,1,8Status word (Bit-Extraktion in der Nachverarbeitung)
Float(empty)<class>,<inst>,<attr>4-Byte-Rohantwort → Nachverarbeitung
Grenzen des aktuellen Treibers

EIP_34_Driver ruft ausschließlich GetAttributeListService auf. Wird der Lesezugriff auf symbolische Tags (MyController:Tag1.Member) benötigt, ist eine separate Implementierung mit dem ControlLogix Read Tag Service erforderlich. Da PLC4j EIP in lib enthalten ist, ist eine spätere Umstellung möglich.

Einsatz von Formeln

Zweckdata_typefomulaAnmerkung
Korrektur von Integer-RohwertenInteger${VALUE}*1zur unveränderten Durchleitung
Zwei 16-Bit-Werte kombinierenInteger${TAG_HI}*65536+${VALUE}Zusammensetzen der Attribute hi/lo
EinheitenumrechnungFloat${VALUE}*0.1Skalierung des Integer-Rohwerts

Umfassendes curl-Beispiel

curl -X POST http://<edge-host>/api/v1/opc \
-H "Content-Type: application/json" \
-d '{
"opc_id": "OPC_EIP_FULL",
"opc_type": "EIP",
"opc_name": "Logix Full",
"opc_agent_ip": "192.168.0.90",
"opc_agent_port": "44818",
"site_id": "SITE_00001",
"auto_collect": true,
"timecycle": 1000,
"options": { "backplane": "1", "local-slot": "0" },
"tag_list": [
{"tag_id":"OPC_EIP_FULL_T01", "tag_name":"VendorId", "plc_address":"0x01,1,1", "data_type":"Integer"},
{"tag_id":"OPC_EIP_FULL_T02", "tag_name":"DeviceType", "plc_address":"0x01,1,2", "data_type":"Integer"},
{"tag_id":"OPC_EIP_FULL_T03", "tag_name":"ProductName","plc_address":"0x01,1,7", "data_type":"String"},
{"tag_id":"OPC_EIP_FULL_T04", "tag_name":"Status", "plc_address":"0x01,1,5", "data_type":"Integer"}
]
}'