====== Definice proměnných ======
V rámci projektu existuje několik základních typů proměnných:
**Globální** - proměnné, jež se dají použít v programech v rámci jednoho projektu, při náležitém nastavení referencí též mezi projekty.
**Proměnné příslušné funkcím a funkčním blokům** - proměnné, jež náleží vždy určitému programu, funkci nebo funkčnímu bloku. V rámci dalšího členění můžeme proměnné rozdělit na vstupy, výstupy a lokální proměnné. Vstupy a výstupy mají oproti lokální proměnné tu vlastnost, že na ně lze připojit nějakou jinou proměnnou (globální, vstup/výstup FB, atd.).
**HW proměnné** - proměnné náležející konkrétnímu HW zařízení. Tyto proměnné nelze použít v programech, je nutné na ně namapovat globální proměnné a posléze v programech používat tyto globální proměnné. Smyslem je usnadnit přepojování proměnných v případě nutnosti přepojení vstupu nebo výstupu při jeho poškození.\\
===== Definice globálních proměnných =====
Proměnné si lze zakládat postupně pomocí funkce Vytvořit globální proměnnou, dostupné přes FUPLA editor, nebo si lze utvořit celý balík proměnných najednou pomocí ST. Oba dva postupy lze kombinovat, založením proměnné přes funkci ve schématu FUPLA se samozřejmě automaticky mění obsah ST programu, který proměnné definuje. Pojďme si nyní oba dva způsoby ukázat.
Ve FUPLA editoru si klikněte pravým tlačítkem do žebříku a zvolte možnost "Globální proměnné", "Vytvořit globální proměnnou".
{{:cs:mervis-ide:35-help:add_gv.png}}
Založte si následující proměnnou:
{{:cs:mervis-ide:35-help:add_gv2.png}}
Proměnná je vždy příslušná nějakému projektu. Jestliže ji chcete posléze použít v jiném projektu, je nutné u projektu uvést referenci na projekt, kterému je proměnná příslušná. Zmáčknutím OK jste vytvořili globální proměnnou. V projektu se automaticky vygeneroval adresář „Globals“ a v něm podprogram názvu generated. Když program otevřete, v editoru programu uvidíte svou proměnnou.
var_global
teplota: real;
end_var
V tomto programu se budou nadále automaticky generovat vámi vytvořené proměnné přes FUPLA editor. Proměnnou můžete samozřejmě vytvořit rovnou jednoduchou editací textu programu.
var_global
teplota, teplota_kancl: real;
end_var
Tímto jste vytvořili proměnnou teplota_kancl, po kompilaci si můžete ověřit její existenci přidáním do žebříku ve FUPLA editoru.
Jestliže chcete vytvořit program s definicí proměnných, rovnou postupujte následovně.
===== Založte nový program =====
{{:cs:mervis-ide:35-help:add_gv3.png}} {{:cs:mervis-ide:35-help:add_gv4.png}}
V tomto programu pak definujte globální proměnné pomocí ST.
V jednom projektu může být více programů, kde se definují globální proměnné - z hlediska funkce není původ proměnné důležitý.
===== Definice globálních proměnných „retain“ =====
Globální retain proměnné vytváříte podobným způsobem jako proměnné globální. Jedná se o proměnné se zálohovanou hodnotou. Vlastností retain by měly být vybaveny globální proměnné, do kterých se nezapisuje z programu, ale z uživatelského rozhraní - jsou to typicky nastavitelné parametry programu - požadované teploty, mezní hodnoty atd.
**Nastavením vlastnosti retain zapříčiníte, že i po restartu RT si budou proměnné zachovávat nastavenou hodnotu**. Je ale nutno mít na zřeteli, že proměnné retain zabírají paměť PLC a je třeba vhodně optimalizovat jejich počet.
V ST se provádí deklarace proměnných následovně:
var_global retain
teplota, teplota_kancl: real;
end_var
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. Znamená to, že uživatel 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.
Přemíra užívání RETAIN má vliv na výkon a využití prostředků. Proto deklarace RETAIN vždy pečlivě zvažte.\\