Strukturen
Voraussetzungen Diese Funktionalität steht nur für Data-Access-Geräte basierend auf TwinCAT 3 und dem Import von TMC-Symboldateien zur Verfügung. |
Der TwinCAT OPC UA Server ermöglicht die Verwendung von sogenannten StructuredTypes für Strukturen aus der TwinCAT-3-SPS. StructuredTypes erlauben es, Strukturen datenkonsistent zu lesen oder zu schreiben und die Typbeschreibung der Struktur für den Client bereitzustellen.
Über ein spezielles Pragma können Sie eine Struktur als StructuredType definieren und verfügbar machen. Wenn dieses Pragma nicht gesetzt wird, wird die Struktur nicht als StructuredType in den Adressraum des Servers geladen, sondern als FolderType dargestellt. Die Membervariablen der Struktur werden als separate Nodes dargestellt, auf die zugegriffen werden kann.
Gegeben sei folgendes Beispiel einer Struktur in der TwinCAT-3-SPS:
TYPE ST_Communication :
STRUCT
a : INT;
b : INT;
c : INT;
END_STRUCT
END_TYPE
Im Programm MAIN wird diese Struktur nun instanziiert und über ein Pragma für OPC UA freigegeben, wie im Kapitel Freigabe von (SPS-) Symbolen beschrieben.
PROGRAM MAIN
VAR
{attribute 'OPC.UA.DA' := '1'}
stCommunication : ST_Communication;
END_VAR
Die Struktur-Instanz wird nun standardmäßig wie folgt im Server bereitgestellt:
Auf die einzelnen Membervariablen der Struktur kann nun zugegriffen werden, allerdings nicht auf das Rootelement der Struktur. Hierdurch ist gegebenenfalls kein datenkonsistenter Zugriff auf die gesamte Struktur möglich.
Durch die Verwendung eines weiteren Pragmas wird diese Struktur-Instanz nun als StructuredType definiert.
PROGRAM MAIN
VAR
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.StructuredType' := '1'}
stCommunication : ST_Communication;
END_VAR
Im TwinCAT OPC UA Server wird die Instanz dann wie folgt bereitgestellt:
Beim Auslesen des Rootelements werden die Strukturinformationen datenkonsistent über OPC UA bereitgestellt und können von einem Client verarbeitet werden. Zusätzlich werden auch die Membervariablen als separate Nodes dargestellt und es kann auf sie zugegriffen werden. Über ein spezielles Attribut können Sie dies deaktivieren. Die Membervariablen sind dann nur noch über den StructuredType zugreifbar, wie das folgende Beispiel zeigt:
PROGRAM MAIN
VAR
{attribute 'OPC.UA.DA' := '2'}
{attribute 'OPC.UA.DA.StructuredType' := '1'}
stCommunication : ST_Communication;
END_VAR
Hierbei handelt es sich vor allem um eine Speicheroptimerung des Servers, wie auch im Kapitel Optimierungen beschrieben, denn für jede Node im Adressraum muss Arbeitsspeicher allokiert werden.
Sie müssen die Platzierung der Pragmas nicht zwingend an jeder Instanz einer Struktur vornehmen, sondern können diese auch einmalig an der Struktur-Definition durchführen. In diesem Fall werden alle Instanzen von dieser Struktur automatisch für OPC UA als StructuredType freigegeben.
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.StructuredType' := '1'}
TYPE ST_Communication :
STRUCT
a : INT;
b : INT;
c : INT;
END_STRUCT
END_TYPE
Sie können in diesem Fall die StructuredType Definition auch explizit für bestimmte Instanzen deaktivieren, hierzu verwenden Sie das folgende Attribut:
PROGRAM MAIN
VAR
{attribute 'OPC.UA.DA.StructuredType' := '0'}
stCommunication : ST_Communication;
END_VAR
StructuredType für Funktionsbausteine
Sie können StructuredTypes auch bei SPS-Funktionsbausteinen verwenden. In diesem Fall erhält eine Funktionsbaustein-Instanz einen Kindknoten namens „FunctionBlock“, welcher den gesamten Funktionsbaustein als StructuredType darstellt.
Betrachten Sie folgendes Beispiel:
FUNCTION_BLOCK FB_FunctionBlock
VAR_INPUT
Input1 : INT;
Input2 : LREAL;
END_VAR
VAR_OUTPUT
Output1 : LREAL;
END_VAR
Im MAIN Programm wird eine Instanz des Funktionsbausteins angelegt und über Pragmas sowohl für OPC UA freigegeben als auch als StructuredType definiert.
PROGRAM MAIN
VAR
{attribute 'OPC.UA.DA' := '1'}
{attribute 'OPC.UA.DA.StructuredType' := '1'}
fbFunctionBlock : FB_FunctionBlock;
END_VAR
Der TwinCAT OPC UA stellt die Funktionsbaustein-Instanz dann wie folgt bereit:
Die oben für Strukturen genannten Definitionsorte der Pragmas gelten ebenfalls für Funktionsbausteine. Desweiteren können Sie auch hier die Membervariablen eines Funktionsbausteins explizit ausblenden.
Einschränkungen
Es gelten die folgenden Einschränkungen bei der Verwendung von StructuredTypes.
Pointer und Referenzen Wenn in der Struktur Pointer- und Referenztypen verwendet werden, dann können diese nicht in einen StructuredType überführt werden. Der OPC UA Server stellt diese Strukturen als reguläre FolderTypes mit der entsprechenden Membervariablen dar. |
Maximale Größe der Struktur Die maximale Größe einer Struktur ist standardmäßig auf 16 kByte beschränkt. Überschreitet die Größe der Struktur dieses Limit, werden Struktur-Instanzen als FolderType dargestellt. Sie können dieses Limit bei Bedarf erhöhen. Die Hintergründe sind in dem Kapitel Optimierungen näher beschrieben. Jedes STRUCT tauscht ständig Daten mit dem Basis-ADS-Gerät aus, d. h. mit jedem Lese-/Schreibbefehl eines StructuredTypes wird eine große ADS-Meldung verschickt. Damit der ADS-Router nicht mit großen Meldungen überflutet wird, ist die maximale Größe beschränkt. |