Mischen von sicherheitsbezogenen Variablen und Standard-Variablen in ST

HINWEIS:

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

    UNBEABSICHTIGTER BETRIEBSZUSTAND DES GERÄTS

    Verwenden Sie keine Variablen in sicherheitsbezogenen Funktionen nach einer Datentypkonvertierung von sicherheitsbezogen nach Standard.

    Die Nichtbeachtung dieser Anweisungen kann Tod, schwere Körperverletzungen oder Sachschäden zur Folge haben.

  • 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.

HINWEIS:

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".