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 9)

Tato část seriálu je věnována hlubšímu výkladu teorie kombinačních logických funkcí – prahovým a obecným symetrickým funkcím. Nacházejí uplatnění především v zabezpečovací technice. Je zde uveden jen jediný řešený příklad, zato je tu dostatek zadání úloh k řešení. Úspěšná řešení úloh zaslaná autorovi (smejkal.automa@seznam.cz) mohou být zveřejněna na webových stránkách www.automa.czvčetně komentářů a diskuse.

Prahové funkce

Prahové funkce jsou zobecněním funkce majority ze tří – nebo jinak: funkce m3 je zvláštním případem prahových funkcí. Nabývají jedničkové hodnoty, jestliže je počet jejich jedničkových operandů větší nebo roven prahové hodnotě (hodnotě prahu). Obecně se nazývají alespoň k z n, zkráceně jsou označovány p_k_n, kde je hodnota prahu a je počet operandů. Na obr. 23 jsou zobrazeny K-mapy pro prahové funkce čtyř proměnných p_1_4, p_2_4, p_3_4, p_4_4. Funkci m3 je možné rovnocenně zapsat jako p_2_3.

Příklad 10 (program p_2_4):
Převeďte prahovou funkci alespoň dva ze čtyř (p_2_4) na minimalizovaný logický výraz s využitím K-mapy.

Řešení: Na obr. 24bobr. 24g
jsou uvedeny K-mapy dílčích funkcí, které jsou tvořeny čtveřicí sousedních políček (f1f6). Množinovým sjednocením obrazců (logickým součtem jejich výrazů – dvoumístných součinových členů) se získá výsledná logická funkce

f1 := a & b;

f2 := a & c;

f3 := a & d;

f4 := b & c;

f5 := b & d;

f6 := c & d;

p_2_4 := f1 OR f2 OR f3 OR f4 OR f5  OR f6;

p_2_4 := a & b OR a & c OR a & d OR b & c OR b & d OR c & d;

Obecný závěr: Obdobně, jako je minimalizovaný výraz m3 (p_2_3) tvořen logickým součtem tří dvoumístných so učinových členů, v nichž jsou vystřídány všechny kombinace dvou operandů v přímém tvaru (bez negace), platí i zde, že minimalizovaný výraz pro p_2_4 je tvořen logickým součtem dvoumístných součinů (zde šesti), v nichž se vystřídají všechny kombinace dvojic operandů bez negace. Tato zásada platí pro všechny prahové funkce s libovolným prahem a pro libovolný počet operandů. Vytvoření výrazu minimální formy pro prahovou funkci je otázkou kombinatoriky.

Úloha 32 (úplné normy): Pro každou prahovou funkci čtyř proměnných (podle K-map na obr. 23) vytvořte úplnou disjunktní normu a podle ní program v jazyce ST a LD.

Úloha 33 (minimalizované normy): Pro každou prahovou funkci čtyř proměnných (podle K-map na obr. 23) vytvořte minimalizovanou disjunktní normu a podle ní program v jazyce ST a LD. K minimalizaci použijte K-mapu nebo algebraické úpravy výrazů, nikoliv obecný závěr. Porovnejte složitost a přehlednost programů v ST a LD s programy z úlohy 32.

Úloha 34 (vytýkání před závorku): Řešení předchozí úlohy (minimalizované normy) upravte vytýkáním před závorky a převeďte na program v ST a LD – porovnejte jejich složitost a účelnost úprav.

Poznámka: Z K-mapy na obr. 23 je patrné, že prahová funkce p_1_4 je shodná s funkcí logického součtu OR a prahová funkce p_4_4 je shodná s funkcí logického součinu AND. Tato zákonitost platí pro libovolný počet operandů a vyplývá z podstaty operací OR a AND.

Úloha 35 (majorita z pěti): Realizujte program funkce majorita z pěti (m5 = p_3_5) v ST a LD.

Úloha 36 (prahové funkce pro pět proměnných): Realizujte program pro ostatní prahové funkce pěti proměnných v ST a LD.

Symetrie prahových funkcí

Pravdivost prahových funkcí (a tedy i boo­leovských operátorů AND a OR a majoritních funkcí) nezávisí na kombinaci hodnot operandů, ale jen na počtu jejich jedničkových hodnot – jsou tedy symetrické. Například pro pravdivost prahové funkce p_1_4 (operátor OR) stačí, aby byl pravdivý jeden, dva, tři nebo čtyři operandy (aby počet jedničkových operandů byl číslem z množiny (1, 2, 3, 4) nebo rovnocenně, aby aritmetický součet operandů byl nenulový, a to pro libovolné kombinace operandů). Podobně pro pravdivost prahové funkce p_2_4 je nutné, aby byly jedničkové dva, tři nebo čtyři operandy – aby počet operandů byl číslem z množiny (2, 3, 4) nebo aby součet hodnot operandů byl alespoň číslem 2. Pro funkci p_3_4 obdobně platí, že jedničkové mají být tři nebo čtyři operandy – počet operandů je číslem z množiny (3, 4) nebo součet hodnot operandů je alespoň číslem 3. A pro funkci p_4_4 (operátor AND) je nutné, aby byly jedničkové všechny čtyři operandy – aby počet operandů byl číslem z množiny (4) nebo aby součet hodnot operandů byl roven číslu 4.

Prahové funkce a počet jedničkových operandů

Množina čísel, která určuje pravdivost symetrické funkce, se nazývá definiční množina. Pro úplnost uveďme, že pro jedničkovou funkci (rovnou jedné pro všechny hodnoty operandů) je definiční množina rovna (0, 1, 2, 3, 4 – všechna čísla od nuly až do maximálního počtu operandů). Tato množina je označována jako úplná množina. Pro nulovou funkci je definiční množina prázdná nebo rovnocenně může obsahovat libovolné číslo větší, než je maximální počet operandů – v uváděném příkladu (5).

Negovaná symetrická funkce je rovněž symetrická, ale její definiční množina je doplňkem definiční množiny původní funkce k úplné množině. Negace prahové funkce p_1_4 (negace operátoru OR, operátor NOR) je pravdivá, jestliže žádný z operandů není jedničkový s definiční množinou (0). Obdobně platí, že funkci NOT(p_2_4) je přiřazena definiční množina (0, 1), funkci NOT(p_3_4) definiční množina (0, 1, 2). Funkci NOT(p_4_4), tedy negovanému operátoru AND (NAND), přísluší definiční množina (0, 1, 2, 3) a je pravdivá, jestliže nejsou všechny operandy jedničkové – alespoň jeden je nulový. Je zřejmé, že negace nulové funkce je jedničková funkce a naopak.

Ze symetrické podstaty prahových funkcí vyplývá možnost jejich netradiční realizace. Spočívá v tom, že se spočtou jedničkové operandy (nebo aritmeticky sečtou jejich hodnoty) a toto číslo se porovná s čísly definiční množiny. Pro prahové funkce stačí realizovat nerovnosti:

p_1_4 (OR):          počet ≥ 1 nebo počet > 0,

p_2_4:                   počet ≥ 2 nebo počet > 1,

p_3_4:                   počet ≥ 3 nebo počet > 2,

p_4_4 (AND):       počet = 4 nebo počet > 3,

a pro jejich negace:

NOT(p_1_4), NOR:      počet < 1 nebo počet 0,

NOT(p_2_4):        počet < 2 nebo počet ≤ 1,

NOT(p_3_4):        počet < 3 nebo počet ≤ 2,

NOT(p_4_4), NAND:   počet <> 4 nebo počet ≤ 3.

Úloha 37 (negace prahových funkcí pro čtyři proměnné): Vytvořte K-mapu pro negované prahové funkce čtyř proměnných, NOT p_1_4 (NOR), NOT p_2_4, NOT p_3_4, NOT p_4_4 (NAND), a realizujte program podle jejich minimalizované formy v jazycích ST a LD.

Úloha 38 (de Morganova pravidla): Porovnejte K-mapy nebo logické výrazy prahových funkcí pro čtyři proměnné s jejich negacemi a najděte mezi nimi souvislosti obdobné de Morganovým pravidlům.

Úloha 39 (spočtení jedničkových operandů – funkce): Vytvořte program ve ST, který spočte jedničkové bity ze souboru osmi (popř. 16 nebo 32 operandů). V první verzi jej realizujte jako uživatelskou funkci, jejímž vstupním parametrem je proměnná typu BYTE (popř. WORD, DWORD), jejíž každý z osmi (popř. 16, 32) bitů je jedním z operandů a výstupem je pak proměnná typu USINT, která obsahuje číslo v rozsahu 0 až 8 (popř. 0 až 16 nebo 0 až 32) ve významu počtu jedničkových bitů (aritmetickému součtu hodnot booleovských operandů).

Úloha 40 (spočtení jedničkových operandů – funkční blok): Vytvořte program v ST, který průběžně počítá jedničkové bity. Ve druhé verzi jej realizujte jako funkční blok se dvěma vstupními parametry. První je proměnná typu BOOL ve významu jednoho ze souboru operandů, jejíž binární hodnota se přičte k výsledku. Druhá je rovněž proměnná typu BOOL a slouží k počátečnímu vynulování výsledku (reset) – jeho účinek má přednost před vstupem pro operand. Výstupním parametrem je postupně nastřádaný součet (počet operandů). Zvažte možnost vytvořit originální funkční blok nebo k jeho realizaci využít standardní funkční blok čítače CTU.

Úloha 41 (výpočet hodnot prahových funkcí): S využitím výsledku předchozích úloh 39 a 40 realizujte program, který vyčíslí hodnotu prahových funkcí čtyř proměnných a jejich negací. Obdobně realizujte prahové funkce a jejich negace pro větší počet operandů.

Poznámka: S použitím prahových funkcí lze realizovat libovolné logické funkce, podobně jako s booleovskými operátory AND, OR a NOT nebo s operátory NAND a NOR. Byla zpracována ucelená teorie realizace sítí prahových obvodů, které byly předobrazem současných umělých neuronových sítí.

Obecné symetrické funkce

Existuje mnoho typů dalších symetrických funkcí, z nichž některé se uplatňují v praxi. Uveďme jen několik příkladů. Mezi ně patří funkce výlučného součtu XOR. Obvykle se uvádí, že je shodná s funkcí nonekvivalence (neshody), s funkcí liché parity a součtu modulo 2 (m2). To ale platí jen pro dva operandy. Pro tři a více operandů již jde o odlišné funkce – pouze funkce liché parity a součtu modulo 2 jsou shodné pro libovolný počet operandů.

Funkce výlučného součtu (Exklusive OR, XOR) je popsána formulí „buď je pravdivý operand a, anebo operand b, nikoliv oba současně“. Pravdivý může být jen jediný z operandů – funkci lze rovněž popsat jako „právě jeden z operandů a, b“. Pro obecný počet operandů se označuje jako „s_1_n“. Na obr. 25 jsou uvedeny K-mapy pro tuto funkci se dvěma, třemi a čtyřmi operandy (s_1_2, s_1_3, s_1_4). Definiční množinou funkce s_1_n je (1).

Funkce neshody (nonekvivalence) je pro dva operandy definována formulí „a, b mají odlišné hodnoty“ nebo „není pravda, že a, b jsou shodné“. Formuli lze zobecnit pro libovolný počet operandů (obr. 26) a její definiční množinou pro dva operandy je (0, 2), pro tři operandy (0, 3), pro čtyři operandy (0, 4), pro operandů (0, n).

Funkce liché parity (parity Odd, PO) je jedničková pro lichý počet operandů (1, 3, 5, 7, …). Stejná je i její definiční množina. Je definována logickým výrazem

PO := a XOR b XOR c XOR d, …

Její K-mapy pro dvě až čtyři proměnné jsou na obr. 27. Pro funkci liché parity je charakteristický šachovnicový tvar pokrytí K-mapy. Její negací je funkce sudé parity (Parity Even, PE) s definiční množinou (0, 2, 4, 6, …). Funkce součtu modulo 2, (mod2, m2) je definována jako nejnižší bit součtu dvojkových čísel (se zanedbáním přenosu). Je shodná s funkcí liché parity (obr. 27).

Poznámka: Symbol XOR je definován jako funkce výlučného součtu dvou proměnných a je používán jako binární operátor (spojující dvě proměnné) v logických výrazech. Pro funkci výlučného počtu pro tři a více proměnných se symbol XOR nepoužívá.

Elementární symetrické funkce lze pro obecný případ formulovat jako „právě k z n ope­randů je jedničkových“ a budou označovány s_k_n. Pro čtyři operandy existují čtyři elementární symetrické funkce: „právě jeden ze čtyř“ (s_1_4, výlučný součet) s definiční množinou (1), „právě dva ze čtyř“ (s_2_4) s definiční množinou (2), „právě tři ze čtyř“ (s_3_4) s definiční množinou (3) a „právě čtyři ze čtyř“ (s_4_4 = p_4_4, AND) s definiční množinou (4) – obr. 28. Libovolnou symetrickou funkci lze realizovat jako logický součet OR vhodných elementárních symetrických funkcí. Například pro prahové funkce čtyř proměnných platí:

 p_1_4 =   s_1_4 OR s_2_4 OR s_3_4 OR s_4_4,

p_2_4 =   s_2_4 OR s_3_4 OR s_4_4,

p_3_4 =   s_3_4 OR s_4_4,

p_4_4 =   s_4_4,

pro funkci liché parity platí:

PO = s_1_n OR s_3_n OR s_5_n OR 7_n OR …

Úloha 42 (výrazy pro obecné symetrické funkce): Podle K-map na obr. 26obr. 28 vytvořte logické výrazy a program v ST a LD. Pokuste se o minimalizaci logických výrazů.

Úloha 43 (obecné symetrické funkce): Stejné funkce realizujte programem v ST s využitím součtu jedničkových operandů.

Ladislav Šmejkal

Obr. 23. K-mapy všech prahových funkcí pro čtyři proměnné

Obr. 24. Postup minimalizace funkce p_2_4 s použitím K-mapy

Obr. 25. K-mapy funkce výlučného součtu („alespoň 1 z n“) pro dva, tři a čtyři operandy

Obr. 26. K-mapy funkce neshody pro dva, tři a čtyři operandy

Obr. 27. K-mapy funkce liché parity (součtu modulo 2) pro dva, tři a čtyři operandy

Obr. 28. K-mapy funkce elementárních symetrických funkcí pro čtyři operandy