Begriffsdefinition: Standard = nicht-sicherheitsbezogen.
Der Begriff "Standard" bezeichnet nicht-sicherheitsbezogene Elemente/Objekte. Beispiele: Ein Standard-Prozessdaten-Element wird nur von einem nicht-sicherheitsbezogenen I/O-Gerät (d.h. einem Standard-Gerät) gelesen/geschrieben. Standard-Variablen/-Funktionen/-Funktionsbausteine sind nicht-sicherheitsbezogene Daten. Der Begriff "Standard-Steuerung" bezeichnet die nicht-sicherheitsbezogene Steuerung.
Sicherheitsbezogene und Standard-Variablen können zusammen in einem ST-Code-Arbeitsblatt verwendet werden und unter besonderen Umständen auch in einer ST-Anweisung.
Es gelten folgende Regeln:
Prinzipiell kann eine sicherheitsbezogene Variable mit Hilfe des Zuweisungsoperators ':=' auf eine Standard-Variable geschrieben werden. Damit wird eine implizite Typkonvertierung eines sicherheitsbezogenen Datentyps in einen Standard-Datentyp durchgeführt.
Beispiel für eine gültige Zuweisung: MyStandardBool := MySafeBool; (* zulässig *)
WARNUNG | |
---|---|
Zuweisungen von Standard-Variablen an sicherheitsbezogene Variablen sind prinzipiell nicht zulässig, weil dies einer impliziten Typkonvertierung eines Standard-Datentyps in einen sicherheitsbezogenen Datentyp entspräche.
Fehlerbeispiel: MySafeBool := MyStandardBool; (*
nicht
zulässig *)
Sicherheitsbezogene und Standard-Variablen können innerhalb einer Anweisung gemischt werden, solange keine Zuweisung einer Standard-Variablen auf eine sicherheitsbezogene Variable erfolgt.
Symbolische Operatoren, wie z.B. & = + - * /
, werden als nicht typisiert betrachtet. Die "funktionalen Operatoren", wie z.B. AND, OR, DIV, MUL
, etc., werden als typisiert betrachtet. Bei typisierten Operatoren muss zwischen der "Standard-Variante" und der "sicherheitsbezogenen Variante" (z.B. AND/AND_S) unterschieden werden.
Gültige Beispiele:
MyStandardResult := MyStandardBool AND MyStandardBool2; (* zulässig *)
MySafeResult := MySafeBool1 AND_S MySafeBool2; (* zulässig *)
MySafeResult := MySafeBool1 & MySafeBool2; (* zulässig *)
MyStandardResult := MyStandardBool & MySafeBool; (* zulässig *)
Beispiele für Fehler:
MySafeResult := MyStandardBool & MySafeBool; (*
nicht
zulässig *)
MySafeResult := MyStandardBool AND_S MySafeBool; (*
nicht
zulässig *)
Sicherheitsbezogene und Standard-Variablen können innerhalb eines Funktions-/Funktionsbaustein-Aufrufs gemischt werden, solange nicht eine Standard-Variable einer sicherheitsbezogenen Variablen zugewiesen wird. Dies betrifft auch die Zuweisung von Parametern: Standard-Variablen dürfen nicht mit Formalparametern sicherheitsbezogener Funktionen/FBs verbunden werden, weil hier sicherheitsbezogene Datentypen erwartet werden.
Gültige Beispiele:
MyStandardResult:= AND(MySafeBool, MyStandardBool); (* zulässig *)
MyStandardCTU(CU := MySafeVar, RESET := 0, PV := INT#50); (* zulässig *)
Beispiele für Fehler:
MySafeResult:= AND(MySafeBool, MyStandardBool); (*
nicht
zulässig *)
MySafeCTU(CU := MyStandardVar, RESET := 0, PV := INT#50); (*
nicht
zulässig *)
Zur einfacheren Unterscheidung werden Standard-Variablen und sicherheitsbezogene Variablen im ST-Code-Editor unterschiedlich dargestellt. Sicherheitsbezogene Variablen sind rot unterstrichen, Standard-Variablen sind nicht unterstrichen.
Obwohl sicherheitsbezogene und Standard-Variablen in ST gemischt werden können, ist es nicht zulässig, das Zustimmprinzip in ST zu realisieren. Verwenden Sie dafür FBS/KOP. Lesen Sie hierzu das Thema "Zustimmprinzip programmieren".