Fragen zum Profinet IRT Gateway

Rund um die Software von Revolution Pi
Post Reply
sebastian
Posts: 4
Joined: 11 Oct 2022, 12:05

Fragen zum Profinet IRT Gateway

Post by sebastian »

Hallo allerseits,

wir möchten eines unserer Produkte Profinet fähig machen und haben uns dazu einen RevPi Core 3 und ein Profinet IRT Gateway von Kunbus gekauft.
In der Vergangenheit haben wir schon das Profibus Gateway in einer ähnlichen Konfiguration erfolgreich eingesetzt, das ist allerdings alles an Erfahrung, das wir haben.

Ich habe bereits folgende Tutorials / Handbücher komplett gelesen (und teilweise verstanden):
Ich habe ein paar Fragen zu Profinet im Allgemeinen und zu dem Gateway im Speziellen und hoffe, dass mir hier geholfen werden kann.

  1. Das GW hat laut Handbuch 512 Bytes als Input / Output zur Verfügung. Davon sind 320 Bytes fest als Slots konfiguriert mit bestimmten Modulen (16,16,32,32,32,64,64,64 Bytes Größe). Die restlichen 192 Bytes scheinen wohl für azyklische Datenübertragung zur Verfügung zu stehen (Records). Meine Frage ist, wenn ich in Pictory nun 512 Inputs/Outputs festlege, und dann mit der piTest cli z.B.

    Code: Select all

    piTest -w Output_321,1
    ausführe, würde ich dann das erste Byte des ersten Records setzen? Wie ist die genaue Anordnung der zyklischen / azyklischen Daten?
  2. Im Profinet Gateway Tutorial gibt es den Abschnitt "Addressierung". Diesen verstehe ich nicht ganz, dort heißt es nämlich:
    Adressierung
    Alle Records werden über API 0, Slot 0, Subslot 1 adressiert. Die Daten werden dabei im Big-Endian-Format übertragen. Beim Big-Endian-Format werden zuerst die höherwertigen Bytes übertragen und an den Speicherplätzen mit den niedrigsten Adressen abgelegt.
    Pro Index werden immer 2 Byte Adressiert:
    Offset 0 + Offset 1 → Record 0
    Offset 510 + Offset 511 → Record 255 (0x00ff)
    Index 0x0000 – 0x00ff beinhaltet die Input Daten, die vom anderen RevPi Gate gesendet wurden.
    Index 0x1000 – 0x10ff beinhaltet die Output Daten , die an die an das andere RevPi Gate gesendet werden.
    Wie können für die Records plötzlich bis zu 512 Bytes verfügbar sein? Ich dachte, man hätte 192 Bytes pro Input/Output Seite?
    Weiterhin verstehe ich nicht ganz, was es heißt, dass pro Index immer 2 Bytes adressiert werden. Gilt das für die Profinet Seite, dass also die PLC immer nur Words als minimum adressieren kann, und nicht bytes?
  3. Die PLC/SPS würde die GDSML Datei des Gateways laden und diese "Slots" sehen. Wenn wir also in unserer API z.B. definieren, dass in Slot 2, Byte 12-15 ein uint64 steht, der bspw. einen Sensorwert darstellt, dann müssten wir auf unserer Seite (mit piTest als Beispiel) so etwas in der Art ausführen, um den Sensorwert zu aktualisieren

    Code: Select all

    piTest -w Output_92,1
    piTest -w Output_93,2
    piTest -w Output_94,3
    piTest -w Output_95,4
    
  4. Ich habe im englischen Forum eine Frage gestellt, vielleicht kann diese hier ja ebenfalls beantwortet werden. Zusammengefasst, wenn ich über Pictory die Anzahl der Inputs/Outputs des GW auf 512 erhöhe, dann kann ich über piTest keine einzige Variable mehr schreiben oder lesen.
    Link: https://revolutionpi.com/forum/viewtopi ... 7596cb8833

Vielen Dank im Voraus für jegliche Hilfe
User avatar
nicolaiB
KUNBUS
Posts: 931
Joined: 21 Jun 2018, 10:33
Location: Berlin
Contact:

Re: Fragen zum Profinet IRT Gateway

Post by nicolaiB »

Hallo Sebastian,

danke für deine Frage und detaillierte Aufbereitung, was du bereits versucht hast.
sebastian wrote: 13 Oct 2022, 11:10 Das GW hat laut Handbuch 512 Bytes als Input / Output zur Verfügung. Davon sind 320 Bytes fest als Slots konfiguriert mit bestimmten Modulen (16,16,32,32,32,64,64,64 Bytes Größe). Die restlichen 192 Bytes scheinen wohl für azyklische Datenübertragung zur Verfügung zu stehen (Records). Meine Frage ist, wenn ich in Pictory nun 512 Inputs/Outputs festlege, und dann mit der piTest cli z.B.

Code: Select all

piTest -w Output_321,1
ausführe, würde ich dann das erste Byte des ersten Records setzen? Wie ist die genaue Anordnung der zyklischen / azyklischen Daten?
Die zyklischen Daten liegen wie im Handbuch beschrieben auf den ersten 320 Bytes (jeweils Eingang und Ausgangsseitig). Ob die Records von RevPi-Seite aus beschrieben bzw. gelesen werden können, muss ich noch einmal in Erfahrung bringen. Hintergrund ist, dass die modularen Gateways ursprünglich für den paarweisen Betrieb als Feldbus-zu-Feldbus Gateways konzeptioniert wurden und die zyklische Anbindung an das RevPi-Prozessabbild erst später ergänzt wurde.
sebastian wrote: 13 Oct 2022, 11:10 Im Profinet Gateway Tutorial gibt es den Abschnitt "Addressierung". Diesen verstehe ich nicht ganz, dort heißt es nämlich:
Adressierung
Alle Records werden über API 0, Slot 0, Subslot 1 adressiert. Die Daten werden dabei im Big-Endian-Format übertragen. Beim Big-Endian-Format werden zuerst die höherwertigen Bytes übertragen und an den Speicherplätzen mit den niedrigsten Adressen abgelegt.
Pro Index werden immer 2 Byte Adressiert:
Offset 0 + Offset 1 → Record 0
Offset 510 + Offset 511 → Record 255 (0x00ff)
Index 0x0000 – 0x00ff beinhaltet die Input Daten, die vom anderen RevPi Gate gesendet wurden.
Index 0x1000 – 0x10ff beinhaltet die Output Daten , die an die an das andere RevPi Gate gesendet werden.
Wie können für die Records plötzlich bis zu 512 Bytes verfügbar sein? Ich dachte, man hätte 192 Bytes pro Input/Output Seite?
Weiterhin verstehe ich nicht ganz, was es heißt, dass pro Index immer 2 Bytes adressiert werden. Gilt das für die Profinet Seite, dass also die PLC immer nur Words als minimum adressieren kann, und nicht bytes?
Du hast pro Richtung 320 Bytes (16*2 + 32*3 + 64*3) zur Verfügung welche zyklisch geschrieben werden (nicht 192). Auf RevPi Seite kannst du die Inputs über die ersten 320 Input-Bytes auslesen. Auf PLC Seite kannst du beliebige Datentypen (auch Bytes) verwenden.
sebastian wrote: 13 Oct 2022, 11:10 Die PLC/SPS würde die GDSML Datei des Gateways laden und diese "Slots" sehen. Wenn wir also in unserer API z.B. definieren, dass in Slot 2, Byte 12-15 ein uint64 steht, der bspw. einen Sensorwert darstellt, dann müssten wir auf unserer Seite (mit piTest als Beispiel) so etwas in der Art ausführen, um den Sensorwert zu aktualisieren

Code: Select all

piTest -w Output_92,1
piTest -w Output_93,2
piTest -w Output_94,3
piTest -w Output_95,4
Genau, die Daten sind im Prozessabbild als Bytes repräsentiert und müssen gemäß deiner Datenstrukturen auf Feldbusseite wieder zusammengesetzt werden. Solltest du deine Applikation in Python programmieren, so kann ich dir die Bibliothek revpimodio2 empfehlen, welche mit der Funktion replace_io() dies stark vereinfacht. Bitte beachte dabei, dass du die Endianness deiner Daten berücksichtigen musst.
sebastian wrote: 13 Oct 2022, 11:10 Ich habe im englischen Forum eine Frage gestellt, vielleicht kann diese hier ja ebenfalls beantwortet werden. Zusammengefasst, wenn ich über Pictory die Anzahl der Inputs/Outputs des GW auf 512 erhöhe, dann kann ich über piTest keine einzige Variable mehr schreiben oder lesen.
Link: https://revolutionpi.com/forum/viewtopi ... 7596cb8833
Ulrich hat dir im anderen Beitrag geantwortet (_ vs __ im Namen). Sowie ich das erkennen kann, sollte das dein Problem lösen.

Gruß Nicolai
sebastian
Posts: 4
Joined: 11 Oct 2022, 12:05

Re: Fragen zum Profinet IRT Gateway

Post by sebastian »

Hallo Nicolai,

vielen Dank für deine ausführlichen Antworten, das hat schon ein paar Fragezeichen auf meiner Seite aufklären können :)
Die zyklischen Daten liegen wie im Handbuch beschrieben auf den ersten 320 Bytes (jeweils Eingang und Ausgangsseitig). Ob die Records von RevPi-Seite aus beschrieben bzw. gelesen werden können, muss ich noch einmal in Erfahrung bringen. Hintergrund ist, dass die modularen Gateways ursprünglich für den paarweisen Betrieb als Feldbus-zu-Feldbus Gateways konzeptioniert wurden und die zyklische Anbindung an das RevPi-Prozessabbild erst später ergänzt wurde.
Ok verstanden! Gerade würden wir auch gut mit den 320Bytes/zyklischen Daten auskommen. Wenn du etwas zu den azyklischen Daten herausfindest, würde ich mich dann trotzdem noch sehr über ein Update freuen.
Du hast pro Richtung 320 Bytes (16*2 + 32*3 + 64*3) zur Verfügung welche zyklisch geschrieben werden (nicht 192). Auf RevPi Seite kannst du die Inputs über die ersten 320 Input-Bytes auslesen. Auf PLC Seite kannst du beliebige Datentypen (auch Bytes) verwenden.
Ok, die Aufteilung 320/192 == 512 Bytes habe ich nun verstanden, danke!
Und verstehe ich es richtig, dass der Punkt "Ein Index bezieht sich immer auf 2 Byte Daten" erstmal nur für azyklische Records gelten würde, von denen wir uns aber derzeit gar nicht sicher sind, ob die so benutzbar sind (quasi das, was aus der vorherigen Frage noch offen geblieben ist)?

Beim Rest ist alles klar :)

Vielen Dank nochmal!

Sebastian
Post Reply