Proměnné

Proměnné se používají pro identifikaci prvků, jejichž obsah se mění. Příkladem jsou vstupy/výstupy nebo přístup k paměti. Proměnná může být deklarována elementárním nebo odvozeným (uživatelským) datovým typem. Součástí její deklarace může být údaj o počá­teční hodnotě. Každá deklarace programové organizační jednotky (programu, funkčního bloku nebo funkce) by měla v obsahovat nejméně jednu deklarační část, která definuje proměnné používané v rámci POU (Program Organisation Unit, tedy části kódu, jako je definice programu, funkce, procedury atd.).

Deklarace začíná klíčovým slo­vem VAR (pro vnitřní proměnné POU), nebo klíčovým slovem, které začíná VAR_:

Deklarace končí klíčovým slovem END_VAR. Proměnné platí vždy pouze uvnitř té POU, v níž jsou deklarovány (jsou zde lokální), a nejsou přístupné pro ostatní POU. Výjimkou jsou proměnné pro předávání parametrů mezi POU a jejím okolím, a to vstupní proměnné, do kterých lze z vnějšku zapisovat (VAR_INPUT), výstupní proměnné (VAR_OUTPUT), které lze z vnějšku číst, a proměnné pro obousměrný přístup (VAR_IN_OUT).

Proměnné deklarované jako VAR mají vyhrazeno pevné místo v paměti a mají dlou­hodobou platnost. Skončí-li aktivace POU, pamatují si poslední hodnotu, která je pak použita jako výchozí při opětovné aktivaci POU.

Existují ale i proměnné s všeobecnou (glo­bální) platností VAR_GLOBAL. Jsou deklarovány vně POU (obvykle před programem) a jsou dostupné pro všechny POU v programu. Za klíčovým slovem VAR_GLOBAL může být ještě uveden kvalifikátor RETAIN (tedy VAR_GLOBAL RETAIN), který označuje zálohované proměnné, nebo CONSTANT pro označení konstantního obsahu proměnné, tedy pro deklaraci konstanty.

Příklad:

VAR_GLOBAL RETAIN 
GlobalniBit BOOL; 
GlobalniBajt BYTE := 10; 
END_VAR

V uvedeném příkladu jsou obě proměnné deklarovány jako globální a retain. Po zapnutí (horkém restartu) se obnovuje jejich poslední obsah, který měly těsně před vypnutím. Bitová (booleovská) paměť GlobalniBit není iniciována, zatímco proměnná GlobalniBajt je po prvním zapnutí a po studeném restartu nastavena na hodnotu 10.

Každá proměnná s flagem RETAIN je po každém komunikačním cyklu (v případě více tasků platí pro každý task) překopírována do RETAIN oblasti. Jde o speciální část paměť, která si uchovává obsah i při výpadku napájení. V případě warm-restartů (např. výpadek napájení) se před spuštěním výpočtu hodnoty RETAIN proměnných inicializují na hodnoty uložené v RETAIN oblasti. Pokud je PLC resetováno v módu cold-restartu, tak se i RETAIN proměnné inicializují na své základní hodnoty ze zdrojových kódů programu. RETAIN proměnné lze využít například na čítače provozních hodin a podobné veličiny, které je třeba zachovat při výpadku napájení nebo jiné manipulaci. U kombinací NON_RETAIN a RETAIN vnořených typů vždy platí nejvyšší flag. Uživatel tedy může přebít nastavení typů a u konkrétních proměnných nastavit RETAIN nebo NON_RETAIN. V takovém případě pak již nezáleží, jakým způsobem jsou nastaveny vnořené položky. Vše se stává RETAIN, popřípadě NON_RETAIN.

Pozn.: kromě proměnných a typů zavedených v uživatelském programu není doporučeno explicitně ošetřovat typy z knihoven. Pokud pro správnou (nebo domněle správnou) funkci je potřeba něco takového dělat, je lepší si ujasnit s autorem typu, jak je jeho používání myšleno, případně ho tím upozornit na chybu. Přemíra užívání RETAIN má vliv na výkon a využití prostředků a měla by být vždy pečlivě uvážena.

Podobnou vlastnost mohou mít proměnné deklarované jako VAR_EXTERNAL, které pocházejí z externího zdroje.

Příklad 2:

Definice proměnných v rámci projektu.