Na ukládání a hlavně zachování dat na MMC nebo-li Micro Memory Card, je obecně hodně dotazů na fóru, takže ukázka jak na to.
Nejprve je vhodné si připomenout, jak je paměť v PLC Simatic rozdělena. Tohle je poměrně nejsrozumitelnější ukázka rozdělení paměťového prostoru v PLC. Pokud ale neprovedete nějaké úkony popsané dále a není nějaká odchylka v PLC programu, nedá se o data přijít, v PLC budou vždy k dispozici. Takže kdo nic neřeší a nemá s tím problém, tak pro něj budou následující řádky jen zajímavé. Taky jsem ale nevěděl úplně přesně jak zálohování funguje, takže stálo za to to zkusit. |
Pro náš pokus si v PLC s MMC (konkrétně CPU313) vytvoříme jeden datový blok DB31 pro pět proměnných, na kterém si nejprve ukážeme některé typické situace ztráty dat, a poté možnost jejich zálohování. |
Deset bytes a 5x integer s definovanou inicializační hodnotou podle pořadí, to je náš DB31. |
Většinou jsou po opětovném zapnutí v DB mnohokrát jiná čísla jen proto, že si je při startu nebo někde v programu přepisujeme. Takže my si do DB31 vložíme nová data přes VAT tabulku a příkaz "Modify value". Inicializační čísla 1-5 byla v DB po prvním překopírování do PLC. Nyní po jakémkoliv zapnutí a vypnutí PLC, nebo přepsání HW konfigurace, budou stále v DB čísla 11 - 15, tedy naše uložená data. Tohle pro většinu aplikací stačí a pokud neprovedeme nějaký "Clear reset", nebo překopírování celého datového bloku, tak vše bude OK. Typický příklad je, že čísla v DB slouží jako parametry pro nějakou funkci (PID regulátor) a nastaví se například z OP panelu. |
Jestliže ale překopírujeme do PLC i náš datový blok, nebo třeba celý program, máme po datech. Máme-li v DB konečné nastavení, je vhodné jej překopírovat z PLC do PC, abychom jej měli s aktuálními daty. Pokud se potom potřebujeme vrátit zpět k inicializačním hodnotám, musíme datový blok znovu inicializovat, a teprve poté jej přenést znovu do PLC. |
Stejný případ ztráty dat nastane, jestliže provedeme přes Step7 v menu "PLC" -> "Diagnostic/Setting" -> "Clear/Reset". Takže pozor na to. |
Formátování MMC karty. Někde jsem se dokonce dočetl, že je vhodné provádět vždy před přepsáním programu atp. Takže ne, jen uvedené situace a jejich signalizace vyžadují reset MMC. Tohle je taky věc mnohdy nejasná a s rozporuplnými názory. |
Teď se dostanem k záloze dat. Pomocí systémové funkce SFC82 vytvoříme na MMC datový blok s daty, které potřebujeme zachovat. Je nutno ale respektovat několik pravidel. Celá funkce i následujíci funkce (SFC83,84) přistupují k datům na MMC kartě, což chvíli trvá, a nelze ji tedy vyvolávat v programu cyklicky, ale jen jednou. K tomu slouží M30.0 který se nastaví pouze v jednom cyklu na "H" a následně se vykoná funkce SFC82. Datový blok se vygeneruje pod číslem v MW34, tedy jako DB32. LOW_LIMIT určuje nejnižší číslo DB který se bude generovat po opětovném vyvolání funkce a UP_LIMIT nejvyšší číslo DB. To znamená, že je datový blok vygeneruje jen jednou a pokud už existuje vygeneruje se další v nastaveném rozsahu. Jestliže jsou čísla v limitech stejná, po opětovném spuštění funkce se už nic nestane, neboť jeden DB již je vygenerován. My si dvojnásobným spuštěním SFC82 vygenerujeme dva datové bloky, DB33 a DB34. Limitní hodnoty jsou v hexa, takže 20h=32. COUT a ATTRIB jsou popsány detailně v helpu, pro pochopení funkce nejsou důležité. SRCBLK klasický zápis zdroje dat, které se "vrhnou" do generovaného datového bloku. Tedy náš DB31 a první dvě proměnné. Jediná možnost jak se nyní vygenerovaného datového bloku zbavit, je přepojit se on-line do CPU a normálně jej smazat.
|
Funkci SFC82 jsme spustili dvakrát pro vygenerování dvou datových bloků. Tohle je ukázka z on-line obsahu CPU, vidíme nové DB32 a DB33. Jen tady je můžeme, pokud potřebujeme, vymazat. Stává se to, když se spleteme a spustíme SFC82 v nevhodný okamžik. |
Pro zápis a čtení platí, že je nutné používat systémové funkce SFC83 (čtení) a SFC84 (zápis). Opět se volají jen jednou, stejně jako SFC82. Protože mám jen jedno "tlačítko" pro čtení/zápis (M30.2), tak pomocí M30.4 přepínáme jakou funkci budem volat. |
Po jednom vyvolání funkce SFC83 se překopírují do DB31 čtyři bytes z DB33. Zápis do DB se provádí obdobným způsobem.
Data z těchto DB, DB32 a DB33 už nevymažete z PLC žádným běžným způsobem. Takže pokud potřebujete uchovat recepty nebo podobné věci, je tohle jedna z cest. Jen je nutno si řádně rozmyslet a naprogramovat přesný postup volání funkcí v PLC programu.
|
Jaroslav Blažek
Doplňující odkazy k článku:
Částečný popis ukládání dat na MMC kartu, příklad: http://support.automation.siemens.com/WW/view/en/15261720
Něco o kódu chyby při volání SFC82: http://support.automation.siemens.com/WW/view/en/16626212
Recepty a MMC karta, příklad: http://support.automation.siemens.com/WW/view/en/15261408