-> Hier kostenlos registrieren
Hi,
ich mache große Fortschritte beim implementieren eines Open-Source PROFINET Masters für das Apache PLC4X Projekt. (Ja wir haben eine Vendor ID ;-) )
Allerdings bin ich gerade über eine Sache gestolpert:
Ich nutze ein SIMOCODE PRO V PN Profinet, welches ich mit Tia Portal Pro und Simocode Pro (v16) projektiert habe. Ein PROFINET Master kann sich auch korrekt verbinden und die BUS leuchte geht an. Jetzt versuche ich das für das PLC4X Projekt nachzubauen. Datenstrukturen, Serializer und Parser sind fertig und tun ihren Job auch ordentlich.
Um den Verbindungsaufbau zu machen, muss ich ja PROFINET IO Connection Manager (PNIO-CM) verwenden. Das ist a eine reihe von Protokollen gestapelt.
Nun kann ich im DCE/RPC teil angeben, ob die Nachricht big-endian oder little-endian sein soll. In einem Wireshark Mitschnitt habe ich gesehen, dass hier Little-Endian verwendet wurde. Das hat den unschönen Nebeneffekt, dass ich innerhalb meines Treibers die Endianess wechseln muss.
- Ethernet (Big-Endian)
- IP (Big-Endian)
- UDP (Big-Endian)
- DCE/RPC (Little-Endian)
- PROFINET IO CM (Little-Endian)
- Blöcke im PROFINET (Big-Endian)
Also hatte ich im DCE/RPC einfach mal frecherweise gesagt: Big-Endian und habe entsprechend die DCE/RPC und PROFINET IO (Sind ja eigentlich nur die 5 Längen- und Anzahl-Angaben) auch Big-Endian gemacht.
Wireshark decodiert mir alle Felder identisch mit meinem mitschnitt. Allerdings bekomme ich ein "nca_unk_if" ... also ein reject, welches allerdings auch Little-Endian kodiert ist.
Kann es sein, dass mein kleiner Trick dem Controller nicht gefällt? Ich würde dies nur gerne bestätigt haben, bevor ich anfange den Aufwand zu betreiben die Endianess in der Mitte des Stacks zwei mal zu wechseln.
Gruß,
Chris
ich mache große Fortschritte beim implementieren eines Open-Source PROFINET Masters für das Apache PLC4X Projekt. (Ja wir haben eine Vendor ID ;-) )
Allerdings bin ich gerade über eine Sache gestolpert:
Ich nutze ein SIMOCODE PRO V PN Profinet, welches ich mit Tia Portal Pro und Simocode Pro (v16) projektiert habe. Ein PROFINET Master kann sich auch korrekt verbinden und die BUS leuchte geht an. Jetzt versuche ich das für das PLC4X Projekt nachzubauen. Datenstrukturen, Serializer und Parser sind fertig und tun ihren Job auch ordentlich.
Um den Verbindungsaufbau zu machen, muss ich ja PROFINET IO Connection Manager (PNIO-CM) verwenden. Das ist a eine reihe von Protokollen gestapelt.
Nun kann ich im DCE/RPC teil angeben, ob die Nachricht big-endian oder little-endian sein soll. In einem Wireshark Mitschnitt habe ich gesehen, dass hier Little-Endian verwendet wurde. Das hat den unschönen Nebeneffekt, dass ich innerhalb meines Treibers die Endianess wechseln muss.
- Ethernet (Big-Endian)
- IP (Big-Endian)
- UDP (Big-Endian)
- DCE/RPC (Little-Endian)
- PROFINET IO CM (Little-Endian)
- Blöcke im PROFINET (Big-Endian)
Also hatte ich im DCE/RPC einfach mal frecherweise gesagt: Big-Endian und habe entsprechend die DCE/RPC und PROFINET IO (Sind ja eigentlich nur die 5 Längen- und Anzahl-Angaben) auch Big-Endian gemacht.
Wireshark decodiert mir alle Felder identisch mit meinem mitschnitt. Allerdings bekomme ich ein "nca_unk_if" ... also ein reject, welches allerdings auch Little-Endian kodiert ist.
Kann es sein, dass mein kleiner Trick dem Controller nicht gefällt? Ich würde dies nur gerne bestätigt haben, bevor ich anfange den Aufwand zu betreiben die Endianess in der Mitte des Stacks zwei mal zu wechseln.
Gruß,
Chris