EtherNet/IP einprogrammieren?

Gast #6616421
Lesenswert?

Hallo Leute,

Ich versuche grade ein Program zu schreiben welches mit einem
EtherNet/IP CIP (Common Industrial Protocol) Gerät kommuniziert.
Dafür brauche Ich natürlich eine Spezifikation welche Bytes jetzt
eigentlich wo hin kommen.

Ich bin schon über ODVA.org gestolpert aber ich finde da nirgentwo
ein PDF wo mal genau erklärt wird wie welche Anfrage sich in die Bytes
auf dem Draht übersetzt? Alle PDFs zu dem Thema reden nur davon wie
toll das Protokoll ist und was für Objekte sie einbauen aber keiner
schreibt, was da eigentlich rübergeschickt wird?
#6616760
Lesenswert?

Hallo Scanner,

Bei EtherNet/IP gibt es zwei Kommunikationstypen (stark verkürzter 
Überblick):

- Explicit Messaging
kommt deiner Vorstellung wohl am nächsten, es wird aber nicht ein 
absolut adressiertes Byte/Wort (wie z.B. ein Modbus Register) 
angesprochen sondern die Datenelemente sind Attribute eines Objekts.
Anfrage also: Object -> Instance -> Attribute
Die Objekte die ein Gerät unterstützt sind in der CIP Specification für 
viele Gerätearten (z.B. Frequenzumrichter) in einem jeweiligen Profil 
definiert.

- I/O Messaging
Scanner und Adapter vereinbaren vorab die Kommunikationsinhalte und den 
Übertragungstakt (Forward Open). In der laufenden Kommunikation werden 
nur noch die Daten ausgetauscht. Wenn du mit Wireshark eine solche 
Kommunikation aufzeichnest, siehst du nur einem Bytestring.

Während man einen Modbus TCP Client zwischen Frühstück und Mittagspause 
programmieren kann, wirst du dich mit EtherNet/IP sehr intensiv 
beschäftigen müssen. Leider sind die Spezifikationen von der ODVA nicht 
frei verfügbar.

Startpunkt könnte der Open Source Scanner OpENer sein (Google).

Für weitergehende Fragen kannst du dich gerne bei mir melden.
Ich kann bestimmt Wireshark Aufzeichnungen verschiedener Kommunikationen 
auftreiben.

Gruß
Ulrich
Gast #6618168
Lesenswert?

blubb schrieb:
> 
https://www.odva.org/wp-content/uploads/2020/05/PUB00213R0_EtherNetIP_Developers_Guide.pdf
> gelesen ?

Ja. Ich will aber garkein Vendor werden, sondern nur ein bereits 
existierendes Gerät auslesen.

Ulrich K. schrieb:
> Für weitergehende Fragen kannst du dich gerne bei mir melden.
> Ich kann bestimmt Wireshark Aufzeichnungen verschiedener Kommunikationen
> auftreiben.

Das hört sich doch super an!
An sich reicht es aus wenn ich per explicit messaging eine input 
assembly auslesen kann. Idealerweise sowohl einzelne Felder als auch 
Arrays.

Ich stell mir das so vor:

- TCP Socket wird verbunden (kein Problem)
- Ich sende einen Request rüber (get_attribute_single hab ich hier 
gefunden)
- In dem Request sind jetzt irgentwie die Instanz und das Attribut drin 
kodiert
- Das Gerät antwortet mit was immer in dem Attribut drin steht
- Socket wird wieder zugemacht

Das würde mir schon völlig ausreichen. Nur muss ich dafür natürlich 
wissen wie die Pakete aufgebaut sind. Ich muss auch keinen fully 
compliant stack schreiben, es reicht wenn dieses eine Feature drin ist.
Ein Wireshark dump würde da vermutlich schon viel helfen

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren