Aktuální vydání

celé číslo

08

2021

Digitální transformace a konvergence provozních, informačních a inženýrských systémů

Výzkum, vývoj a vzdělávání v automatizaci

celé číslo

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

Tímto pokračováním končí seriál o programování PLC podle normy IEC/EN 61131-3. V předchozích částech seriálu byly postupně představeny různé typy konečných auto­matů – kombinační, se vstupní pamětí, automat Mooreova a Mealyho typu a síť SFC. Zejména poslední tři jmenované typy jsou mocnými nástroji při navrhování algoritmů a programování úloh z praxe. Na závěr bude uvedeno jejich porovnání a souvislosti mezi nimi. Dosud byl k řešení příkladů používán především jazyk LD a někde základní příka­zy jazyka ST. V závěru plní autoři svůj slib a předkládají řešení jednoduchého příkladu ve zbývajících jazycích: FBD, IL a CFC.

 

Souvislosti mezi konečnými automaty

Dosud se čtenáři setkávali s různými ma­tematickými modely sekvenčního chování a s jejich ekvivalenty použitelnými v praxi a při tvorbě programů. Významnou roli mezi nimi sehrávají konečné automaty. V tomto se­riálu není dostatek prostoru pro detailní teo­retický výklad ani pro popis jejich realizace programem PLC. Stručný přehled konečných automatů se schématy je uveden na obr. 85.
 

Kombinační automat

Kombinační automat (obr. 85a) převádí současné hodnoty vstupních proměnných xk na hodnoty výstupních proměnných yk. Realizuje kombinační logické funkce, jejichž výstupní proměnné jsou logickými funk­cemi kombinace aktuálních vstupních pro­měnných: yk = f(xk). Symboly x a y označují vstupní a výstupní vektory, tj. soubory vstup­ních a výstupních proměnných – zkráceně vstupy a výstupy. Lze je rozepsat jako sou­bor dvouhodnotových (booleovských) proměnných: x = (x1, x2, … xn) a y = (y1, y2, … ym), kde n je počet vstupních proměnných (délka vstupního vektoru) a m je počet vý­stupních proměnných (délka výstupního vek­toru). Vektorový zápis vektorové funkce lze rozepsat jako soubor jednoduchých booleov­ských funkcí kombinačního typu: y1 = f1(x1, x2, … xn), y2 = f2(x1, x2, … xn), … ym = fm(x1, x2, … xn). Index k označuje, že jde o současné (aktuální) hodnoty proměnných. Typickými představiteli kombinačních logických funk­cí jsou např. převodníky kódů (dekodéry), prahové funkce, obecné symetrické funkce a funkce realizované logickými výrazy mezi aktuálními vstupními proměnnými. Většina postupů z učebnic Booleovy algebry se zabý­vá syntézou kombinačních logických funkcí.

 

Automat se vstupní pamětí

Také automat se vstupní pamětí (obr. 85b) zpracovává současné vzorky vstupních pro­měnných xk, ale navíc ještě historické vzor­ky vstupů xk-1, xk-2, … xk-n do určité hloubky n úrovní yk = f(xk, xk-1, xk-2, … xk-n). Nejjed­noduššími představiteli jsou funkční bloky, které generují impulzy od náběžných hran (R_TRIG), sestupných hran (F_TRIG), im­pulzy změn binárních proměnných (od libo­volných hran) nebo impulzy rozlišení směru pohybu z příkladu 43. Zpracovávají vzorky vstupů jen do hloubky první úrovně historie xk, xk-1. Vzorky vstupních proměnných hlub­ších úrovní lze využít např. při řešení úloh fil­trace vstupních proměnných a k odstranění rušivých krátkých impulzů.
 

Konečný automat Mooreova typu

Chování většiny mechanismů nebo výrob­ních procesů lze popsat jako konečné automa­ty Mooreova typu nebo též Mooreovy koneč­né automaty (obr. 85c), které modelují jejich sekvenční funkce. S jejich využitím je mož­né popsat jejich požadovanou činnost, postup řízení, výrobní postupy receptur, ale i zása­dy doporučené obsluhy nebo řešení technic­ké diagnostiky. Konečné automaty Mooreova typu se někdy nazývají sekvenční řadi­če. Jejich přechodová funkce qk = g(xk, qk-1) zpracovává současný vzorek vstupních pro­měnných xk spolu s informací o dosavadním (aktuálním) kroku qk-1 (kombinací vnitřních stavových proměnných) a generuje informa­ci o novém kroku qk. Takto je realizován pře­chod. Symbol d znázorňuje časové zpoždě­ní o jeden výpočetní krok – časový odstup mezi právě generovaným krokem qk a minu­lým krokem qk-1, který byl do té doby aktuální. Výstupní funkce zpracovává informaci o kroku a generuje hodnoty výstupních pro­měnných yk = h(qk-1), popř. yk = h(qk). Není významný rozdíl v tom, zda zpracovává in­formaci v dosavadním qk-1 či nově vygenerovaném kroku qk. Proto jsou v přechodovém diagramu Mooreova automatu uváděny hod­noty výstupů jako přidružené akce ke krokům a u hran (přechodů) jsou uváděny jen jejich podmínky (vstupní proměnné). Ve zvláštních případech mohou být ve funkci výstupů využity přímo vnitřní stavové proměnné – vý­stupní proměnné jsou shodné s vnitřními pro­měnnými, které kódují kroky yk = qk-1, popř. yk = qk. Nemění-li přechodová funkce hodno­tu kroku (konečný automat setrvá v nezměně­ném kroku, nedochází k přechodu), nemění se ani hodnoty výstupních proměnných. Takové­to přechody obvykle ani nejsou zakreslová­ny v přechodovém diagramu – kresleny jsou jen přechody, které směřují do jiného kroku. Mooreův konečný automat může v aktuálních krocích setrvávat značně dlouho (obvykle po dobu, než se provede odpovídající techno­logická operace, což obvykle trvá v rozsahu sekund až hodin). Jeho chování je tak téměř statické – spíše lze říci „stacionární“.
 
Je užitečné si uvědomit, že výstupní funkce konečného automatu Mooreova typu je kombi­nační funkcí vnitřních stavových proměnných, která transformuje hodnotu kroku na kom­binaci výstupních proměnných yk = h(qk-1), popř. yk = h(qk): y1 = h1(q1, q2, … ql), y2 h2(q1, q2, … ql), … ym = hm(q1, q2, … ql), kde q1, q2, … ql jsou vnitřní stavové proměn­né, které kódují hodnotu kroku qk-1 nebo qk, h1, h2, … hm jsou kombinační logické funk­ce, které generují hodnoty dvouhodnotových výstupních proměnných, a l je počet vnitř­ních stavových proměnných (délka vektoru qk nebo qk-1). Podobně je přechodová funk­ce qk = g(xk, qk-1) kombinační funkcí vstup­ních a vnitřních a stavových proměnných: q1 = g1(x1, x2, … xn, q1, q2, … ql), q2 = g2(x1, x2, … xn,, q1, q2, … ql), … ql = gl(x1, x2, … xn, q1, q2, … ql), kde stavové proměnné q1, q2, … ql na levé straně dílčích logických výrazů kódují nový krok qk, zatímco stejně označe­né proměnné v argumentu kódují předchozí krok qk-1. Podstatou sekvenčního chování ko­nečného automatu Mooreova typu je zpětná vazba, která se uskutečňuje na úrovni jeho vnitřních stavových proměnných (všech nebo jen některých).
 
Zvláštními případy automatu Mooreova typu jsou krokové řadiče, jejichž vývoj postu­puje v cyklech a jejich přechodový diagram má tvar smyčky – není větvený a z koncové­ho kroku se vrací na začátek do počáteční­ho stavu. Často jde o časový řadič, nazýva­ný též časový programátor nebo časový pro­cesor. Podmínkami přechodů nejsou vstupní proměnné (nebo jen v omezené míře), ale převážně časové údaje. Mohou být typu Time (přírůstkovým časem měřeným od zaháje­ní technologického procesu) a jsou používá­ny převážně při řízení technologických pro­cesů. Časové údaje mohou být i typu Date ve významu absolutního času v rozsahu den­ních a kalendářních údajů. Takto jsou obvyk­le řízeny technologické procesy v budovách (osvětlení, vytápění nebo chlazení, zavlažo­vání, nucené větrání) nebo v energetice (říze­ní spotřeby elektrické energie, aktivace spo­třebičů akumulačního charakteru apod.). Je tak realizováno řízení v denních, týdenních nebo ročních cyklech. Zobecněním konečné­ho automatu Mooreova typu je síť SFC nebo Grafcet. Zatímco v konečném automatu může být aktivní vždy jen jediný krok, v síti SFC (po simultánním větvení) může být aktivo­váno více kroků a tak je řízeno několik para­lelních procesů.
 

Konečný automat Mealyho typu

Schéma konečného automatu Mealyho typu (Mealyho automat) je zobrazeno na obr. 85d. Jeho přechodová funkce qk = g(xk, qk-1) i výstupní funkce yk = h(xk, qk-1) zpracováva­jí aktuální vstupní proměnné xk a informace o dosavadním aktuálním kroku (vnitřní sta­vové proměnné) qk-1. Při každém přechodu jsou tedy generovány výstupní proměnné yk a současně i nový krok qk. V přechodovém diagramu je proto u každého přechodu (hra­ny grafu) uváděna podmínka přechodu (před lomítkem) a hodnoty výstupů generované při přechodu. Situace, kdy je třeba přiřadit hod­noty výstupů i při setrvání ve stavu, jsou ře­šeny fiktivními přechody, které nemění in­formaci o kroku, jen generují výstupy. V pře­chodovém diagramu jim odpovídají „krátké smyčky“, které směřují do stejného kroku, ze kterého vycházejí. Mohou existovat i souběž­né přechody, které vycházejí ze společného stavu a směřují do shodného cílového stavu a liší se jen podmínkami přechodu a odpoví­dajícími výstupy.
 

Použití konečných automatů

Konečný automat Mealyho typu je tedy schopen modelovat podstatně dynamičtěj­ší procesy než konečný automat Mooreova typu, obvykle i jednorázové děje nebo „mži­kové události“, které odpovídají jedinému přechodu. Při zobecněném pohledu lze Mo­oreův i Mealyho konečný automat považo­vat za kombinační automat se skokově se měnící strukturou (přepínanou strukturou). Každému kroku odpovídá jiná kombinační funkce, která transformuje vstupní proměn­né na výstupní.
 
Označení „konečný automat“ vyjadřuje, že počet kombinací vstupních a výstupních proměnných (znaků vstupní a výstupní abe­cedy) je konečný, stejně jako počet kroků. V uvedených typech jsou funkce f(xk), f(xk, xk-1, xk-2, … xk-n), g(xk, qk-1), h(qk), h(xk, qk-1) kombinačními funkcemi svých argumentů. Symboly psané tučnými znaky označují vstupní xk, xk-1, xk-2, … xk-n nebo výstupní yk vektory – soubory vstupních nebo výstup­ních proměnných (zkráceně vstupů a výstu­pů). Kombinační automaty mohou realizovat jen kombinační funkce (aktuální hodnoty vý­stupů závisejí jen na aktuální hodnotě vstupů) – „žijí v přítomnosti“. Automaty se vstupní pamětí mohou realizovat i jednoduché sek­venční funkce díky možnosti zpracovávat historické vzorky vstupů – „žijí v dohledné minulosti“. Složitost sekvenčních logických funkcí je ale omezena počtem úrovní histo­rických vzorků vstupů – hloubkou zásobníku vstupní paměti. Nelze takto realizovat ani tak jednoduché sekvenční funkce, jako je např. paměťový obvod RS, jehož realizace by vyža­dovala nekonečnou hloubku vstupní paměti.
 
Konečné automaty Mooreova a Mealyho typu jsou někdy souhrnně nazývány jako sta­vové automaty. Mají stejnou algoritmickou mohutnost a mohou realizovat i velmi složi­té sekvenční funkce – téměř všechny, které jsou v technologické praxi po­třebné. Oba typy jsou navzájem převoditelné, a mohou tak rea­lizovat shodné funkce, ovšem s odlišnou strukturou automatů (pro realizaci stejné funkce vy­žaduje Mooreův automat větší počet kroků). Jejich sekvenč­ní chování je založeno na využití informace o kroku (stavu) a zpětné vazbě při realizaci pře­chodové funkce qk = g(xk, qk-1) – obr. 85c, d. K tomuto účelu je v obou schématech použi­to zpoždění o jeden výpočetní krok (označené symbolem d), aby bylo zřejmé, že symboly qk-1 qk na obou stranách rovni­ce qk = g(xk, qk-1) sice představu­jí kombinace stejných vnitřních stavových proměnných, ovšem různé historické úrovně. Sym­bol qk-1 v argumentu přechodo­vé funkce představuje dosavadní krok, zatímco qk na levé straně rovnice představuje právě vyge­nerovaný krok, kterým je dosa­vadní krok nahrazen (jsou pře­psány hodnoty vnitřních stavo­vých proměnných). V hodnotě kroku je soustředěna informace o dosavadním vývoji (historii) konečného automatu. Obraz­ně lze říci, že stavové automaty „žijí v nedo­hledné (nekonečné) minulosti“.
 
Při realizaci konečného automatu progra­mem PLC bývají kroky interpretovány dvěma způsoby: jako soubor jednobitových příznaků (bitová mapa) nebo jako vícebitový kód kroku (nejčastěji jeho pořadové číslo – index). První způsob je obecnější a vyhovuje i při realiza­ci sítě SFC (při současné aktivaci více kroků je nastaveno více bitových příznaků). Druhý způsob dovoluje efektivnější implementa­ci konečných automatů s využitím datových struktur (tabulek). Funkce konečných auto­matů je obvykle popisována formou přecho­dových diagramů. V praxi jsou ale používá­ny i různé typy tabulkového popisu, zejména pro jednodušší typy automatů, např. pro kro­kové řadiče nebo časové procesory.
 
V teoretické literatuře a v učebnicích se lze setkat s konečnými automaty pro dvě ob­lasti použití. V učebnicích Booleovy algeb­ry a navrhování pevné logiky je přechodový diagram použit k popisu algoritmu sekvenční funkce. Vstupy a výstupy jsou reálné vstup­ní a výstupní proměnné z procesu. Každý ze vstupů a výstupů má svůj individuální fyzi­kální význam. Předpokládá se, že fyzicky rea­lizovaný automat je aktivován nepřetržitě a že hodnoty jednotlivých proměnných se mohou měnit kdykoliv ve spojitém čase (asynchron­ně) nebo synchronně v rytmu vnitřních řídi­cích proměnnými (hodinových signálů nebo jiných synchronizačních proměnných). Jest­liže se při opakované aktivaci automatu ne­mění hodnoty vstupních proměnných, zna­mená to, že se nemění ani jejich fyzická re­prezentace. Následně je přechodový diagram převeden do ekvivalentní formy tabulek (vý­vojové tabulky a tabulky výstupní funkce), které jsou podkladem pro rozklad na síť pa­měťových obvodů a na kombinační síť jejich budicích funkcí. Postup obvykle bývá rozší­řen o řešení problému optimálního kódování kroků, o redukování počtu kroků a o minima­lizaci struktury logické sítě. Metodika není jednoduchá a v praxi je využívána jen výjimečně. Pro vytvoření programu PLC je zcela nevhodná a zbytečně komplikovaná.
 
Druhým tradičním oborem použití koneč­ných automatů je teorie gramatik a překla­dačů programovacích jazyků. Konečné au­tomaty jsou zde využívány k vyhodnocení posloupnosti kódovaných symbolů (obvyk­le znaků abecedy), k rozpoznání gramatik, konstrukcí programu vyhodnocovaného ja­zyka a následně pro překlad zdrojového tex­tu programovacího jazyka do jeho cílové for­my. Vstupy automatu mají význam kódových kombinací jednotlivých znaků nebo znakových řetězců. Jednotlivé vstupní proměnné nemají svůj individuální fyzikální význam, jsou jen součástí kódové kombinace. Automat je aktivován nespojitě, jen při příchodu nové­ho znaku. Jestliže se při opakované aktivaci automatu kombinace vstupních proměnných nemění, znamená to, že je opakovaně zpra­cováván stejný znak. Při konstrukci překla­dačů jsou využívány i složitější typy automa­tů (ne vždy konečných), např. nedeterminis­tické, obousměrné, zásobníkové a jiné, popř. Thuringovy stroje nebo Petriho sítě různých typů. Problematika překladačů programova­cích jazyků ale (zpravidla) není řešena s po­užitím programu PLC.
 
Při programování PLC je ale obdobným problémem vyhodnocení posloupnosti tla­čítek tisknutých operátorem nebo obsluhou operátorského panelu. Formou konečného automatu může být popsán a realizován i ko­munikační protokol mezi PLC a periferním modulem. Obvyklé je využití konečných au­tomatů nebo sítí SFC při programování úloh řízení. Konečný automat nebo síť SFC jsou určeny nejenom k názornému popisu sek­venčního chování řízeného objektu a k zadání programu PLC (obvykle formou pře­chodového diagramu nebo tabulkou). Může být přímo implementován programem PLC a využit jako model předepsaného chová­ní. Bývá využíván přímo k řízení – fyzické vstupy PLC jsou pak využity jako podmínky přechodů a výstupy (popsané jako akce při­družené ke krokům) jsou využity jako fyzic­ké výstupy PLC, kterými je zařízení ovládá­no. Při řešení technické diagnostiky je napro­gramovaný model chápán jako ideální předpis funkce stroje nebo technologického proce­su. Chování modelu je porovnáváno s cho­váním reálného zařízení. Při nesouladu je in­dikována chyba. Může jít o úplné zhroucení funkce nebo „jen“ nesoulad v časech opera­cí, popř. o zjištěný trend ve změnách jejich hodnot. Podobně lze popsat správný postup obsluhy zařízení jako doporučené posloup­nosti stisků tlačítek a jiných ovládacích prv­ků v různých stavech zařízení. Naprogramo­vané zařízení může být využito jako trenažér při výuce a zaškolování operátorů. Může ale i provádět „diagnostiku operátora“, porovná­vat posloupnost jeho zákroků s požadovaný­mi zásahy. Lze testovat nejenom správné po­řadí zásahů, ale i doby mezi zásahy, pohoto­vost operátora, jeho únavu a způsobilost (či nezpůsobilost) k obsluze. Tyto možnosti jsou dosud v praxi málo využívány – ke škodě do­davatelů a jejich uživatelů.
 

Závěrečné příklady

Norma IEC/EN definuje čtyři programo­vací jazyky pro PLC (LD, IL, ST, FBD) a ná­stroj SFC pro popis sekvenčních úloh. Nad rámec normy je někdy používán grafický ja­zyk CFC (Continuous Function Chart), kte­rý je „příjemnější formou“ jazyka blokových schémat. Není popsán normou, ale bývá je­jím nadstandardním rozšířením a využívá její syntaxi. Umožňuje rychlou, přehlednou a pohodlnou tvorbu a ladění programů v gra­fické podobě (obr. 87). Programy pro dosud uváděné příklady byly zapsány jen v jazy­cích LD (Lader Diagram, jazyk kontaktních schémat), s využitím základních příkazů ja­zyka ST (Structured Text, jazyk strukturova­ného textu) a byl popsán nástroj SFC (Se­quential Function Chart). Pro ilustraci bude nyní uvedena ukázka zápisu jednoduché úlo­hy (rozlišení směru z příkladu 43) v ostatních jazycích. Program v jazyce FBD (Function Block Diagram, jazyk blokových schémat) je uveden na obr. 86. V textovém jazyce IL (Instruction List, jazyk seznamu instrukcí, jazyk mnemokódů) lze stejnou úlohu zapsat jako posloupnost zkratkových jmen (mnemo­kódů) instrukcí:
 
LD a0
XOR b0
XOR a1
XOR b1
ST spol
LD b0
XOR a1
AND spol
ST p
LD a0
XOR b1
AND spol
ST m
LD a0
XOR a1
ANDN spol
ST e
LD a1
ST a0
LD b1
ST b0
 
U programu v jazyce ST nezáleží na pořa­dí závorkovaných výrazů. Program
 
spol := a0 XOR b0 XOR a1 XOR b1;
p := spol AND (b0 XOR a1) ;
m := spol AND (a0 XOR b1) ;
e := NOT spol AND (a0 XOR a1) ;
a0 := a1 ;
b0 := b1 ;
 
je rovnocenný programu z příkladu 43. V ja­zyce IL mu ale odpovídá jiná (delší) forma programu:
 
LD a0
XOR b0
XOR a1
XOR b1
ST spol
LD spol
AND( b0
XOR a1
)
ST p
LD spol
AND( a0
XOR b1
)
ST m
LDN spol
AND( a0
XOR a1
)
ST e
LD a1
ST a0
LD b1
ST b0
 
Je na uživateli, aby si podle svého uvážení zvolil programovací jazyk, který bude použí­vat. Záleží na jeho oblibě, ale i na charakteru programované úlohy. Pro mnoho programáto­rů, kteří jsou v programování PLC spíše laiky a řeší jednoduché úlohy logického typu (např. náhradu dosavadní reléové logiky nebo jednoduché úlohy „chytré elektroinstalace“), bude patrně nejpřístupnější jazyk LD. Pro progra­mátory, kteří jsou zvyklí na řešení pevné logi­ky s integrovanými obvody nebo na schémata regulačních úloh, bude pravděpodobně oblíbe­nější jazyk FBD nebo CFC. Jazyk ST si nepo­chybně oblíbí programátoři zvyklí na textové jazyky pro programování počítačů a mikrořa­dičů (např. Pascal a různé varianty jazyka C). Je patrně nejvýhodnější pro programování ná­ročnějších úloh logického charakteru, výpočet­ních úloh, úloh regulace a číslicového zpra­cování signálů nebo statistického zpracová­ní – a rovněž realizace konečných automatů, jestliže není k dispozici implementace nástro­je SFC. Nástroj SFC je výhodný pro realizaci sekvenčních funkcí a modelů sekvenčně pra­cujících zařízení. Může být kombinován s li­bovolným z jazyků podle normy. Asi nejméně příznivců si získá textový jazyk IL, který nemá žádné významné výhody, program v něm za­psaný je dlouhý a nepřehledný. Snad jej budou používat jen programátoři, kteří dosud použí­vali některý z jazyků typu assembler.
 
Norma připouští v jedné programové or­ganizační jednotce POU (v programu, funkč­ním bloku nebo funkci) použít jen jediný typ programovacího jazyka. Nelze tedy psát růz­né úseky programu v odlišných jazycích. Je ale přípustné zapsat v libovolném jazyce pro­gramy pro různé programové organizační jed­notky (tedy funkce, funkční bloky nebo pro­gramy). Je tak možné např. hlavní program zapsat v jednom jazyce (např. LD) a program některých funkčních bloků zapsat v jiných ja­zycích (např. ve ST).
 

Závěr

Seriál Esperanto programátorů PLC: pro­gramování podle normy IEC/EN 61131-3 do­spěl k závěru. Jeho cílem bylo seznámit se zásadami normy IEC/EN 61131-3 a na pří­kladech uvést možnosti programování PLC podle ní. Většina příkladů byla uváděna v gra­fickém jazyce LD, částečně i v jazyce ST s využitím jeho základních příkazů. Pozor­nost byla věnována nástroji SFC a proble­matice konečných automatů, protože je autoři považují za velmi „mocný nástroj“ pro řešení úloh praxe. Většina uvedených příkladů byla z oboru techniky budov a jejich inteligentní elektroinstalace. Příklady z tohoto oboru lze snadno i vysvětlit – a navíc jde o perspektiv­ní obor. Nebylo cílem (ani by to nebylo reál­né) proměnit čtenáře na profesionální progra­mátory PLC. Záměrem bylo probudit zájem o profesi programování PLC a o normu, kte­rá se skutečně stala jakýmsi „esperantem“ – jednotným programovacím prostředkem pro programátory PLC od různých výrobců. Je třeba si uvědomit, že znalost programovací­ho jazyka je jen nutnou podmínkou k zvlád­nutí profese programátora. Důležitější je zna­lost metodiky programování a algoritmizace různých typů úloh – a praxe v programování. Lze konstatovat, že „programování se učíme programováním“.
Ladislav Šmejkal, Josef Černý
 
Obr. 85. Přehled typů konečných automatů: a) kombinační automat, b) automat se vstupní pamětí, c) Mooreův automat, d) Mealyho automat
Obr. 86. Program úlohy rozlišení směru z příkladu 43 v jazyce FBD
Obr. 87. Program úlohy rozlišení směru z pří­kladu 43 v jazyce CFC