====== 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 [[cs:mervis-ide:35-help:035-software_basic:045-pou|programové organizační jednotky]] ([[:cs:mervis-ide:35-help:035-software_basic:045-pou:025-program|programu]], [[:cs:mervis-ide:35-help:035-software_basic:045-pou:015-fb|funkčního bloku]] nebo [[:cs:mervis-ide:35-help:035-software_basic:045-pou:005-function|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_: * VAR_INPUT pro vstupní proměnné * VAR_OUTPUT pro výstupní proměnné * VAR_IN_OUT pro vstupně/výstupní proměnné 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: [[:cs:mervis-ide:35-help:025-new_project:010-variable_definition|Definice proměnných v rámci projektu.]]