Pro přehlednost jsme všechny důležité údaje dali na obrazovku HMI, aby vše bylo srozumitelné hlavně začínajícím uživatelům a programátorům.
Trochu vysvětlení:
Za každý týden zaznamenáme dobu chodu něčeho, třeba čerpadla, v minutách (eventuálně v hodinách) a tu uložíme do patřičného wordu v datovém bloku. Další týden do dalšího wordu. Přímo příklad pro nepřímou adresaci, ale my to uděláme jinak. Úloha jde samozřejmě řešit různými způsoby, každý programátor má to svoje, ale to nevadí.
První řádek systémové minuty 0–59 a aktuální počet minut nebo hodin. Jedná se o 16-bitové čísla, proto jsou ve výsledku jen celé hodiny.
Druhý řádek. Den v týdnu. V systémovém čase začíná týden nedělí a ta má označení 1 a tak dále až do soboty což je 7.
Třetí řádek je aktuální zaznamenaný týden podle kalendáře.
Čtvrtý řádek doba chodu stroje za 36. a 37. týden.
Tlačítko OFF/ON není na nic.
Abychom nemuseli čekat vždy celý týden, můžeme dobu chodu upravit z HMI, stejně jako aktuální týden.
A jdeme na to. Den v týdnu je úterý a my si jej z VAT tabulky za chvilku změníme na pondělí, tedy v pondělí po půlnoci se zapíše počet ujetých hodin do DB, posune se číslo týdne (nyní 35) a vynuluje počet minut (hodin).
Takto. Týden je již 36. a zapsán počet minut 2353. Čítač minut vynulován.
Minuty jsme uměle posunuli například na 1234, což když si vypočítáte je 20 hodin a do další hodiny zbývá 26 minut. A počkáme na další pondělí.
Je to tam. V pondělí ráno po půlnoci se počet minut zapsal da dalšího wordu a čítač týdne posunul na další týden.
Než si ukážeme jak jsme to udělali, tak v PLC programu nejsou řešeny limity čítače týdne mezi 1 .. 52 a není ošetřeno vypnutí stroje přes víkend a zapnutí třeba v pondělí ráno v šest a taky několik dalších detailů. To jsou ale drobnosti, které si ve skutečné aplikaci každý dořeší.
A jak jsme to tedy udělali?
Nejprve vytvoříme datový blok DB18 s prostorem pro záznam systémového času ve formátu DTL a několik pomocných proměnných.
Dále datový blok DB22 který má pole padesáti dvou proměnných týden pro uložení dat a týdenhodin pro nějaké pokusy nebo pro přepočet minut na hodiny za každý týden.
Asi takto, každý index za proměnnou WEEK udává číslo týdne od 1 do 52 týdnů. Tedy v proměnné například WEEK[12] bude počet odjetých minut za celý dvanáctý týden.
A tak dále.
Celý prográmek má jen 5 segmentů:
V prvním čteme jednou za sekundu systémový čas s pomocí systémové funkce RD_SYS_T a uložíme jej do našeho DB18 ve formátu DTL.
Ve druhém pak počítáme minuty ze systémových minut které jsou neustále v rozmezí 0..59. Čítač těchto minut resetujeme v pondělí při zápisu doby za uplynulý týden.
Klikněte na obrázek pro zvětšení
Třetí segment je jen paměť pro porovnávání počtu minut v předešlém segmentu.
Čtvrtý sleduje den v týdnu a pokud nastane dvojka, což je pondělí, tak vygeneruje impuls, kterým posune čítač týdne o jeden dopředu, zapíše počet minut za uplynulý týden a vynuluje potřebné proměnné.
Klikněte na obrázek pro zvětšení
Pátý, nejzajímavější segment. Pokud jste četli a zkoušeli minulý díl tohoto našeho seriálu o programování v TIA portal, který se věnoval přesunu proměnných s pomocí systémových funkcí, tak jedna z nich byla tahle, ale opačná, FieldRead. My používáme FieldWrite, která zapíše proměnnou na vstupu VALUE do DB na výstupu MEMBER, ale do pozice (wordu) hodnoty na vstupu INDEX. Tam máme aktuální týden a proměnnou zapíšeme vždy do místa pro patřičný týden. Funkce podobná jako u nepřímého adresování, ale jednodušší zápis. Ideální pro začátečníky. Ostatní nepotřebuje vysvětlení.
Klikněte na obrázek pro zvětšení
Vše si nasimulujeme s pomocí VAT tabulky a HMI, abychom nemuseli čekat týden a týden.
Klikněte na obrázek pro zvětšení
Snad srozumitelně jsme to pro vás připravili na videoukázce zde:
https://www.youtube.com/watch?v=TBPjDBwnB_U&feature=youtube
Závěr:
Trochu nás k tomuto dílu inspirovala diskuse od jednoho čtenáře na webu zde, který něco podobného potřeboval vyřešit. Pokud si prostudujete bezva odkaz, který tam přidal čtenář DEATHER, tak z něj šestý příklad by šel taky částečně využít.
Jaroslav Blažek
Doplňující odkazy k článku:
Jak měřit čas v PLC na supportu Siemens je zde
Nový systémový manuál S7-1200 z 08/2018 je tady.
TIA Portal pro Simatic S7-1200/1500, více tady.