TIA Highlights von TIA Portal V15 - Referenzen

Solange man Referenzen nicht zwischenspeichern kann, sind sie leider nur von begrenztem Nutzen. Aber ich kann dir 1 Szenario skizzieren, welches ohne Referenzen so nicht lösbar wäre:

1. Du baust dir einen generischen Baustein, der eine verkettete Liste verwaltet. Die Liste wird als Variable (vom Typ UDTxxx) übergeben.
2. Du möchtest den Baustein generisch machen, weil du Listen einsetzt, die als Nutzdaten entweder DINT, LINT, REAL, LREAL oder STRING[82] einsetzen - also 5 verschiedene UDTs.

Lösungsansätze:
a. Die Liste wird als INOUT mit festem Datentyp übergeben - die Idee des generischen Bausteins kannst du vergessen
b. Die Liste wird als Variant-INOUT übergeben (geht das?). Im inneren des Bausteins musst du überprüfen, welchen der 5 UDTs du angehängt hast und anschließend den Inhalt der Variable in eine lokale Variable umkopieren (VariantGet) - nach Abschluss deiner Arbeiten kopierst du das ganze Feld wieder raus (VariantPut). Abgesehen davon, dass sehr viel Zeug sinnlos herumkopiert wird gibts ein klitzkleines Problem bei asynchronen Zugriffen, z.B. von der Visu:
Es kann nämlich sein, dass genau zwischen VariantGet und VariantPut die Visu oder ein anderer externer Zugriff in die betreffende Variable schreibt. Durch den folgenden VariantPut wird die Änderung der Visu wieder überschrieben.
c. Referenz: Du prüfst zuerst, welchen UDT deine angegebene Liste hat. Anschließend machst du einen Zuweisungsversuch, nun kannst du auf direkt auf die übergebene Variable zugreifen - ohne Herumkopiererei - und die Probleme mit dem asynchronen Zugriff fallen weg.

Zugegeben, verkettete Listen und dergleichen sind in SPS-Programmen eher akademische Beispiele. Generische Funktionen für kleine Aufgaben mit verschiedenen Datentypen sind aber nicht mehr ganz so akademisch.
 
Zurück
Oben