Zugriff auf strukturierten Datentyp und Strukturelemente

Falls Sie eine Variable basierend auf einem strukturierten Datentyp deklarieren wollen (dadurch wird eine strukturierte Variable deklariert), geben Sie den Namen des strukturierten Datentyps (auf das Beispiel bezogen: Range oder RangeS) als Datentyp in der Deklaration von Variablen ein. Dabei können Sie die Strukturelemente initialisieren.

Falls Sie strukturierte Variablen in Zuweisungen in ST verwenden wollen, geben Sie den Namen der Variable (z.B. VRange) und den Namen des Strukturelements (z.B. min) durch das Zeichen . voneinander getrennt (z.B. VRange.min) ein. Eine strukturierte Variable können Sie nur einer anderen strukturierten Variablen zuweisen, wenn beide auf strukturierten Datentyp basieren, die in diesen Punkten identisch sind:

  • Anzahl/Reihenfolge, Name und Datentyp der Strukturelemente
  • Anweisung {KeepElementOrder}

Die anderen Daten der strukturierten Datentypen, wie die →Initialisierungswerte der Strukturelemente, eine Beschreibung/Kommentar der Datentypen und auch die Namen der Datentypen, dürfen unterschiedlich sein.

Beispiele
TYPE 
    Range : STRUCT
    min : INT;
    max : INT := 300;
  END_STRUCT;
  RangeS : STRUCT
    signal   : BOOL;       
    scaleMin : DINT;  
    scaleMax : DINT; 
  END_STRUCT;
  struct1 : STRUCT
    elem1 : BYTE;
    elem2 : WORD;
  END_STRUCT;
  struct2 : STRUCT
    elem1 : BYTE;
    elem2 : WORD := 4;
  END_STRUCT;
END_TYPE

FUNCTION_BLOCK UseStructTypes
 VAR
    var1    : INT;
    VRange  : Range;
          (* Deklaration der Variable 'VRange' vom strukturierten Datentyp 'Range' *)
    VRangeS : RangeS := (scaleMin := -5, scaleMax := 5);
          (* Strukturinitialisierung für Variable 'VRangeS' vom strukturierten Datentyp 'RangeS': Initialisierung der Strukturelemente 'scaleMin' und 'scaleMax' *)

    VarA : struct1; (* weitere Deklarationen von Variablen mit jeweils einem anderen strukturierten Datentyp *)
    VarB : struct2;
  END_VAR
  VRange.min := 2;
          (* Zuweisung des Werts '2' zum Strukturelement 'min' der Variable 'VRange' *)
  var1 := VRange.max;
          (* Zuweisung des Werts des Strukturelements 'max' der Variable 'VRange' zur Variable 'var1' *)
          
  VarA := VarB;      (* Korrekte Zuweisung, da sich die Strukturelemente der strukturierten Datentypen nur bzgl. Initialisierungswert unterscheiden. *)
  VRangeS := VRange; (* Fehlerhafte Zuweisung, da sich die Strukturelemente der strukturierten Datentypen bzgl. Anzahl und Name unterscheiden. *)
          
END_FUNCTION_BLOCK