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 .. (z.B. VRange.min). 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;
          (* declaring variable 'VRange' of structured data type 'Range' *)
    VRangeS : RangeS := (scaleMin := -5, scaleMax := 5);
          (* structure initialization for variable 'VRangeS' of structured data type 'RangeS': initializing the structure elements 'scaleMin' and 'scaleMax' *)
 
    VarA : struct1; (* more declarations of variables, each with a different structured data type *)
    VarB : struct2;
  END_VAR
  VRange.min := 2;
          (* assigning value '2' to structure element 'min' of variable 'VRange' *)
  var1 := VRange.max;
          (* assigning the value of the structure element 'max' of variable 'VRange' to variable 'var1' *)
          
  VarA := VarB;      (* correct assignment because the structure elements of the structured data typs differ only regarding the intial values *)
  VRangeS := VRange; (* faulty assignment because the structure elements of the structured data typs differ regarding number and name *)
          
END_FUNCTION_BLOCK