V předchozím pokračování byli čtenáři na řešených příkladech a zadaných úlohách seznámeni se základními logickými funkcemi a nepřímo i s pravidly Booleovy algebry. Součástí tradičního postupu návrhu logických systémů s pevnou logikou byla i minimalizace logických funkcí. Pro programování PLC ale už nemá zásadní význam – je jí věnována úvodní poznámka. Řešené příklady jsou věnovány ovládání svítidel na schodištích a chodbách, což je vhodná záminka pro seznámení s funkcemi výlučného součtu (exklusive OR, XOR), součtu modulo 2, liché a sudé parity, ekvivalence a neekvivalence.
Booleova algebra a minimalizace
Lze dokázat, že jakoukoliv logickou závislost mezi dvouhodnotovými proměnnými (logickou funkci) je možné popsat s použitím tří operátorů, AND, OR a NOT, s využitím pravidel Booleovy algebry. Soubor pravidel je uveden v kterékoliv učebnici matematické logiky nebo v učebnici navrhování logických systémů (např. v [6]). V tomto seriálu s nimi autor neformálně seznamoval na příkladech a úlohách a seriál se jim dále nebude věnovat. Existují i jiné algebry logiky, např. založené jen na operátoru NAND nebo jen NOR a nebo na obou operátorech, popř. na operátoru XOR. Booleova algebra i jiné algebry jsou hojně využívány při navrhování pevné logiky, zejména s integrovanými obvody, lze je využít zejména k minimalizaci logických výrazů a následně struktury logických sítí, kterými jsou logické funkce realizovány. Především v éře integrovaných obvodů malé (SSI – Small Scale Integration) a střední hustoty integrace (MSI – Medium Scale Integration) měla minimalizace struktury logických obvodů zásadní význam (v období 60. až 80. let dvacátého století). Jednodušší logické výrazy bylo možné realizovat s menším počtem integrovaných obvodů, a tedy i s menšími požadavky na objem, spotřebu energie a chlazení. Minimalizace tak mnohdy ovlivňovala realizovatelnost logických zařízení a jejich konkurenceschopnost.
Při použití programovatelných logických obvodů vysoké (LSI – Large Scale Integration) a velmi vysoké hustoty integrace (VLSI – Very Large Scale Integration), a zejména při řešení logiky programem ztratila minimalizace logických výrazů svůj strategický význam. U programovatelných logických obvodů lze minimalizací ovlivnit nanejvýš výběr vhodného typu obvodu, a tím (do určité míry) i cenu, popř. rozměry zařízení. Při realizaci logických funkcí programem (mikrořadiče, PC, PLC – v jakémkoliv jazyce) je minimalizací ovlivňována délka programu, a tudíž i požadavky na paměť, doba vykonání programu, ale i rozsah a přehlednost výpisu programu. Současné programovatelné systémy mají k dispozici dostatek paměti pro program i dostatečný výpočetní výkon, a tak důsledná minimalizace programu ztratila svou důležitost. Naproti tomu se významným kritériem stala produktivita práce programátorů, především rychlost vytvoření programu, jeho spolehlivost a minimum chyb, ale i jeho přehlednost, opravitelnost, variabilnost a rozšiřitelnost. Ale i produktivita programování souvisí se složitostí programů a přehledností jejich zápisu. Chaoticky vytvořený a nepřehledně zapsaný program, plný balastních příkazů (mnohdy neúplných nebo rozporných) s obtížemi pochopí sám autor, zvláště s časovým odstupem – a pro cizího programátora je mnohdy jednodušší vytvořit program (nebo jeho část) znovu.
Systematickým zadáváním a jednodušší strukturou logických výrazů se získá přehledný zápis programu, který lze snáze pochopit a omezit riziko chyb – a jestliže vzniknou, snáze je lokalizovat a odstranit. Je zřejmé, že situace s minimalizací logických výrazů při programování není jednoznačná. Ve výhodě je programátor, který umí používat efektivní programovací jazyky a metody programování a současně má zažitou teorii logických systémů a umí alespoň zadat, zjednodušit a zpřehlednit logické výrazy ve svém programu. Není nutná „absolutní minimalizace“ (ta byla iluzí i dříve), stačí mít zažité intuitivní postupy (technický cit). Užitečná je znalost postupu od zadání funkce pravdivostní tabulkou nebo mapou a znalost jednoduchých metod minimalizace, např. práce s Karnaughovou mapou (K-mapou), a znalost základních pravidel Booleovy algebry při upravování logických výrazů. K těmto dovednostem se bude seriál postupně vracet, zejména v části věnované programování v jazyce strukturovaného textu (ST).
Příklad 7: Schodišťový vypínač – funkce neshody, XOR, lichá parita
Předpokládejme, že je požadováno řídit osvětlení schodiště programem PLC – nahradit tradiční dvojici schodišťových vypínačů (přepínačů) dvojicí jednoduchých vypínačů s kontakty připojenými k PLC. Tento problém se obvykle řeší v případě, kdy je teprve po určité době používání elektroinstalace zřejmé, že některá svítidla by bylo účelné ovládat ze dvou nebo z více míst. Při ovládání osvětlení schodiště (nebo jiného svítidla) dvěma schodišťovými vypínači jsou jejich přepínací kontakty zapojeny proti sobě. Při každé změně stavu kteréhokoliv přepínače se změní i stav svítidla na opačný. Je jen otázka konvence (nebo náhody), zda pro zhasnutí jsou oba přepínače ve stejné poloze, nebo v opačné – důležité je, že se změnou jejich polohy se mění i stav svítidla.
Řešení 1 (se sérioparalelní kombinací kontaktů): Přepínací kontakt lze považovat za sestavu spínacího a rozpínacího kontaktu. Obvod 0001 na obr. 17 realizuje s kontakty vyp_1 a vyp_2 funkci schodišťového vypínače, který rozsvítí světlo (svit_1) při rozdílném stavu obou kontaktů a zhasne při jejich shodné poloze.
Neshoda (nonekvivalence)
Podmínku pro osvětlení svit_1 lze vyjádřit výrokem:
„žárovka svit_1 svítí, pokud jsou stavy kontaktů vyp_1 a vyp_2 opačné“
Proto je tato logická funkce často nazývána jako funkce neshody (nonekvivalence).
Lichá parita
Shodnou podmínku pro svit žárovky lze formulovat výrokem:
„svit_1 je aktivní, pokud je sepnutý lichý počet z kontaktů vyp_1, vyp_2“
Pro dva kontakty je lichým počtem právě jednička (jediný kontakt), ale tuto podmínku lze snadno zobecnit pro větší počet kontaktů.
Modulo 2, M2
Rovnocennou funkcí je součet modulo 2 (M2). Je možné si ho představit jako hodnotu nejnižšího bitu v součtu dvou a více dvojkových čísel – výsledek sčítání bez přenosu.
Výlučný logický součet, XOR
Stav žárovky lze popsat rovnocennou podmínkou:
„svit_1 svítí, pokud je sepnutý jediný z obou kontaktů vyp_1, vyp_2“
Někdy je tato závislost nazývána jako logická funkce právě jeden ze dvou. Rovnocenná je podmínka:
„svit_1 svítí, pokud je sepnutý buď kontakt vyp_1, anebo vyp_2 (nikoliv oba současně)“
Jde tedy o funkci logického součtu, ve kterém je vyloučena současná platnost obou operandů. Proto se nazývá výlučný logický součet, anglicky Exclusive OR, zkráceně XOR. Zkratka XOR je současně používána jako operátor pro funkci výlučného logického součtu v programech. Závislost lze pak zapsat logickým výrazem:
svit_2 := vyp_1 XOR vyp_2;
Viz obvod 0002 na obr. 17.
Všechny uvedené podmínky jsou pro ovládání světla na schodišti se dvěma kontakty rovnocenné a odpovídá jim obvod 0001 na obr. 17. Kontaktní schéma lze přepsat na logický výraz (příkaz v jazyku ST):
svit_1 := ((NOT vyp_1) AND vyp_2)
OR (vyp_1 AND (NOT vyp_2));
Tento výraz tedy přesně určuje logickou funkci operátoru XOR s pomocí operátorů AND a OR.
Řešení 2 (s funkčním blokem XOR): Obvod 0002 na obr. 17 realizuje stejnou funkci. Je v něm použito volání standardní funkce XOR (liché parity), na jejíž vstupy jsou přivedeny oba kontakty vyp_1, vyp_2. Vnitřní popis bloku symbolizuje, že jde o funkci liché parity, která je pro dvě proměnné rovna funkci XOR.
Příklad 8: schodišťový vypínač – jiné uspořádání, funkce shody, sudá parita
Nyní předpokládejme obdobnou situaci jako v předchozím příkladu, pouze s tím rozdílem, že je požadováno, aby světlo svítilo, jsou-li oba vypínače shodně srovnané (oba v dolní nebo oba v horní poloze). Jestliže jsou v opačných polohách, světlo nesvítí.
Řešení 1 (se sérioparalelní kombinací kontaktů): Požadavek řeší obvod 0003 z obr. 17.
Shoda, ekvivalence
Podmínku pro svit žárovky svit_3 lze nyní vyjádřit výrokem:
„svit_3 svítí, pokud jsou stavy kontaktů vyp_1, vyp_2 shodné“
Proto je tato logická funkce často nazývána funkce shody (ekvivalence).
Sudá parita
Rovnocenná je podmínka:
„svit_3 svítí, pokud není sepnutý žádný z kontaktů vyp_1, vyp_2 nebo jsou sepnuté oba“
To je totéž jako podmínka:
„svit_3 svítí, pokud je sepnutý sudý počet kontaktů vyp_1, vyp_2 (0 nebo 2)“
Pro dva kontakty je sudým počtem 0 (žádný kontakt) nebo 2 (oba kontakty). Proto je tato závislost nazývána funkce sudé parity.
Všechny uvedené podmínky jsou pro dva kontakty rovnocenné a odpovídá jim obvod 0003 na obr. 17. Ten lze přepsat na logický výraz:
svit_3 := ((NOT vyp_1) AND (NOT vyp_2) OR (vyp_1 AND vyp_2);
Je možné ověřit, že žárovka svit_3 svítí opačně než žárovky svit_1, svit_2. Logická podmínka pro rozsvícení svit_3 je tedy negací podmínek pro rozsvícení svit_1, svit_2. Je to přirozené při vědomí, že neshoda je opakem shody a lichá parita je opakem sudé.
Řešení 2 (negace obvodu XOR): K řešení úlohy je možné využít výsledek předchozího příkladu, který je znegován – použije se negovaná výstupní cívka (obvod 0004 na obr. 17).
Řešení 3 (negace standardní funkce XOR): Přehlednější výsledek se získá s voláním standardní funkce XOR (liché parity) a pro výsledek je využit negovaný výstup – zapíše se do negované cívky (obvod 0005 na obr. 17).
Řešení 4 (negovaný operand standardní funkce XOR):
Pro zajímavost uveďme ještě další rovnocenné řešení z obr. 17 (obvod 0006). Zde je rovněž zvoleno volání standardní funkce XOR (liché parity), ale jako její operand (vstupní proměnná) je použita negace vyp_1; výstup pak již lze použít přímo. Rovnocenně bylo možné použít i negovaný druhý vstup vyp_2. Platí totiž vztahy
(NOT vyp_1) XOR vyp_2 = NOT(vyp_1 XOR vyp_2);
nebo
vyp_1 XOR (NOT vyp_2) = NOT(vyp_1 XOR vyp_2);
O pravdivosti vztahů se lze snadno přesvědčit.
Úloha 13: Vytvořte pravdivostní tabulku pro funkci XOR a její negaci pro dva operandy.
Úloha 14: Dokažte předchozí dva vztahy – že negací jednoho z operandů funkce XOR bude realizována negace výsledku.
Úloha 15: Vytvořte pravdivostní tabulku pro výsledek výrazu (y6)
y6 := vyp_1 XOR vyp_2 XOR vyp_3;
Úloha 16: Zobecněte pro tři proměnné funkce „právě jeden z operandů vyp_1, vyp_2, vyp_3 je jedničkový“, „lichý počet jedničkových operandů vyp_1, vyp_2, vyp_3“ a „trojice operandů vyp_1, vyp_2, vyp_3 nemají shodné hodnoty. Vytvořte pro každou z funkcí pravdivostní tabulku. Porovnejte funkční hodnoty těchto tří funkcí s funkcí y6. Jsou shodné? Zkuste napsat program pro všechny funkce v LD a jako výrazy v ST.
Úloha 17: Zobecněte pro tři proměnné funkce „sudý počet jedničkových operandů vyp_1, vyp_2, vyp_3“ a „trojice operandů vyp_1, vyp_2, vyp_3 mají shodné hodnoty“ a výraz
y7 := NOT y6;
Vytvořte pro každou z funkcí pravdivostní tabulku a porovnejte funkční hodnoty. Jsou shodné? Zkuste napsat program pro všechny funkce v LD a jako výrazy v ST.
Úloha 18: Zobecněte řešení schodišťového vypínače pro tři a více proměnných. Nejprve navrhněte řešení pro použití tradiční instalace (bez použití PLC, jen s obvyklými instalačními prvky) a pak s PLC v LD a ST (nejprve jen s booleovskými operátory AND, OR a NOT a pak i s použitím funkce XOR).
Úloha 19: Realizujte funkce
y7 := y4 XOR vyp_1
a
y8 := y7 XOR vyp_1
Proměnné y4 a y5 byly realizovány v úloze 11.
Ladislav Šmejkal
Obr. 17. Program s funkcí schodišťového vypínače (XOR) v jazyku LD
Tab. 15. Pravdivostní mapa funkce XOR (liché parity, neshody) pro dva operandy
Tab. 16. Pravdivostní mapa funkce sudé parity (shody) pro dva operandy