StatusCode
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. |
Neuimplementierung in Setup-Version 5.x Im Folgenden wird die Funktionalität für den TwinCAT OPC UA Server in Setup-Version 5.x beschrieben. Anschließend folgt eine Beschreibung der Funktionalität für den TwinCAT OPC UA Server in Setup-Version 4.x.. |
Der TwinCAT OPC UA Server ermöglicht die Anpassung des OPC UA Status Codes für ein bestimmtes SPS-Symbol. Führen Sie die folgenden Schritte aus, um den StatusCode eines Symbols zur Laufzeit ändern zu können.
Struktur erstellen
Damit die Datenkonsistenz gewährleistet ist, basiert das Konzept auf einer Struktur (siehe Strukturierte Typen). Jedes Symbol, für das der StatusCode geändert werden können soll, muss in eine Struktur verpackt werden.
Erzeugen Sie eine neue Struktur und fügen Sie das folgende Pragma vor der Struktur-Definition hinzu. Die Struktur enthält das Symbol selbst sowie eine Variable vom Datentyp DINT, welche den StatusCode in Dezimalform repräsentiert.
{attribute 'OPC.UA.DA.StructuredType' := '1'}
{attribute 'OPC.UA.DA.StatusAndValue' := '1'}
TYPE ST_StatusCodeSimple :
STRUCT
value : REAL;
status : DINT := -2147155968; // equals 'BadCommunicationError'
END_STRUCT
END_TYPE
Sie können hierbei auch komplexe Symbole verwenden, zum Beispiel:
{attribute 'OPC.UA.DA.StructuredType' := '1'}
{attribute 'OPC.UA.DA.StatusAndValue' := '1'}
TYPE ST_StatusCodeComplex :
STRUCT
{attribute 'OPC.UA.DA.StructuredType' := '1'}
value : ST_Complex_1;
status : DINT := -2146762752; // equals 'BadServiceUnsupported'
END_STRUCT
END_TYPE
Erstellen Sie nun eine Instanz von dieser Struktur, z. B. im Programm MAIN, und fügen Sie das Pragma zur Freigabe der Instanz über OPC UA hinzu.
PROGRAM MAIN
VAR
{attribute 'OPC.UA.DA' := '1'}
stStatusCodeSimple : ST_StatusCodeSimple;
{attribute 'OPC.UA.DA' := '1'}
stStatusCodeComplex : ST_StatusCodeComplex;
END_VAR
Die definierten Struktur-Instanzen werden nun mit dem Datentyp der als „value“ definierten Membervariablen im TwinCAT OPC UA Server bereitgestellt.
StatusCode zur Laufzeit ändern
Um den StatusCode zur Laufzeit zu ändern, bearbeiten Sie einfach den Wert der Membervariablen „status“. Wenn Sie diesen, wie in obigem Beispiel auf „-2147155968“ setzen, so ändert sich der StatusCode zu „BadCommunicationError“.
Setzen Sie den Wert hingegen auf „0“, so ändert sich der StatusCode zu „Good“.
Der hierbei verwendete Dezimalwert ist durch die OPC UA Spezifikation festgelegt. Die aktuelle Version des StatusCode-Mappings kann hier eingesehen werden. In der nachfolgenden Tabelle werden einige gängige StatusCodes und deren numerische Darstellung aufgelistet.
StatusCode | Hex | Dezimal |
---|---|---|
Good | 0x00000000 | 0 |
Uncertain | 0x40000000 | 1073741824 |
Bad | 0x80000000 | -2147483648 |
BadUnexpectedError | 0x80010000 | -2147418112 |
BadInternalError | 0x80020000 | -2147352576 |
BadCommunicationError | 0x80050000 | -2147155968 |
BadTimeout | 0x800A0000 | -2146828288 |
BadServiceNotSupported | 0x800B0000 | -2146762752 |
Bitte beachten Sie bei der Berechnung der dezimalen Darstellung eines StatusCodes auf der Grundlage von dessen hexadezimaler Darstellung, dass Ihr Rechner auf DWORD eingestellt ist, zum Beispiel der Windows-Rechner („Programmierer“-Ansicht).
Verwendung in Setup-Version 4.x
In der „älteren“ Implementierung in Setup-Version 4.x wird die Variable auf OPC UA-Seite nicht als Einzelvariable dargestellt, sondern genauso wie auf SPS-Seite als Struktur. Auch in der Konfiguration gibt es Unterschiede bei den Attributen.
{attribute 'OPC.UA.DA.StructuredType' := '1'}
{attribute 'OPC.UA.DA.STATUS' := 'Quality'}
TYPE ST_StatusCodeSimple_V4 :
STRUCT
Value : REAL;
Quality : DINT := -2147155968; // equals 'BadCommunicationError'
END_STRUCT
END_TYPE
Der StatusCode wird nur an der Strukturvariable über OPC UA zur Verfügung gestellt. Die Werte Value und Quality enthalten den Wert und den Wert des StatusCodes.