Zálohování proměnných

Patron Neuron Gate Unipi 1.1 Axon

Zařízení Unipi s Mervis OS umožňují zálohování proměnných a to více způsoby. V tomto článku bude popsáno jejich nastavení, místo ukládání, rizika a vhodné způsoby použití.

Ve výchozím stavu je zálohování proměnných nastaveno tak, že hodnoty všech proměnných (včetně těch s příznakem retain) jsou uloženy každé 3 hodiny, což je také nejkratší možný interval. Proměnné označené příznakem retain jsou mimo to zálohovány dle intervalu uložení retain proměnných, který je ve výchozím stavu nastaven na 5 sekund.


V mnoha případech není nutné periodicky ukládat všechny proměnné. Při potřebě zálohovat hodnoty, které obsluha nastavila během provozu, jako jsou časové programy, specifická nastavení apod., je užitečná záloha proměnných v reakci na spouštěcí proměnnou (BOOL), kdy může být periodické ukládání všech proměnných vypnuto a ukládá se pouze při vzniku požadavku.

Při zálohování pomocí spouštěcí proměnné je velmi důležité znát přibližný počet zápisů za den/měsíc a porovnat je s počtem zápisů periodického ukládání. Při vývoji programu je proto nutné porovnat, zda není k úložišti šetrnější označit vybrané proměnné příznakem retain a zálohovat je častěji, namísto časté zálohy všech proměnných.

Pokud je nutné některé hodnoty ukládat často, je vždy vhodné označit tyto proměnné příznakem retain. Proměnné s příznakem retain je možné zálohovat v intervalu od 1 sekundy až po 1 hodinu (dle nastavení). Zálohu retain není možné vypnout. Typicky se příznakem retain označují proměnné obsahující např. hodnoty čítačů provozních hodin, měřičů (elektroměry, průtokoměry) a podobné hodnoty, které je třeba zachovat při výpadku napájení nebo jiné neočekávané situaci.

Zálohování všech proměnných

Proměnné jsou zálohovány na systémovém úložišti, proto je důležité optimalizovat počet zápisů. V závislosti na požadavcích programu je vhodné nastavit co možná nejdelší interval ukládání proměnných.


1. Periodické zálohování

Nejkratší možná perioda ukládání je 3 hodiny, toto omezení je zde kvůli ochraně systémového úložiště.

Periodické ukládání je možné i zcela zakázat.

Maximální perioda ukládání je dána datovým typem time, což je 49d17h2m47s295ms.


2. Záloha v závislosti na události

Zálohu proměnných lze vyvolat i z programu pomocí “Spouštěcí proměnné” (BOOL). K uložení dochází při každé vzestupné hraně (přechod z FALSE na TRUE), ať už je periodické ukládání povoleno, či zakázáno.

Zálohování retain proměnných

Kromě zálohování všech proměnných je možné vybrané proměnné označit příznakem retain a zálohovat častěji, dle intervalu nastaveného v 'Konfigurace Retain'.

POZOR! Čím je interval ukládání kratší, tím dříve je dosaženo maximálního počtu zápisů do úložiště, což může vést k jeho nevratnému poškození!

Zálohování proměnných s příznakem retain nelze vypnout, nebo spouštět z programu, tak jako zálohování všech proměnných. Pokud však není definována ani jedna proměnná, nebo funkční blok obsahující proměnnou s tímto příznakem, nebude nic zálohováno. Nezávisí tedy jen na intervalu ukládání, ale také na objemu dat k zápisu, nebo-li na počtu proměnných a jejich datových typech.


Příznak retain

Vznikne-li potřeba hodnotu proměnné zálohovat častěji, například jako prevenci proti výpadku dodávky elektřiny, je nutné tyto proměnné označit příznakem retain. Typicky jsou takto zálohovány nasčítané nebo vypočtené hodnoty získané z připojených zařízení, nebo z programu.

Označení příznakem retain je možné při vytváření, nebo změně definice proměnné:

V jazyce ST je nutné proměnné vytvořit / přesunout do samostatné globální deklarace proměnných retain.

Nahrání sestavy a záloha proměnných

Při nahrání sestavy je vždy činnost programu zastavena a současně je spuštěna záloha všech proměnných. Díky tomu je možné zvolit, zda se má PLC spustit s výchozími hodnotami proměnných, které jsou nastaveny v sestavě Mervis IDE, nebo zda se mají všechny dostupné hodnoty ze zálohy obnovit.

Operace Hodnoty proměnných
Teplý restart Obnoveny ze zálohy v PLC
Studený restart Nastavení výchozích hodnot z IDE
Vymazat proměnné flash Vždy vynutí nastavení výchozích hodnot z IDE

Teplý restart znamená znovuspuštění programu s hodnotami, které byly v PLC těsně před nahráním sestavy.

Studený restart spustí PLC bez ohledu na jakékoliv uložené hodnoty. Veškeré hodnoty jsou při nahrání sestavy nastaveny dle výchozích hodnot.

Správné nastavení zálohování proměnných je individuální pro každé nasazení PLC, ale vždy nezbytné. Čím více promyšlené zálohování proměnných bude, tím méně bude systémové úložiště zatěžováno, což značně prodlouží jeho životnost.

Vypnuté zálohování proměnných

Jakékoli prodloužení intervalu ukládání sníží celkový objem zapisovaných dat, ale pokud to neovlivní činnost programu, je možné zálohování proměnných nepoužít vůbec.


Zálohování proměnných retain zcela vypnout nelze, ale pokud není definována ani jedna proměnná, nebo funkční blok obsahující proměnnou s příznakem retain, nebude nic zálohováno.

Zálohování všech proměnných je možné vypnout jednoduše, přímo v konfiguraci PLC v jeho vlastnostech:

Událostní zálohování proměnných

Níže je sepsáno několik příkladů použití zálohování všech proměnných bez periodického ukládání. Proměnné retain zde nejsou zmíněny, jelikož neumožňují zálohování v reakci na událost. Všechny následující příklady vycházejí z toho, že proměnné retain nejsou vůbec potřeba a interval jejich ukládání je nastaven na 1 hodinu. Nastavení zálohování retain však není podstatné, jelikož jejich použití vždy závisí na potřebách vycházejících z návrhu programu.

Sestava Mervis IDE vytvořená ve verzi 2.5.0, obsahující veškerou níže zmíněnou logiku, je dostupná ke stažení na tomto odkazu.

Záloha tlačítkem z HMI

Nejjednodušším případem zálohy v závislosti na událost je manuální záloha požadavkem z HMI. Požadavkem je myšleno kliknutí na tlačítko SAVE (digital setter), které je mapováno na interní proměnnou bloku pulseButton, jehož výstup je pulz o délce jednoho cyklu, připojený ke spouštěcí proměnné backupTrig.

POZOR! Pokud by záloha proměnných byla volána častěji než 8x denně, je již na zvážení, zda není vhodnější označit některé proměnné příznakem retain a ukládat tyto hodnoty periodicky dle definovaného intervalu.

V programu jsou definovány pouze proměnné a zmíněný blok pulseButton:

Interní logika bloku pulseButton je znázorněna a vysvětlena níže:

Popis bloku:

Lokální proměnná button je připojen na CLK vstup bloku R-TRIG. Blok R_TRIG na základě náběžné hrany na vstupu CLK nastaví na výstup Q stav TRUE v délce jednoho programového cyklu. Blok BD13 a blok F_TRIG slouží pro zpoždění signálu o nastavený čas (pushTime). Po uplynutí nastaveného času se pomocí bloku SEL nastaví lokální proměnná button do stavu FALSE.

Tento blok se ovládá jeho interní proměnnou 'button', jejíž hodnotu lze změnit pouze z HMI!

Záloha při změně hodnoty

Další variantou je záloha v reakci na změnu hodnoty. Pokud dojde ke změně hodnoty (třeba v HMI), automaticky se vyvolá záloha proměnných. Výhodou tohoto řešení je, že se eliminuje chyba lidského faktoru, protože požadavek zálohy proměnných vznikne současně se změnou hodnoty a nemůže se stát, že uživatel zapomene změny potvrdit.

V programu je pouze sledovaná proměnná a funkční blok changeChecker, jehož výstup je připojený ke spouštěcí proměnné backupTrig:

Interní logika bloku changeChecker je velmi jednoduchá:

Popis bloku:

Blok má jeden vstup, jeden výstup a skládá se z funkcí NE, SEL a lokální proměnné TEMP.

Funkce NE porovnává vstup IN a proměnnou TEMP a pokud jsou rozdílné, nastaví svůj výstup do stavu TRUE. Výstup funkce NE je přiveden na výstup OUT bloku a vstup G funkce SEL, čímž se zapíše vstup IN do proměnné TEMP. Tím je docíleno, že jsou si hodnoty IN a TEMP opět rovny a v dalším cyklu programu již bude na výstupu bloku opět hodnota FALSE.

Z toho plyne, že pokud ke změně hodnoty IN nedochází v každém cyklu, což by mělo za následek trvalé přepnutí výstupu do stavu TRUE, tak je výstup pulzní s pulzem délky jednoho cyklu programu.

Záloha při více akcích

Nevýhodou předchozího řešení je, že pokud vznikne potřeba sledovat více než jednu hodnotu, nebo je nutné hodnotu měnit vícekrát, řešení již není vhodné a je nutné logiku rozšířit.

Obě výše zmíněné varianty lze využít současně a jejich výstupy připojit na vstupy funkce OR. Výstup funkce OR je připojen do vstupu IN bloku backupTrigger, který zajišťuje spouštění zálohy po uplynutí nastaveného intervalu zpoždění od posledního pulzu na vstupu IN. Pokud mezitím na vstup IN dorazí další pulz, interval se resetuje na výchozí hodnotu zpoždění.

Program s libovolným počtem bloků pulseButton, changeChecker a dalších, je doplněn o funkci OR jakožto koncentrátorů pulzů a zmiňovaný blok backupTrigger:

Interní logika bloku backupTrigger je znázorněna a vysvětlena níže:

Popis bloku:

Funkční blok backupTrigger plní funkci filtru žádostí o zálohu proměnných, aby se předešlo příliš častému, nebo zbytečnému zápisu na úložiště. Výstup tohoto bloku je určen k připojení ke Spouštěcí proměnné zálohy všech proměnných.

Blok má jeden vstup IN, který vyžaduje pulzní řízení, tzn. nesmí být trvale sepnut v TRUE. Pokud je nutné takovou proměnnou, výstup bloku/funkce, či fyzický vstup připojit ke vstupu IN, je vhodné propojení doplnit o blok R_TRIG.

Vstup DELAY určuje zpoždění pro běžné událostní ukládání (např. 5m) od posledního pulzu na vstupech IN. Vstup saveDELAY zase slouží jako nouzové sepnutí výstupu, pokud pulzy na vstupy IN chodí častěji, než je nastavené zpoždění DELAY.

Celá logika je složena z bloků BD12 a BD13 pro zmíněná zpoždění a pro jistotu také z R_TRIG a F_TRIG, aby bylo zaručeno, že výstupem bude vždy pulz.