Aktuální vydání

celé číslo

07

2020

Řízení distribučních soustav a chytrá města

Měření a monitorování prostředí v budovách a venkovním prostředí

celé číslo

Esperanto programátorů PLC: programování podle normy IEC/EN 61131-3 (část 5)

Původním záměrem autora tohoto výukového seriálu bylo vysvětlit programování PLC na souboru řešených příkladů a vystačit s minimem teorie a popisných pasáží. Po diskusích se ukázalo, že je účelné o normě přece jenom něco sdělit. Poučení o normě nakonec zaplnilo čtyři části seriálu. Nyní konečně začíná část s příklady programů zaměřená na praxi. Jako první bude použit jazyk kontaktních schémat (LD). Výklad začíná nejjednoduššími příklady logických úloh. Na nich jsou současně vysvětleny základy teorie kombinační logiky. Pro popis logických vztahů ale není použita symbolika Booleovy algebry, obvyklá v učebnicích logiky, ale logické výrazy v syntaxi jazyka strukturovaného textu (ST). Zápis je možná méně přehledný a trochu delší, ale přirozeně seznamuje s nejdůležitějšími částmi jazyka ST.

Doporučená literatura

Seznam doporučené literatury je obvykle umístěn na konci seriálu. Protože touto částí končí výkladový oddíl seriálu a začíná prakticky zaměřený úsek s příklady a úlohami, je účelné zařadit seznam literatury právě nyní, aby si jej čtenáři prostudovali ještě před samostatnou prací s příklady a úlohami 

Rozhraní mezi procesem a programem

Dříve, než programátor začne tvořit program PLC, je nutné vyřešit instrumentaci řízeného objektu. To znamená navrhnout konfiguraci PLC, který typ PLC bude použit a s jakou konfigurací modulů, popř. v jaké topologii budou uspořádány jednotlivé PLC v distribuovaném systému a jak spolu budou komunikovat. Je třeba rozhodnout to, které signály přístrojového vybavení řízeného objektu (vstupní a výstupní signály) budou připojeny ke svorkám PLC (popř. kterého), které ke svorkám přídavných modulů, které ke svorkám modulů vzdálených vstupů a výstupů a které budou připojeny prostřednictvím sériové linky v rámci použité průmyslové sběrnice. Dále je nutné přesně určit, které proměnné budou odpovídat jednotlivým signálům, jak se budou jmenovat a jakého budou typu. Toto přiřazení je specifické pro každou úlohu. Závisí na typu použitého programovatelného automatu, na konfiguraci jeho modulů a na konkrétní formě kabeláže. Teprve nyní má smysl vymezit proměnné programu a vytvářet program PLC.

Čtenáři, kteří mohou pracovat s reálným PLC, mohou takto vytvořit své individuální rozhraní mezi PLC a programem a jeho prostřednictvím vyhodnocovat např. tlačítka připojená na vstupy PLC a ovládat signálky na jeho výstupech. Pro čtenáře, kteří pracují s virtuálním PLC (např. v systému Mosaic), lze vytvořit rozhraní mezi programem virtuálního PLC a virtuálním procesem formou bloku deklarací globálních proměnných (obr. 15), umístěných před programovou organizační jednotku (POU) typu program. Tyto proměnné jsou pak viditelné v celém programu a není třeba se starat o konkrétní řízený proces. Hodnoty vstupních proměnných lze poté nastavovat při simulaci běhu programu virtuálního PLC. V prvních příkladech se bude pracovat pouze s dvouhodnotovými proměnnými (typu BOOL). Proto jsou na obr. 15 deklarovány pouze proměnné tohoto typu. Až bude v dalších příkladech nutné použít číselné proměnné, bude u nich uvedeno, jak doplnit jejich deklarace.  

Tradiční vypínače a základy logiky

Většina uváděných příkladů je zaměřena na tzv. chytré instalace v budovách. Nejprve budou uvažovány tradičně řešené vypínače, které se používají v obvyklé elektroinstalaci – jednoduché vypínače s jedním spínacím kontaktem (nikoliv schodišťové přepínače). Provedení zajišťuje dvoustavovou mechanickou paměť, takže kontakt je buď trvale sepnut, nebo trvale rozepnut. Předpokládejme, že spínací kontakt každého z vypínačů je připojen na vstup programovatelného automatu, jeho přídavného modulu nebo se jeho stav jiným způsobem kopíruje do odpovídající proměnné programu PLC (např. prostřednictvím modulů sériové linky).

V deklaracích globálních proměnných jsou kontaktům vypínačů přiřazeny např. proměnné vyp_1 vyp_2. Tradiční dvoupolohové vypínače s mechanickou pamětí budou používány v první sérii příkladů s vědomím, že v praxi inteligentní instalace se obvykle používá jiný typ vypínačů – mžikových se dvěma nestabilními polohami. Důvodem je snazší výklad základních kombinačních logických funkcí. Prozatím budou uvažovány pouze dvouhodnotové proměnné (typu BOOL) pro stavy vstupních proměnných (kontaktů) nebo pro výstupní proměnné (např. stavy obyčejných žárovek, relé nebo jiných dvoustavových svítidel). V případě potřeby je možné deklarovat vnitřní dvouhodnotové proměnné. Každá proměnná typu BOOL nese dvouhodnotovou informaci ve významu: sepnuto – nesepnuto, svítí – nesvítí, aktivní – neaktivní, pravda – nepravda, logická 1 – logická 0, TRUE – FALSE. Třetí možnost je vyloučena. Proměnné typu BOOL lze chápat jako výroky, např.: kontakt kon_1 je sepnut, žárovka zar_1 svítí, nebo rovnocenně: „je pravda, že kontakt kon_1 je sepnut“, „je pravda, že žárovka zar_1 svítí“. Pravdivost výroku je obvykle vyjadřována dvojkovými číslicemi 1 a 0 nebo slovně. Pravdivému výroku odpovídá logická 1 (TRUE), nepravdivému výroku odpovídá logická 0 (FALSE). Pro snadnou orientaci předpokládejme, že vstupní proměnné mají shodná jména jako odpovídající ovládací prvky a rovněž výstupní proměnné jsou pojmenovány shodně s odpovídajícími výstupními prvky.

V zájmu přehlednosti a úspory plochy jsou programy v jazyce LD (kontaktní schémata) pro první sadu příkladů uvedeny na obr. 16 („vypreparovány“ z obrazovky). Zeleným písmem jsou označeny komentáře k obvodům (zde ve významu realizované funkce, např. sledování, negace, logický součin). Nad ním je hnědým písmem uvedeno čtyřmístné pořadové číslo obvodu. Na ně se odvolává text řešení příkladu nebo úlohy. 

Příklad 1: Rozsvícení a zhasnutí světla, funkce sledování

Je požadováno, aby žárovka zar_1 sledovala stav kontaktu vypínače vyp_1, tj. aby svítila při sepnutém kontaktu a byla zhasnutá při rozepnutém kontaktu.

Řešení: Zadanou úlohu řeší první obvod (větev, příčka kontaktního schématu 0001) programu z obr. 16. Program je názorný a je obdobou tradičního elektrického schématu. Spínací kontakt symbolizuje dvojice svislých čárek. Výstup je zde chápán jako cívka relé, jejímž symbolem je dvojice závorek. Jméno proměnné se zapisuje nad symbolem (vyp_1 nebo zar_1). Pod symbolem může být (ale nemusí) uveden komentář k proměnné.

Ověření: Zapsaný program (v systému Mosaic) se přeloží, nahraje do paměti virtuálního PLC a spustí se ([2], [5]). Správné fungování programu se ověří tak, že se kurzor umístí na symbol kontaktu vypínače vyp_1 a kliknutím se zapne nebo vypne (střídavě se mění jeho stav). Symbol svítidla (žárovky) zar_1 sleduje stav kontaktu vypínače. Současně se vodivá cesta zviditelní zesílenou čarou. Při použití reálného PLC se postupuje obdobně, pouze se pracuje s fyzickým kontaktem. Obdobný postup je předpokládán i v dalších příkladech a úlohách.

Příklad 2: Opačná funkce – negace, NOT

Předpokládejme opačnou funkci k předchozímu příkladu – svítidlo má sledovat opačnou (negovanou) funkci vypínače. Při rozepnutém kontaktu má svítit, při sepnutém nikoliv. Takovou úlohu je třeba řešit, je-li např. vypínač namontován obráceně a tuto chybu je třeba napravit v programu, bez „použití šroubováku“.

Řešení 1: Zadanou úlohu řeší obvod 0002 programu (obr. 16). Svítidlo zar_2 je ovládáno rozpínacím kontaktem vypínače vyp_1. Symbol rozpínacího kontaktu obsahuje mezi svislými čárkami znak lomítka.

Řešení 2: Rovnocennou alternativu představuje obvod 0003 programu. Zde je použit spínací kontakt vyp_1, ale výstupní cívka zar_3 je nastavována opačně k funkci kontaktu – nazývá se negovaná cívka. Její symbol obsahuje mezi závorkami znak lomítka.

Logická negace

Cívky zar_2 zar_3 svítí opačně ke stavu kontaktu vyp_1. Z hlediska logiky se takto realizuje funkce negace (nebo též inverze, záporu, popření, logického doplňku, komplementu). Výstupní proměnné zar_2 zar_3 jsou ke vstupní proměnné vyp_1 ve vztahu negace. Zatímco v češtině se vztah negace obvykle vyjadřuje částicí ne nebo slovním spojením není pravda, že, v angličtině odpovídá popření částice „not“, proto je i vztah negace uváděn jako funkce či operátor NOT. Slovně je možné stav svítidla pro oba případy popsat výrokem:

zar _2 svítí, jestliže není pravda, že je sepnut kontakt vypínače vyp_1“

zar _3 svítí, jestliže není pravda, že je sepnut kontakt vypínače vyp_1“

V jazyku strukturovaného textu (ST) situaci popisují logické výrazy:

zar_2 := NOT vyp_1;

zar_3 := NOT vyp_1;

Upozornění

Je třeba upozornit na „logický mateník“, který souvisí s programováním PLC v jazyku kontaktních schémat. Při tradičním řešení instalace by byl pro funkci negace použit skutečný rozpínací kontakt, který lze získat např. jako součást schodišťového vypínače (přepínače), a jeho vývod na schématu zapojení by byl pojmenován jako negovaná proměnná. Na vstupy PLC jsou však připojovány (téměř výhradně) spínací kontakty – mnohé ovládací prvky ani jiné nemají. Na obr. 16 (v obvodu 0002) je proto uvedeno jméno vyp_1, které odpovídá spínacímu kontaktu skutečně přivedenému na vstup systému. Při jeho zpracování programem je ale přečtena jeho opačná (negovaná) hodnota, což je graficky znázorněno lomítkem v symbolu kontaktu. Proto se již nepoužívá jméno negované proměnné, např. NOT vyp_1. Podobně je v obvodu 0003 cívka zar_3 nastavována na negovanou hodnotu výsledku a její stav je pak již beze změny převeden na výstupní svorky.

Dvojitá negace

Pozornost si zaslouží obvod 0004 (obr. 16), ve kterém negace kontaktu vypínače vyp_1 ovládá negovanou cívku zar_4. Je možné ověřit, že stav svítidla sleduje stav vypínače, stejně jako v příkladu 1. To vyjadřuje skutečnost, že popřením popřeného výroku (negací negace) se získá původní výrok – sudý počet negací (záporů) se navzájem ruší. Stav svítidla zar_4 lze popsat složeným výrokem: „zar_4 svítí, jestliže není pravda, že není sepnut kontakt vypínače vyp_1“.

V jazyku strukturovaného textu (ST) bude situace popsána logickým výrazem:

zar_4 := NOT(NOT vyp_1);

Ten je rovnocenný výrazu:

zar_4 := vyp_1;

Při psaní programu je třeba dbát na jednoznačné vyjadřování – některá úskalí jsou uvedena ve vloženém rámečku Pozor na záludnosti češtiny.

Příklad 3: Spínací kontakty v sérii – funkce AND

Nyní je požadováno, aby žárovka zar_5 svítila, jsou-li současně sepnuty oba kontakty vyp_1 vyp_2. Při tradičním řešení elektroinstalace lze úlohu řešit sériovým zapojením kontaktů obou vypínačů. Motivací k zadání úlohy může být potřeba centrálně zhasnout celou místnost s více svítidly, nezávisle na stavu jejich lokálních vypínačů, nebo zablokovat aktivitu některého spotřebiče (např. při mimořádné situaci).

Řešení: Zadání odpovídá obvod 0005 na obr. 16. Je možné ověřit.

Logický součin – AND

Podmínku pro rozsvícení žárovky z předchozího příkladu lze popsat výrokem:

zar_5 svítí, jestliže je sepnut kontakt vyp_1 vyp_2

V angličtině spojce „a“ odpovídá spojka „and“ – proto se právě popsaná logická závislost nazývá funkce AND nebo též logický součin. AND je současně operátorem v jazyku strukturovaného textu (ST). Zde by situace byla popsána logickým výrazem:

 zar_5 := vyp_1 AND vyp_2;

Pro stejnou operaci lze v jazyku ST rovnocenně použít i operátor & a vytvořit druhou alternativu zápisu:

zar_5 := vyp_1 & vyp_2;

Literatura:

[1] International Standard IEC 1131–3. Programmable controllers – Part 3: Programming Languages. IEC, 1993.

[2] KOHOUT, L.: Programování podle normy IEC 61 131-3. edumat, Kutná Hora, 2011.

[3] Programování PLC podle normy IEC 61131-3 v prostředí Mosaic. Desáté vydání. Teco a. s., Kolín, 2007.

[4] Začínáme v prostředí Mosaic. Teco a. s., Kolín, 2010.

[5] ŠMEJKAL, L. – MARTINÁSKOVÁ, M.: PLC a automatizace 1. Základní pojmy, úvod do programování. BEN – technická literatura, Praha, 1999.

[6] ŠMEJKAL, L.: PLC a automatizace 2. Sekvenční logické systémy a základy fuzzy logiky. BEN – technická literatura, Praha, 2005.

[7] MARTINÁSKOVÁ, M. – ŠMEJKAL, L.: Řízení programovatelnými automaty I, II, III (skriptum). Vydavatelství ČVUT, Praha, 1998, 2000, 2003.

[8] Knihovny pro programování PLC Tecomat podle IEC 61131-3. Teco a. s., Kolín, 2006.

[9] Regulační knihovny pro Mosaic. Teco a. s., Kolín, 2008.

[10] Knihovna RexLib – pokročilé regulační algoritmy pro Mosaic. Teco a. s., Kolín, 2009.

[11] Knihovna pro modelování procesů. Teco a. s., Kolín, 2008.

[12] Knihovna BuildingLib. Teco a. s., Kolín, 2008.

[13] Příručka projektanta systémů Foxtrot. Teco a. s., Kolín, 2011.

[14] Příručka projektanta systémů CFox a RFox pro inteligentní elektroinstalaci. Teco a. s., Kolín, 2011.

[15] www.edumat.cz 

 

Ladislav Šmejkal

Obr. 15. Ukázka obrazovky v systému Mosaic s blokem deklarací globálních proměnných typu BOOL, který je umístěn před programem

Obr. 16. Program základních logických funkcí v jazyku LD

Pozor na záludnosti češtiny

Čeština připouští dva a více záporů v jedné větě a neplatí v ní, že se dvojitá negace ruší jako v matematice. Záludné může být použití záporu v otázce, kde zápor nemusí vyjadřovat popření předmětu otázky, ale spíše nejistotu. Pak ale můžeme být na rozpacích nad významem jakékoliv odpovědi. Zeptáme se např.: „Nezapomněl jsem před odchodem zhasnout?“ Jak máme ale interpretovat odpověď „ano“? Existují dvě rovnocenné a logicky protikladné interpretace: „Ano, nezapomněl jsi, bylo zhasnuto.“, ale i „Ano, zapomněl jsi, bylo rozsvíceno.“ První verze odpovědi předpokládá, že význam slova „nezapomněl“ je myšlen ve svém pravém významu a kladnou odpovědí je potvrzován – „Ano, nezapomněl jsi.“ Druhá verze odpovědi předpokládá, že se ptáme „Možná, že jsem zapomněl zhasnout, je to tak?“ – a kladná odpověď toto tušení potvrzuje. Stejně dvojznačnou interpretaci nabízí i opačná odpověď „ne“.

A což když otázka přímo nabízí dvojí odpověď, např.: „Mám pravdu, nebo nemám?“ Odpovíme-li „ano“ i „ne“, není jisté, na kterou část otázky jsme vlastně odpověděli, a odpovědí vlastně nesdělujeme žádnou informaci. V nezávazném rozhovoru obvykle nedochází k vážným nedorozuměním, podle intonace hlasu lze odhadnout, jak byla otázka myšlena. Přesto lze doporučit odpovídat tak, aby nevznikl omyl – tedy ne jen jednoslovně „ano“, „ne“, ale celou větou, ze které je zřejmé, na jakou otázku vlastně odpovídáme. A samozřejmě je vhodné klást otázky tak, aby nepřipouštěly dvojznačnou odpověď.

Vážnější je situace v oblasti práva, při formulování či interpretaci zápisu, smlouvy nebo při komunikaci s právníky – např. při otázce „Nebyl jste v danou dobu na místě činu?“, nebo dokonce „Není pravda, že jste tam v tu dobu byl?“ je nutné velmi důkladně zvažovat význam otázky i formu odpovědi – nepřesná odpověď může mít fatální důsledky. Jestliže je cílem tazatele spolehlivě zjistit pravdu, měl by pokládat jednoduché otázky bez záporů. Je-li
ale jeho cílem co nejvíce zmást tázaného nebo zamlžit skutečnost, je komplikované vyjadřování s množstvím záporů vynikajícím prostředkem, jak toho dosáhnout. Zejména někteří politici a právníci tento způsob „mlžení“ ovládají mistrně. Zkusme např. interpretovat (slogan a úryvek z Prodané nevěsty) „nic není nemožné“. Zde situaci komplikuje ještě zápor v přídavném jméně „nemožné“ – zápor u jména má poněkud „rozmazaný“ význam oproti záporu u slovesa – a je pravděpodobné, že jinak by byl citát interpretován v němčině či angličtině oproti češtině.

Při koncipování programu je často tvořen „příběh“, sestavený jako posloupnost otázek a odpovědí. Dobře napsaný program by rovněž měl připomínat srozumitelný příběh, který lze interpretovat jako řetězec otázek a odpovědí. Je v zájmu programátora vytvořit co možná nejdříve program s minimem chyb, který je snadno pochopitelný – a opravitelný a měnitelný i po delší době. Lze proto doporučit při zadávání a formulování programu klást prosté a jednoznačné otázky (pokud možno bez záporů), na něž lze jednoznačně a bez dlouhého přemýšlení odpovědět odpovědí „ano“, „ne“ – TRUE, FALSE.

Pozitivní formulace mají význam i psychologický a souvisejí s pozitivním myšlením. Lepšího efektu lze dosáhnout sugescí s vizuální představou „jsem klidný“ než „nejsem neklidný“. Podobně je účinnější posilovat se před zkouškou ujištěním „to zvládnu“ než „to nesmím nezvládnout“, popř. poraženecky „to nemůžu zvládnout“. Naše přání a touhy, ale i strachy a obavy mají tendenci se naplňovat.