Deklaration eines direkt abgeleiteten Datentyps in ST

Syntax
TYPE
   name_1 : data-type (* optional_begin *) {SIZE := value} (* optional_end *) := initial-value;
   name_2 : ARRAY [x..y] OF data-type := [initial-value_1, initial-value_2, .., initial-value_n];
   ... 
END_TYPE
Bedeutung

Deklaration eines oder mehrerer direkt →abgeleiteter Datentypen, wobei name_1, name_2 usw. →IEC-Bezeichner sein müssen.
Mit Hilfe solcher Deklarationen können Sie neue typspezifische Initialisierungswerte vorgeben. Wenn Sie z.B. INT-Variablen mit dem Initialisierungswert 5 in →Zuweisungen benötigen, deklarieren Sie einen abgeleiteten Datentyp (siehe Beispiel myINT unten) und verwenden Sie dann myINT als Datentyp für die Variablen, die in den Zuweisungen verwendet werden.

Diese Deklaration ist innerhalb der Deklaration eines anwenderdefinierten Datentyps (TYPE ... END_TYPE) möglich.
Der →Basistyp (data-type) des abgeleiteten Datentyps muss ein elementarer oder anwenderdefinierter Datentyp sein (siehe "Unterstützte Datentypen").

Mit dem optionalen →Initialisierungswert := initial-value weisen Sie dem Datentyp einen Wert zu. Dieser Wert hat Vorrang, d.h. der Initialisierungswert des Basistyps wird "überschrieben". Falls kein Initialisierungswert für den abgeleiteten Datentyp definiert ist, gilt der Initialisierungswert des Basistyps. Mit
:= beginnen die Initialisierungsangaben. Die erforderliche Initialisierungsangaben richten sich nach dem Basistyp. So weisen Sie mit := initial-value einen Wert bei einem elementaren Basistyp zu. Für einen Array-Datentyp oder einen strukturierten Datentyp als Basistyp benötigen Sie jedoch etwas andere Initialisierungsangaben. Informieren Sie sich bei der Beschreibung des entsprechenden Datentyps über die erforderlich Syntax für die Initialisierung.

Einschränkungen

  • Sie können für data-type keine →Referenz-Typen (REF_TO ...), keine →Funktionsbausteine und keine →Interfaces angeben.

  • Abgeleitete Datentypen können nur bis max. 10 Ebenen verschachtelt werden. Rekursionen sind dabei nicht zulässig.

Das optionale Attribut SIZE für die Bitgröße ist nur erlaubt, falls es sich beim Basistyp um bestimmte elementare Datentypen handelt. Der erlaubte Bereich hängt von diesem Datentyp ab. Mit diesem Attribut definieren Sie die Bits, die zwischen IO-Segment und Variable kopiert werden (siehe folgendes Beispiel für Datentyp bit5).

Erweiterung zur IEC-Norm

Das Attribut SIZE ist eine Erweiterung zur →IEC-Norm.

 

Das Attribut SIZE ist für diese elementaren Datentypen erlaubt:

Der dafür erlaubte Bereich ist:

BOOL

1 Bit

SINT, USINT, BYTE

1 bis 8 Bit

INT, UINT, WORD

1 bis 16 Bit

DINT, UDINT, DWORD

1 bis 32 Bit

LINT, ULINT, LWORD

1 bis 64 Bit

Das Attribut SIZE ist ebenfalls für einen direkt abgeleiteten Datentyp erlaubt, sofern dessen Basistyp einer der oben angeführten Datentypen ist (siehe folgendes Beispiel für Datentyp myBit5_v1). Direkte Ableitungen von einem Datentypen mit Attribut SIZE sind ohne und mit Attribut SIZE möglich (siehe folgende Beispiele für Datentypen myBit5_v2 und myBit3).

(Info) Ein direkt abgeleiteter Datentyp darf dort verwenden, wo auch der elementare Basistyp verwendet werden darf. Beispiel: Der Datentyp myINT aus dem folgenden Beispiel ist als Eingangsdatentyp für den ADD-Baustein zulässig, jedoch nicht der Datentyp typeScalings.

Neuron Power Engineer bietet außerdem die Möglichkeit, zusätzliche Daten bei der Deklaration anzugeben. Siehe "Beschreibung, Kommentar, JSON-String oder Typ für Variablen oder Datentypen angeben" für Details.

Beispiel
TYPE
   myINT        : INT := 5;       (* data type that is derived from the elementary data type 'INT'. It is initialized with value '5'. *)
   Freq         : REAL := 50.0;   (* data type that is derived from the elementary data type 'REAL'. It is initialized with value '50.0'. *)
   typeScalings : ARRAY [1..5] OF myINT := [2(3), 2(), 4];
       (* declaring a data type with 5 elements of 'myINT' - the first 2 array elements are initialized with '3', *)
       (* the next 2 array elements with initial value '5' of 'myINT', the last array element with '4'            *)
   RangeConf    : RangeS := (scaleMin := -5, scaleMax := 5);
       (* data type that is derived from the structured data type 'RangeS'. There are 3 structure elements for 'RangeS'. *)
       (* The elements 'scaleMin' and 'scaleMax' are initialized. These values have priority for 'RangeConf'.            *)
       (* As the element 'signal' is not initialized here, the initial value defined at 'RangeS' is valid for it. *)
END_TYPE

Beispiel: Definition von Datentypen mit und ohne Attribut "SIZE"

TYPE
  bit5      : INT    { SIZE := 5 };  (* 5 bits will be copied between IO-segment and variable. *)
  myInt     : INT;
  myBit5_v1 : myInt  { SIZE := 5 };  (* Similar to 'bit5': 5 bits will be copied. *)
  myBit5_v2 : bit5;                  (* Similar to 'bit5': 5 bits will be copied. *)
  myBit2    : myInt  { SIZE := 2 };  (* 2 bits will be copied between IO-segment and variable. *)
  myBit3    : myBit2 { SIZE := 3 };  (* 3 bits will be copied between IO-segment and variable. *)
END_TYPE
 
... 
 
VAR_GLOBAL
  Status AT %IB1.2.0 : bit5; (* usage of data type 'bit5' *)
  ...
END_VAR