====== Odvozené (uživatelské) datové typy ====== Odvozené typy jsou deklarovány pomocí textové konstrukce TYPE ... END_TYPE. Jména odvozených datových typů, jejich datové typy a jejich inicializační hodnoty jsou uvedeny v rámci této konstrukce. Odvozené datové typy se mohou používat spolu s elementárními datovými typy v deklaracích proměnných. Definice odvozeného datového typu je globální, tj. může být použita v kterékoliv části programu. Odvozený datový typ dědí vlastnosti typu, ze kterého byl odvozen. ===== Jednoduché odvozené (výčtové) typy ===== Deklarace výčtového typu dat určuje, že hodnota každého datového prvku tohoto typu použije pouze jednu z hodnot uvedených v příslušném seznamu identifikátorů. Výčtový seznam definuje tříděnou sadu vyjmenovaných hodnot, počínaje prvním identifikátorem v seznamu a konče posledním. Příklad: TYPE Traffic_light: (Red, Yellow, Green); Painting_color: (Red, Yellow, Green, Blue) := Blue; END_TYPE ===== Pojmenované hodnoty ===== Souvisí s jednoduchým výčtovým datovým typem, kde hodnoty výčtu identifikátorů nejsou známy uživatelem; tento typ má určené hodnoty prvků výčtu. Chcete-li povolit jedinečnou identifikaci při použití v určitém kontextu, mohou být pojmenované hodnoty kvalifikovány předponou skládající se z jejich přidruženého jména dat a hash znaku "#", podobně jako zadané literály. Příklad: TYPE Traffic_light: (Red, Yellow, Green); Painting_color: (Red, Yellow, Green, Blue) := Blue; END_TYPE VAR My_Traffic_light: Traffic_light; END_VAR IF My_Traffic_light = Traffic_light#Red THEN ... ===== Podinterval ===== Deklarace podintervalu určuje, že hodnota každého datového prvku tohoto typu může nabývat pouze hodnoty mezi a včetně specifikované horní a dolní mezí. Příklad: TYPE ANALOG_DATA: INT(-4095 .. 4095):= 0; END_TYPE ===== Datové typy pole ===== Pole je soubor datových prvků stejného datového typu. Základní a uživatelem definované datové typy, typy funkčních bloků a třídy mohou být použity jako typ prvku pole. Příklad: TYPE TArray1: ARRAY[0..9] OF INT := [1,2,3,4,5,6,7,8,9,10]; TArray2: ARRAY[1..2, 1..2] OF USINT := [11,12,21,22]; END_TYPE ===== Datový typ struktura ===== Deklarace typu struktura (STRUCT) uvádí, že tento typ dat bude obsahovat kolekci dílčích prvků uvedených typů, které mohou být přístupné pomocí uvedených jmen. Prvek strukturovaného datového typu musí být zastoupen dvěma nebo více identifikátory nebo polem odděleným '.'. První identifikátor představuje název strukturovaného prvku, následné identifikátory představují sekvence názvů prvků pro přístup k určitému datovému prvku ve struktuře dat. Základní a uživatelem definované datové typy, typy funkčních bloků a třídy mohou být použity jako typ prvku struktury. Struktury a pole lze libovolně kombinovat. Příklad: TYPE ANALOG_SIGNAL_RANGE: (BIPOLAR_10V, UNIPOLAR_10V); ANALOG_DATA: INT (-4095 .. 4095); ANALOG_CHANNEL_CONFIGURATION: STRUCT RANGE: ANALOG_SIGNAL_RANGE; MIN_SCALE: ANALOG_DATA; MAX_SCALE: ANALOG_DATA; END_STRUCT END_TYPE VAR MODULE_CONFIG: ANALOG_CHANNEL_CONFIGURATION; MODULE_8_CONF: ARRAY [1..8] OF ANALOG_CHANNEL_CONFIGURATION; END_VAR MODULE_CONFIG.MIN_SCALE:= -2047; MODULE_8_CONF[5].RANGE:= BIPOLAR_10V;