Aktuální vydání

celé číslo

02

2021

Systémy pro řízení vodárenských sítí a ČOV

Hladinoměry

celé číslo

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

Tento díl seriálu seznamuje nejen s programováním v jazyku LD, ale současně se základy teorie kombinační logiky. Booleova algebra zde není prezentována jako soubor vzorců, ale její pravidla vyplynou z řešení příkladů a zadaných úloh. Úlohy vybízejí k samostatné aktivitě a je jich zde dostatek. Doporučujeme nacházet vlastní úlohy v každodenních situacích a řešit je. Je to docela zajímavá hra. V dalších částech budeme pokračovat. Pro čtenáře, kteří již mají zkušenosti s programováním PLC, budou postupně zařazována zadání komplikovanějších úloh nad rámec výkladu – a mimo jeho „proud“. Úlohy budou uváděny na www.automa. cz a postupně doplňovány řešením a diskusí čtenářů.

Pravdivostní tabulka a mapa

Pravdivost logických funkcí je obvyklé zapisovat v podobě pravdivostní tabulky (tab. 11a). V levé části jsou uvedeny všechny možné kombinace vstupních proměnných (argumentů) logické funkce. Pravdivostní hodnoty argumentů i funkce je zde běžné zapisovat jako dvojkové číslice 0 a 1 ve významu: logická 0 a logická 1 (log 0 a log 1). Možná je i jiná symbolika, např. FALSE a TRUE nebo třeba 0 a I. L a H (nižší a vyšší úroveň signálu v logickém obvodu) – je to věcí dohody a názornosti. Pro dva operandy má pravdivostní tabulka čtyři řádky, pro tři operandy jich je osm – a obecně pro n operandů má 2n řádků. Zpravidla se kombinace operandů vypisují jako vzestupná řada dvojkových čísel (je to názorné a systematické) – v pravém sloupci operandů se střídají hodnoty 0, 1, 0, 1, …, ve sloupci vlevo kombinace dvojic 0, 0, 1, 1, 0, 0, …, v dalším vlevo čtveřice 0, 0, 0, 0, 1, 1, 1, 1, … atd. Kombinace nul a jedniček má význam pořadového čísla řádku pravdivostní tabulky zapsané ve dvojkové soustavě. Často je uváděn jeho ekvivalent v desítkové soustavě (index) ve sloupci zcela vlevo. Má význam pořadového čísla položky (řádku tabulky). Pravou část pravdivostní tabulky tvoří sloupec pravdivostních hodnot popisované funkce. Pravdivostní tabulka pro funkci logického součinu AND je uvedena v tab. 11a.

Pro nevelký počet operandů (dva až čtyři) lze ve stejném významu použít i pravdivostní mapu, což je pravdivostní tabulka uspořádaná do roviny – do formy matice (tab. 11b). První polovina tabulky (pro nulové hodnoty proměnné vyp_1, index 0 a 1) je umístěna v levém sloupci a její druhá polovina (pro jedničkové hodnoty vyp_1, index 2 a 3) je umístěna v pravém sloupci mapy. Obdobně odpovídá dolní řádek nadepsaný vyp_2 řádkům tabulky s jedničkovou hodnotou této proměnné (index 1 a 3) a horní řádek odpovídá nulovým hodnotám proměnné vyp_2 (index 0 a 2). Každé políčko odpovídá jedné kombinaci operandů (stejně jako každý řádek pravdivostní tabulky) a je v něm vepsána pravdivostní hodnota popisované logické funkce. Někdy se zápis funkčních hodnot zjednodušuje a vyplňují se jen políčka s jedničkovou hodnotou – políčka s nulovou hodnotou se ponechají prázdná.

Úloha 1: Realizujte program v LD pro logickou funkci zapsanou výrazem  

vystup_1: = vyp_1 AND vyp_2 AND vyp_3;

Nejprve v bloku deklarací globálních proměnných doplňte nové proměnné vyp_3 a vystup_1, obě typu BOOL. Analyzujte chování programu, popište je slovně a vytvořte pravdivostní tabulku.

Poznámka: Mlčky předpokládáme, že jestliže se v některé úloze nebo v příkladu vyskytne nová proměnná, je třeba doplnit její deklaraci. Není třeba se vázat na jména, uváděná v textu – tvořte svá jména a zapisujte je způsobem, který vám vyhovuje (při zachování pravidel syntaxe pro identifikátory). Zatím vždy půjde o proměnné typu BOOL.

Úloha 2: Realizujte program funkce:

vystup_2 := vyp_2 AND vyp_1;

a porovnejte s chováním obvodu 0005 na obr. 16 (Automa 1/2012, str. 29) pro výstup zar_5. Jsou shodné? Nebo jste našli nějakou odlišnost?

Úloha 3: Realizujte logickou funkci

vystup_3 := zar_5 AND vyp_3; 

a porovnejte s vystup_1. Jsou shodné? Našli jste nějakou odlišnost?

Kontrolní otázka: Proč se v příkladech mohou opakovat stejná jména vstupních proměnných, zatímco jména výstupních proměnných jsou vždy odlišná? Co by se stalo, kdyby byl pro různé funkce použit stejně pojmenovaný výstup?

Úloha 4: Analyzujte chování obvodu 0006 z obr. 16. Slovně popište jeho chování, vytvořte jeho pravdivostní tabulku a mapu.

Příklad 4: Spínací kontakty paralelně – funkce OR

Nyní je požadováno, aby k rozsvícení žárovky postačovalo sepnutí alespoň jednoho z kontaktů vyp_1 nebo vyp_2 – kteréhokoliv z nich nebo obou. Při tradičním řešení elektroinstalace lze úlohu řešit paralelním zapojením obou kontaktů. Motivací k zadání úlohy může být např. potřeba centrálně rozsvítit více svítidel z jednoho místa nezávisle na stavu jejich lokálních vypínačů (překlenout jejich vypnutý kontakt) nebo odblokovat určitý spotřebič, navzdory stavu jeho ovladače.

Řešení: Obvod 0006 z obr. 16 (ve vydání Automa 1/2012 na str. 29).

Logický součet, OR

Podmínku pro rozsvícení žárovky lze slovně popsat výrokem: „zar_6 svítí, jestliže je sepnut kontakt vyp_1 nebo vyp_2“.

Spojka nebo se řekne anglicky „or“ – proto se právě popsaná logická závislost nazývá funkce OR nebo též logický součet. Někdy se upřesňuje, že jde o logický součet inkluzivní, protože není vyloučena současná platnost obou operandů – na rozdíl od výlučného (exkluzivního) logického součtu XOR, kterému bude věnována pozornost později. V jazyku strukturovaného textu (ST) by byla závislost popsána logickým výrazem:

zar_6 := vyp_1 OR vyp_2;

Pravdivostní tabulka a mapa funkce OR je v tab. 12.

Úloha 5: Podobně jako v úlohách 2 a 3 zkontrolujte, zda záleží na pořadí operandů v logickém součtu OR (platí komutativní zákon).

Úloha 6: Realizujte funkce:

vystup_4 := vyp_1 OR vyp_2 OR vyp_3;

vystup_5 := zar_6 OR vyp_3;

a porovnejte je navzájem na aktivním programu a podle pravdivostní tabulky pro každou z funkcí.

Úloha 7: Realizujte funkci 

vystup_6 := vyp_1 AND (vyp_2 OR vyp_3);

a porovnejte ji s funkcí

výstup_7 := (vyp_1 AND vyp_2) OR

(vyp_1 AND vyp_3);

Úloha 8: Realizujte funkci 

vystup_8 := vyp_1 OR (vyp_2 AND vyp_3);

a porovnejte ji s funkcí

vystup_9 := (vyp_1 OR vyp_2) AND

(vyp_1 OR vyp_3);

Úloha 9: V některých výrazech z úloh 7 a 8 jsou nadbytečně použity závorky (v zájmu přehlednosti). Odstraňte je, aniž byste změnili výslednou funkci.

Úloha 10: Ověřte, že výrazy

y1 := vyp_1;

y2 := vyp_1 AND vyp_1;

y3 := vyp_1 OR vyp_1;

dávají shodný výsledek.

Úloha 11: Jaký výsledek dávají výrazy

y4 := vyp_1 AND NOT vyp_1;

y5 := vyp_1 OR NOT vyp_1;

Úloha 12: Jaký výsledek dávají výrazy

y4 AND cokoliv

y4 OR cokoliv

y5 AND cokoliv

y5 OR cokoliv

(cokoliv může být jakákoliv proměnná typu BOOL nebo jakýkoliv booleovský výraz)         

Příklad 5: Rozpínací kontakty sériově – funkce NOR, „ani“

Nyní chceme, aby žárovka svítila, není-li sepnut žádný z kontaktů – tedy ani vyp_1, ani vyp_2. To znamená, že při rozpojení obou (všech) kontaktů žárovka svítí a sepnutím kontaktu kteréhokoliv z vypínačů (nebo obou) ji zhasneme. Pro osvětlování nemá úloha velký význam, podle této zásady se ale obvykle zapojují kontakty zabezpečovacích prvků.

Řešení 1: V tradiční elektroinstalaci by byla úloha řešena sériovým zapojením rozpínacích kontaktů, kterému v programu LD odpovídá obvod č. 0007. Jeho funkci lze popsat výrokem:

zar_7 svítí, jestliže není sepnut ani kontakt vyp_1, ani vyp_2

nebo logickým výrazem:

zar_7 := (NOT vyp_1) AND (NOT vyp_2);

Řešení 2:

Uvědomíme-li si, že ke zhasnutí žárovky stačí sepnutí jednoho z vypínačů vyp_1 nebo vyp_2, lze podmínku pro svit žárovky formulovat výrokem: „zar_8 nesvítí, jestliže je sepnut kontakt vyp_1 nebo vyp_2“, nebo logickým výrazem:

zar_8 := NOT (vyp_1 OR vyp_2);

Řešením v LD je paralelní kombinace kontaktů (funkce OR), kterou je ovládána negovaná cívka. Odpovídá mu obvod č. 0008 podle obr. 5c.

Funkce NOR

Logická závislost, podle které je ovládána žárovka zar_8, je negací funkce logického součtu – negace OR, a je obvykle nazývána jako funkce NOR, někdy je označována jako Pierceova funkce nebo funkce „ani“. Její pravdivostní mapa je v tab 13.

Příklad 6: Rozpínací kontakty paralelně – funkce NAND

Tento příklad je zde uveden především pro souvislost s postupy při vypracovávání návrhu logických funkcí pevnou logikou. Je požadováno, aby žárovka svítila, je-li alespoň jeden z kontaktů vyp_1 nebo vyp_2 (nebo oba) vypnutý. Jestliže jsou oba sepnuté, žárovka nesvítí.

Řešení 1: V tradiční elektroinstalaci by byla úloha řešena paralelním zapojením rozpínacích kontaktů, kterému v programu LD odpovídá obvod č. 0009. Jeho funkci lze popsat výrokem: „zar_9 svítí, jestliže je rozepnut kontakt vyp_1 nebo vyp_2“,

nebo logickým výrazem:

zar_9 := (NOT vyp_1) OR (NOT vyp_2);

Řešení 2: Uvědomíme-li si, že ke zhasnutí žárovky je nutné, aby oba z kontaktů vypínačů vyp_1 vyp_2 byly sepnuté, je možné podmínku pro svit žárovky formulovat výrokem: „zar_10 nesvítí, jestliže je sepnut kontakt vyp_1 vyp_2“,

nebo rovnocenně „zar_10 svítí, jestliže není pravda, že je sepnut kontakt vyp_1 vyp_2“,

nebo logickým výrazem:

zar_10 := NOT (vyp_1 AND vyp_2);

Řešením v LD je sériová kombinace kontaktů (funkce AND), kterou je ovládána negovaná cívka. Odpovídá mu obvod č. 0010 podle obr. 16.

Funkce NAND

Při řešení pevné logiky s integrovanými obvody malé a střední hustoty integrace se často používaly obvody typu NAND (NOT AND, negovaný logický součin). Důvodem byla skutečnost, že k realizaci této funkce postačovalo méně prvků ve struktuře integrovaného obvodu než pro AND nebo OR. Při programování je funkce NAND již bezvýznamná. Její pravdivostní mapa je v tab 14.

Souvislosti mezi AND a OR, Morganovy zákony

Je možné ověřit, že obě řešení příkladu 5 a 6 jsou rovnocenná, ačkoliv souvislost mezi tak odlišnými funkcemi jako AND a OR může být překvapující. To je podstatou Morganových pravidel (tradičně se používá pojmenování De Morganových zákonů). Jedno z nich bylo ověřeno na příkladu 5:

NOT (vyp_1 OR vyp_2) = (NOT vyp_1) AND (NOT vyp_2)

nebo rovnocenně

vyp_1 OR vyp_2 = NOT ((NOT vyp_1) AND (NOT vyp_2))

 Druhé z Morganových pravidel je formálně obdobné, jen jsou v něm navzájem prohozeny operátory AND a OR:

NOT (vyp_1 AND vyp_2) = (NOT vyp_1) OR (NOT vyp_2)

nebo rovnocenně

vyp_1 AND vyp_2 = NOT ((NOT vyp_1) OR (NOT vyp_2))

Tato souvislost byla ověřena na příkladu 6.

 Ladislav Šmejkal

Tab. 11a. Pravdivostní tabulka funkce logického součinu (AND)

Tab. 11b. Pravdivostní mapa funkce logického součinu (AND)

Tab. 12a. Pravdivostní tabulka funkce logického součinu OR

Tab. 12b. Pravdivostní mapa funkce OR

Tab. 13. Pravdivostní mapa funkce NOR

Tab. 14. Pravdivostní mapa funkce NAND