Aktuální vydání

celé číslo

01

2025

Veletrh Amper 2025, automatizace v energetice a systémy managementu energií

Snímače teploty, tlaku, průtoku a hladiny, řídicí technika budov

celé číslo

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

V tomto pokračování bude popsáno, jak se jednocestným větvením programu a podmíněnými příkazy IF –THEN vytváří paměťové chování programu. Ne vždy je to ale výsledkem uživatelovy vědomé aktivity, často je důsledkem jeho nepozornosti, opomenutí a nesystematického postupu. Dále je zde popsána paměťová funkce (programová analogie klopného obvodu) typu T. Bude vysvětleno, jak se tato funkce používá při ovládání svítidla jediným kontaktem a při řešení schodišťových spínačů.

 Set, Reset a rizika podmíněných příkazů

V příkladu 11 (Automa 7/2012 na str. 44 a 45) byly uvedeny různé způsoby řešení paměťové funkce (klopného obvodu) typu Set a Reset (funkční bloky SR a RS). První variantou řešení bylo využití zpětné vazby v grafické i textové verzi programu PLC. Toto řešení bylo obvyklé při použití relé a stykačů pro konstrukci řídicích systémů s pevnou logikou. Zde bylo obvykle označováno jako „relé se samodržným kontaktem“ ve verzi s dominantním zápisem nebo s dominantním mazáním. Postup spočívá v „rozloženém řešení s viditelnou zpětnou vazbou“ a patří k nejjednodušším případům asynchronních logických obvodů. Lze jej použít i v programu PLC – nejenom v jazyku LD, ale i v FBD a v textových jazycích. Není výhodný a je málo přehledný.

Třetí varianta řešení využívá standardní funkční blok RS nebo SR. Má rovněž svou analogii při řešení pevné logiky – tentokrát na bázi integrovaných obvodů. Funkční bloky SR, RS modelují činnost nejrozšířenějších paměťových členů (klopných obvodů). Postup s voláním funkčních bloků je výhodný i při programování PLC v jakémkoliv z jazyků.

Nyní se pozastavme u druhého způsobu realizace s využitím výstupních cívek s paměťovou funkcí typu S (Set) a R (Reset). Stejnojmenné a shodně fungující instrukce nabízí i textový jazyk mnemokódů (IL, Instruction List). Činnost instrukcí S (Set) a R (Reset) je zobrazena na obr. 30. Obě jsou aktivní, jestliže je jejich vstupní proměnná (zde označená jako x) pravdivá – rovna logické jedničce (nabývá hodnotu TRUE). V tom případě instrukce Set nastavuje výstup paměťového obvodu q na jedničku, zatímco instrukce Reset jej nuluje. Při nulové (FALSE) hodnotě vstupní proměnné x se hodnota výstupu nemění a zachovává si posledně dosaženou hodnotu – pamatuje si ji. Pravdivostní mapy obou funkcí jsou na obr. 30a, b. Odpovídají jim logické výrazy, které lze v jazyce ST zapsat:

 Set:       q := q OR x;

Reset:  q := q AND NOT x;

 V obou případech je opět realizována zpětná vazba (proměnná q se vyskytuje na obou stranách výrazu). Z prvního výrazu vyplývá, že funkce Set je logickým součtem OR původního výstupu q a vstupu x. Lze ji interpretoval jako „přičtení OR“ hodnoty vstupu x k dosud zapamatované hodnotě q. Toto „přičtení“ je možné realizovat vícekrát z různých míst programu s různými operandy. Funkce Set a Reset lze rovnocenně interpretovat jako příkazy podmíněného zápisu – v jazyku ST je lze zapsat:

 Set:       IF x = true THEN q := true;

Reset:  IF x = true THEN q := false;

 Pro názornost jsou na obr. 30c, d oba podmíněné příkazy ještě zobrazeny graficky jako konstrukce vývojového diagramu. Je užitečné si uvědomit, že „jednocestným větvením programu“ a jednoduchými podmíněnými příkazy typu IF – THEN (v programech obvykle nadužívanými) jsou vždy realizovány paměťové funkce. Při splnění podmínky příkazu se provádí předepsaná akce, zatímco při jejím nesplnění se neprovádí nic – v paměti zůstává posledně dosažený stav. V případě instrukcí Set a Reset se tak děje vědomě a záměrně. Při nepozorném a nesystematickém psaní programu hrozí riziko, že paměťové chování programu uživatel způsobí nevědomky. Nechtěně tak vytvoří chybu v programu, která se mnohdy projevuje zdánlivě nahodilým způsobem – a velmi obtížně se detekuje a odstraňuje.


Příklad 12: Ovládání jedním kontaktem – detekce náběžné hrany a klopný obvod T

Je požadováno, aby svítidlo bylo ovládáno jediným kontaktem mžikového tlačítka. Obvykle je takto využíváno tlačítko s jednou nestálou polohou (jako tlačítko zvonku), může být použit jeden z kontaktů tlačítka se dvěma nestabilními polohami (obvykle kontakt od horní polohy). Předpokládá se, že zhasnuté svítidlo se prvním stiskem rozsvítí, druhým zhasne, třetím opět rozsvítí atd. Každým stiskem se tedy stav svítidla změní na opačný. Mlčky se předpokládá, že stav svítidla se změní v okamžiku stisku tlačítka (nikoliv při jeho uvolnění).

Řešení 1: Princip

Příklad je řešen ve dvou fázích. Nejdříve je třeba vyhodnotit jednorázovou událost – rozpoznat okamžik, kdy je právě stisknuto tlačítko (počátek sepnutí kontaktu tlačítka). Říká se, že je vyhodnocována náběžná hrana vstupní proměnné – okamžik, kdy se její hodnota mění z nuly na jedničku. Výsledkem je krátký impulz s hodnotou 1, který trvá právě dobu jednoho cyklu (oběhu) programu, tzv. impulzní proměnná nabeh. Na obr. 31 ji realizují obvody 0009 a 0010.

Ve druhé fázi je třeba změnit hodnotu paměťové funkce na opačnou. Na obr. 31 to dělá obvod 0011 s využitím funkce XOR podle výrazu:

 svit := nabeh XOR svit;

 Operátor XOR je zde využíván jako „řízený sledovač – invertor“ (obvod 0011 na obr. 31). Platí, že

1 XOR svit = NOT svit,

0 XOR svit = svit.

Je-li proměnná nabeh nulová (není vyhodnocena náběžná hrana), nemění se ani stav proměnné svit (svit := svit). Jestliže je proměnná nabeh jedničková (v okamžiku náběžné hrany), změní se hodnota proměnné svit na opačnou (svit := NOT svit). Rovnocenně lze použít podmíněný příkaz:

 IF nabeh = true THEN svit := NOT svit;

 Následně je realizován další typ paměťové funkce, která se při realizaci pevnou logikou s integrovanými obvody nazývá klopný obvod typu T.

Poznámka: I při realizaci paměťové funkce (klopného obvodu) typu T se lze setkat se zpětnou vazbou nebo s podmíněným příkazem IF – THEN.

Impulz náběžné a sestupné hrany

Náběžná hrana je vyhodnocována prvními obvody (0009 a 0010) na obr. 31 a je určena logickým výrazem:

 nabeh :=  (NOT tl_m) AND tl;

 který vyjadřuje skutečnost, že minulý vzorek tl_m vstupní proměnné tl  je nulový a její současný vzorek tl je jedničkový – právě nastala změna z nulové na jedničkovou hodnotu 0 ® 1. Ve všech ostatních situacích (setrvalá nula 0 ® 0, setrvalá jednička 1 ® 1, sestupná hrana 1 ® 0) je výstup nulový, impulz není generován. Na závěr je ještě třeba se postarat o aktualizaci proměnné tl_m příkazem

 tl_m := tl;

 který vyjadřuje prostou skutečnost, že současná hodnota vzorku proměnné kontakt bude v příštím programovém cyklu již minulostí, tedy tl_m. Situace je ilustrována časovým průběhem jednotlivých signálů na obr. 32. Jako tlačítko je zde pojmenován signál kontaktu tlačítka, který je vstupem PLC – je spojitý v čase. Proměnná tl je její obraz v prostoru proměnných programu PLC a tl_m je stejná proměnná zpožděná o jeden výpočetní krok (minulý vzorek proměnné tl). Proměnné tl a tl_m jsou nespojité (diskrétní) v čase a jejich hodnoty jsou dostupné jen v aktivním programovém cyklu. Proměnná nabeh nabývá jedničkovou hodnotu jen v jediném výpočetním cyklu, ve kterém byla vyčíslena, v dalším výpočetním cyklu je opět nulová. Proměnná svit je do příchodu nejbližšího impulzu nabeh nulová, s jeho jedničkovou hodnotou se „překlopí do jedničky“ a s dalším impulzem nabeh se zase „překlopí do nuly“ atd.

Pro úplnost je na obr. 32 ještě uvedena impulzní proměnná sestup, jako impulz od sestupné hrany. Pro ovládání klopného obvodu svit není využívána. Impulz od sestupné hrany je obdobně určen programem

 sestup :=  tl_m AND NOT tl;

tl_m := tl;

 Někdy je třeba vyhodnotit okamžiky každé změny dvouhodnotové proměnné, tedy souhrnné okamžiky náběžných a sestupných hran. Lze odděleně vyhodnotit impulz od náběžné a impulz od sestupné hrany a pak je logicky sečíst. V tomto případě je možné rovnocenně použít operátor OR (inkluzivní součet) nebo XOR (výlučný součet) – např. pro OR:

 nabeh :=  (NOT tl_m) AND tl;

sestup :=  tl_m AND NOT tl;

zmena := nabeh OR sestup;

tl_m := tl;

nebo rovnocenně:

 zmena :=  (NOT tl_m) AND tl  OR  tl_m  AND NOT tl;

tl_m := tl;

 Je-li zřejmé, že logický výraz je definicí operátoru výlučného logického součinu XOR, řešení je možné zapsat ve tvaru:

 zmena :=  tl_m XOR tl;

tl_m := tl;

 Odpovídá to obvyklé interpretaci operátoru XOR, který je často využíván jako operátor neshody – zde odlišnosti obou vzorků.

Úloha 46: Co nás opravňuje k tomu, abychom ke spojení impulzů od náběžné a sestupné hrany použili operátor OR a XOR? Bylo by toto řešení oprávněné i pro současný výskyt impulzu náběžné a sestupné hrany? Může taková situace reálně nastat?

Řešení 2: S funkčním blokem R_TRIG

Rovnocenné řešení je uvedeno na obr. 31 jako obvod 0012.  Impulz náběžné hrany je zde generován standardním funkčním blokem R_TRIG z knihovny STDLIB. Jeho funkce je rovnocenná způsobu generování impulzu, který byl popsaný v řešení 1. Navíc má jednu příznivou vlastnost – funkční blok R_TRIG lze v programu použít vícekrát pro stejnou proměnnou (zatímco v prvním řešení by bylo nutné ho pro paměť minulého vzorku pokaždé znovu specifikovat s jiným jménem). V knihovně STDLIB lze nalézt obdobný funkční blok F_TRIG, který generuje impulz od sestupné hrany.

Řešení 3: S impulzním kontaktem

Obvod 0013 na obr. 31 realizuje stejnou funkci s využitím impulzního kontaktu, který automaticky generuje impulz od náběžné hrany. Ve schématu je označen symbolem kontaktu s vepsaným znakem P (-|P|-). Obdobně lze použít impulzní tlačítko, které generuje impulz od sestupné hrany – ten by měl vepsaný znak N (-|N|-).

Řešení 4: S pamětí S a R

Pro úplnost ještě uveďme poněkud netradiční řešení, popsané obvody 0014 a 0015 na obr. 31. Slovně je lze popsat takto: „pokud je vyhodnocena náběžná hrana tlac_3 a paměť signálky svit_3 je nastavena do jedné, pak smaž pomocnou paměť pam_3 (cívkou R). Pokud při náběžné hraně tlac_3 je paměť signálky svit_3 nulová, pak nastav pomocnou paměť pam_3 do jedné (cívkou S) a v závěru pak okopíruj stav pomocné paměti pam_3 do paměti signálky svit_3“. Tímto postupem je opět při náběžné hraně měněn stav svítidla na opačný, jen jinými prostředky.

Úloha 47: Proč je v posledním řešení nutné používat pomocnou paměť pam_3? Bylo by možné použít jednodušší řešení a pracovat přímo s pamětí žárovky svit_3?

Úloha 48: Vytvořte uživatelský funkční blok, který realizuje klopný obvod T, včetně vyhodnocení náběžné hrany. Zjednodušte s jeho použitím řešení předchozího příkladu.

Příklad 13: Schodišťový spínač s impulzním ovládáním

Zadání příkladu 12 lze zobecnit pro dva a více vstupů tak, aby se vždy v okamžiku stisku (s náběžnou hranou) kteréhokoliv z tlačítek změnil stav svítidla. Získá se tak opět funkce schodišťového vypínače, tentokrát s využitím paměťové funkce typu T. Prozatím uvažujme dvě tlačítka (ovladač osvětlení na jednoduchém schodišti).

Řešení 1: Náhrada tradičních tlačítek

S využitím paměťové funkce (klopného obvodu) SR nebo RS se z tlačítek s nestálou polohou vytvoří programová analogie tlačítek se stálými polohami (viz příklad 11) – bude prodloužen stav jejich sepnutí. S nimi je možné zacházet stejně jako v příkladech 7 a 8 s kontakty tlačítek se stálými polohami.

Řešení 2: S možným překrýváním

Jednodušší variantou řešení je obvod 0016 z obr. 33. Nejprve je vytvořen logický součet obou vstupních proměnných tlac_4 OR tlac_5, pak je vygenerována náběžná hrana tohoto součtu. Tou je ovládána paměťová funkce typu T svit_5. Řešení se chová téměř rovnocenně jako řešení schodišťového spínače s tlačítky se stabilními polohami. Odlišnost popsaného impulzního ovládání se projeví jen ve vzácném případě, kdy jsou obě tlačítka tisknuta (téměř) současně, takže se v součtu překrývají (obr. 34a). Důsledkem může být „ztráta“ jedné náběžné hrany.

Úloha 49: Bylo by i v tomto případě možné sečíst obě vstupní proměnné operací výlučného součtu (tlac_4 XOR tlac_5)? V čem a jak by se projevila odlišnost?

Řešení 3: S upraveným překrýváním

Obvod 0017 na obr. 33 tuto situaci upravuje tak, že ke každé z proměnných tlac_6tlac_7 jsou odděleně generovány impulzy náběžných hran a obě jsou využity k ovládání paměťové funkce svit_6 (obr. 34b).

Úloha 50: Zobecněte popsaná řešení pro ovládání schodiště ve vícepatrové budově nebo na chodbě.

Úloha 51: Analyzujte situace, kdy mohou být (téměř) současně stisknuta tlačítka na obou koncích schodiště nebo na různých podlažích. Který ze způsobů ovládání je pro chodce nejvýhodnější?

Ladislav Šmejkal

Obr. 30. Činnost paměťových funkcí Set (a, c) a Res (b, d) zobrazená v podobě K-mapy (a, b) a vývojového diagramu (c, d)

Obr. 31. Různé způsoby realizace paměťové funkce (klopného obvodu) typu T v jazyce LD

Obr. 32. Princip generování impulzu od náběžné a sestupné hrany

Obr. 33. Možnosti řešení schodišťového spínače s využitím paměťové funkce T

Obr. 34. Dva způsoby spojení dvou vstupních proměnných a možnost ztráty impulzu náběžné hrany při jejich logickém součtu OR