Tipp gesucht: versch. IO- Link Devices an versch. Masterports?

Alex7284

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
hallo IO- Link Experten😄,

ich suche nach einem Lösungsansatz meines Problems. Im Forum gibt es bereits ähnliche Themen.

In einem ProfiNet-System für Demonstrationszwecke habe ich 6 IO- Link- Master mit jeweils 4 Ports.
Die Master hängen an versch. ProfiNet- Teilnehmern meines Netzwerkes, einzelne Teilnehmer können aktiviert/deaktiviert werden.
D.h. unter Umständen sind auch nur mal 2 IO- Link- Master im Netzwerk aktiv..

Sofern alle Teilnehmer angeschlossen, sollen an diesen insgesamt 24 (6x4) IO- Link- Ports versch. Devices (Sensoren / Aktoren) angeschlossen werden können- ganz egal an welchem Port. Die Datenstruktur dieser Devices ist ganz unterschiedlich, mal liefert das Device nur 2 Byte, mal bekommt es ein 1Byte und liefert 2, mal liefert es 8Byte usw... (IO- Link halt😏)

Um also später jedes Device an jeden Port anschließen zu können, habe ich jeweils 8Byte IN/OUT vergeben, das sollte -Stand heute- für alle ausreichen.
In den Baugruppenparametern von jedem Port habe ich Autostart gewählt und das "Häkchen" bei "Enable Pull/Plug submodule alarm" entfernt.

So kommt es zu keinem Fehler, wenn ein Port nicht belegt. Weiterhin können alle Daten ausgelesen werden- egal wie viele Byte IN/OUT
Mehr wie 8Byte IN/OUT gibt es in meinem System nicht...

1757072889326.png

Ob der Port belegt ist und um das Device daran zu identifizieren, möchte ich den Siemens-FB LIOLink_IdentAndDiag verwenden.
Damit kenne ich ja das Device und somit dessen Datenstruktur, das müsste ja gehen?


Jetzt suche ich noch die "Brücke", um die Daten des individuell angeschlossenen Devices automatisiert entsprechend aufzubereiten.
Wenn ein Port nicht belegt ist, soll eben auch nichts passieren..

Beispiel: Drucksensor 0815 ist an Port0 von Master A angeschlossen
Drucksensor 0815 liefert 2 Byte: davon sind 2bit Schaltausgänge, in den restlichen 14bit liegt der Druckwert
Jetzt soll der wahre Druckwert ausgegeben werden

Wie macht man das am besten und einfachsten?
Kann man dazu auch den Siemens FB LIOLink_MeasuredDataChannel verwenden, wobei dieser ja nur Sensoren (nach dem SmartSensorProfil) unterstützt...

Hier die Beschreibung des gesamten LIOLInk von Siemens: LIOLink


Hat jemand so was ähnliches schon mal gemacht und eine Routine entwickelt?

Wer kann mir helfen? Ich bin leider noch nicht so fit, um das selbst zu lösen...


Ich bin für jede Hilfe dankbar!!


Viele Grüße
Alex
 
Also um herauszufinden ob der IO-Link Kanal am Master belegt ist, musst du den Baustein - LIOLink_Diagnose aufrufen und dann die Events auswerten.

Siehe 3.2.6 und 3.2.7 -> Event-Code: 0x1800
 
Zuviel Werbung?
-> Hier kostenlos registrieren
8Byte IN/OUT vergeben, das sollte -Stand heute- für alle ausreichen.
Nimm besser gleich 32/32, dann bist du sicher das es ausreichen wird.

Die Port Einstellungen sind glaube OK.

Ob ein IO-Link Device angestöpselt ist, oder nicht, lässt sich am einfachsten prüfen durch nachschauen im PQI byte - bit 5.
1 - Yuhu :D, Device ist dran
0 - :cry:, kein Device
 
Ob ein Device dran ist musst du über das PQI Bit 5 anfragen/sehen können.
Dann habe ich mir dafür in ST/Scl ein Bausteinchen geschrieben, dass immer den ganzen Input Bock liest und mit einer Case, dann je nach erkanntem Typ, in eine Struktur schubst, die für jeden Typ separat vorhanden ist. Sind ja x verschiedene Dinge die da jeweils vorkommen. Darin kannst du auch gleich die unterschiedlichen Bitfilter und Codierungen oder Umrechnung vornehmen. Falls dein Typ mehrfach vorkommt, musst du noch was mit einer Liste/Array basteln.
Wird dann definitiv ein ganz schöner Brocken von der Größe her aber sooo kompliziert ist es dann auch nicht. Die Decodierung könntest du noch in separate Bausteine stecken für mehr Übersicht aber ich mag des nicht so.
 
Also um herauszufinden ob der IO-Link Kanal am Master belegt ist, musst du den Baustein - LIOLink_Diagnose aufrufen und dann die Events auswerten.

Siehe 3.2.6 und 3.2.7 -> Event-Code: 0x1800

Nimm besser gleich 32/32, dann bist du sicher das es ausreichen wird.

Die Port Einstellungen sind glaube OK.

Ob ein IO-Link Device angestöpselt ist, oder nicht, lässt sich am einfachsten prüfen durch nachschauen im PQI byte - bit 5.
1 - Yuhu :D, Device ist dran
0 - :cry:, kein Device
Danke Dir!
ja, 32/32 wäre grundsätzlich besser auch für andere/spätere Devices. Aber leider sollen auch die Adressen in einer bestimmten Logik vergeben werden, welche bei 32Byte dann auch nicht mehr aufgeht...

Muss ich zwingend über PQI abfragen, ob ein Port belegt ist?
Kann ich nicht einfach bei allen Ports den LIOLink_IdentAndDiag anwenden, egal ob etwas angeschlossen oder nicht?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ob ein Device dran ist musst du über das PQI Bit 5 anfragen/sehen können.
Dann habe ich mir dafür in ST/Scl ein Bausteinchen geschrieben, dass immer den ganzen Input Bock liest und mit einer Case, dann je nach erkanntem Typ, in eine Struktur schubst, die für jeden Typ separat vorhanden ist. Sind ja x verschiedene Dinge die da jeweils vorkommen. Darin kannst du auch gleich die unterschiedlichen Bitfilter und Codierungen oder Umrechnung vornehmen. Falls dein Typ mehrfach vorkommt, musst du noch was mit einer Liste/Array basteln.
Wird dann definitiv ein ganz schöner Brocken von der Größe her aber sooo kompliziert ist es dann auch nicht. Die Decodierung könntest du noch in separate Bausteine stecken für mehr Übersicht aber ich mag des nicht so.
Vielen lieben Dank!!

Vielleicht bräuchte ich umfangreichere Hilfe von Dir :)
Ein Kollege hat einen ähnlichen Baustein, wie von Dir beschrieben, für die Sensordatenaufbereitung erstellt. Ich frage mich nur, wie man die Deviceabfrage und die Aufbereitung der Rohdaten miteinander verheiraten kann...
 
Zurück
Oben