Aktuální vydání

celé číslo

05

2019

komunikace a software pro snímače a akční členy

tlakoměry

celé číslo

Inspiromat pro výuku a Tecomat: logika (nejenom) pro programátory – Díl II, část 5

Přímé řešení pravdivostní tabulkou

Pravdivostní tabulka je uspořádaná řada hodnot charakterizovaných jejich pořadovým číslem – indexem. Z pohledu struktury dat je to jednorozměrné pole – tedy vektor. Norma IEC 61131-3 poskytuje soubor nástrojů pro práci se strukturami dat [1], [2], [4], [8]. Jejich využití nabízí velmi výkonný, univerzální a názorný nástroj pro řešení (nejen) logických funkcí. Stačí tabulku deklarovat a do paměti uložit jako jednoduchou strukturu, tedy pole – v podstatě ji opsat ze zadání. Formát položek tabulky může být jednobitový, tedy typu BOOL. Pro skupinu logických funkcí (sdruženou pravdivostní tabulku) nebo pro tabulku kódů má formát BYTE (skupina osmi bitů), popř. WORD (slovo, 16 bitů), DWORD (double word, dvojité slovo, 32 bitů) či LWORD (long word, dlouhé slovo, 64 bitů). Pro obvyklé úlohy stačí položky typu BOOL a BYTE, výjimečně WORD. Někdy je index k dispozici již v podobě čísla (obvykle jako vstupní kód při převodu kódů tabulkou, např. při převodu čísla na kód segmentového nebo jiného zobrazovače). Většinou bývají operandy nezávislé bitové proměnné, „roztroušené“ v poli bitových proměnných. Pak je třeba je postupně „posbírat“, zapsat je ve shodném pořadí, v jakém jsou uvedeny v záhlaví pravdivostní tabulky v zadání (obvykle v proměnné typu BYTE). Tato skupina bitů bude následně interpretována jako pořadové číslo položky v tabulce, která bude následně z tabulky vybrána. Má-li položka jednobitový formát BOOL, může být přímo uložena na místo určení (jako vnitřní nebo výstupní proměnné). Podobně je možné na místo určení uložit výslednou kódovou kombinaci. Jestliže měla pravdivostní tabulka význam skupiny nezávislých logických funkcí, je třeba jednotlivé bity z položky (typu BYTE nebo WORD) postupně separovat a zapisovat na místa určení.

Při využití datových struktur lze zvolit i postup, při kterém se do paměti uloží jen vybrané kombinace operandů, jež odpovídají jedničkovým funkčním hodnotám. Potom se použije postup, kdy se s těmito položkami porovnává aktuální kombinace hodnot operandů, sestavená jako v předchozím případě. Je-li prohledávání úspěšné (je zjištěn souhlas některé položky s aktuální kombinací operandů), bude výstupní hodnota funkce jedničková, jinak bude nulová. Práce s daty dovoluje používat i složitější postupy se složitějšími strukturami dat. Pak je např. možné, aby při nalezení shody byla k položce přiřazena odpovídající kombinace bitů vybraná z druhé části položky.

Přímé řešení logických funkcí tabulkami používají programátoři PLC jen výjimečně – ke své škodě. S výjimkou triviálních případů lze tímto postupem získat podstatně úspornější (mnohdy nejúspornější) a přehlednější řešení než tradičními postupy – s minimálním úsilím a v kratší době. Není nutné zabývat se logickými výrazy, řešit jejich pracné úpravy a je omezeno i riziko vzniku chyb. Logické funkce zadané tabulkami jsou názornější než jejich tradiční zápis v programu (v jakémkoliv programovacím jazyce). Významnou předností je variabilnost řešení. Při jakémkoliv požadavku na změnu zadání stačí jen změnit obsah odpovídajících tabulek. Používání tabulek a jiných datových struktur při programování odpovídá zásadě Niclause Wirtha, autora programovacího jazyka Pascal, že program = algoritmy + struktury dat (uvedeno v knize Algorithms and Data Structures z roku 1974). Čím větší podíl v programu tvoří data oproti příkazům, tím kvalitněji je vytvořen. Problematika využití dat je zásadní pro efektivní programování a zaslouží si zpracování podrobnější metodiky.

S tabulkami lze pracovat i při řešení pevnou logikou. V tom případě jsou tabulky uloženy v paměťových obvodech, se kterými se zachází stejně jako s jinými integrovanými obvody. Mohou být i součástí programovatelných zákaznických obvodů.1) 

Úloha 12

Vytvořte program, který popsaným postupem řeší funkci majority z pěti M3 = P35, popř. další funkce zadané pravdivostní tabulkou. Stejné funkce řešte tradičním postupem s logickými výrazy. Porovnejte složitost a názornost obou postupů a s řešením úlohy 10. 

Úloha 13

Postup z předchozí úlohy zobecněte pro zvolený počet operandů (např. pět nebo pro počet volitelný jako vstupní parametr), navrhněte a vytvořte univerzální uživatelský funkční blok. Vytvořte varianty funkčního bloku pro tabulku formátu BOOL, BYTE a WORD. 

Spojité veličiny a generování logických proměnných, virtuální senzory

Již bylo uvedeno, že zdrojem logických proměnných často bývají snímače s dvouhodnotovým výstupem – např. polohové a koncové spínače, optické závory, požární a bezpečnostní hlásiče, hlásiče pohybu apod. Logické proměnné ale mohou být vytvářeny programem jako vnitřní proměnné odvozené od hodnot spojitých proměnných – přesněji číslicových proměnných, které vznikly převodem analogových vstupních signálů ve vstupních A/D převodnících a jsou uložené v některém z formátů pro zobrazení čísel. Obvykle nesou informaci o poloze, rychlosti a zrychlení, frekvenci, teplotě, vlhkosti, tlaku nebo vibracích, ale třeba i o čase nebo počtu. Někdy se tento postup označuje jako virtuální senzory – zdánlivé senzory, které poskytují informaci o veličině, jež ale ve skutečnosti není měřena. Je to však zjednodušení obecného případu. Obecně mohou být virtuální senzory realizovány podstatně komplikovanějším způsobem, kdy jsou zpracovávány hodnoty několika veličin a vyhodnocovány související stavy a události. Mnohdy je využívána teorie pravděpodobnosti, modelování nebo umělé inteligence. Výsledkem je získání věrohodné informace o veličinách nebo stavech, které se přímo neměří, nebo je ani nelze měřit.

Logické vyhodnocení spojitých systémů

Při řešení jednoduchých virtuálních senzorů většinou nejde o generování osamocených logických proměnných, ale o jejich soubor, který popisuje stav spojité proměnné jako celku. Na obr. 28 je uveden příklad odvození tří logických proměnných od hodnot změřené teploty, např. ložiska. Jsou pojmenované normální, zvýšená a přehřátí. Rozsah hodnot proměnné teplota tvoří množinu čísel, která je rozdělena na tři podmnožiny, jež na sebe bezprostředně navazují, bez mezer. Odpovídající logická proměnná je pravdivá, jestliže aktuální hodnota teploty je ve vymezeném pásmu (v množině hodnot), jinak je nulová. Pravdivosti těchto tří logických proměnných se navzájem vylučují – jestliže je jedna pravdivá, jsou ostatní nepravdivé a vždy je právě jedna z nich pravdivá, jiná možnost neexistuje. Podobně by bylo možné rozdělit množinu hodnot vibrací ložiska na tři podmnožiny (číselnou hodnotu vibrací rozdělit na tři na sebe navazující pásma) a přiřadit jim logické proměnné: nízké, zvýšené, vysoké. V teorii fuzzy množin se spojitá veličina nazývá jazyková proměnná a nad ní vytvořené logické proměnné vstupní termy. Tuto zvyklost budeme dodržovat i zde. Uvedený způsob odvození souboru termů od množiny hodnot jazykové proměnné budeme nazývat granulací (v oboru fuzzy logiky jde o fuzzifikaci – dolní graf na obr. 28).

Představme si, že vyhodnocujeme stav ložiska (provádíme jeho technickou diagnostiku) tak, že vyhodnocujeme jeho teplotu a vibrace. Pro každou z jazykových proměnných jsme definovali tři termy, tedy šest logických proměnných. Při tradičním logickém vyhodnocení by bylo nutné použít pravdivostní tabulku nebo mapu pro šest operandů v rozsahu 26 = 64 položek. V našem případě však nejde o šest nezávislých logických proměnných, ale o dvě trojice termů, jejichž hodnoty se navzájem vylučují – jestliže je jedna pravdivá, jsou ostatní nepravdivé a vždy je právě jedna z nich pravdivá. Je to obdobná situace, jako bychom vyhodnocovali dvě tříhodnotové logické proměnné. Místo mapy pro šest proměnných tak lze vytvořit zjednodušenou mapu podle obr. 29. Mapa má rozsah 3 × 3 políčka. V našem případě rozlišujeme pět stavů ložiska: OK, varování 1, varování 2, alarm, porucha. Každému stavu odpovídá jedna logická proměnná – výstupní term. Tradičně bychom pro každý použili jednu mapu. Na obr. 29 je pro přehlednost použita jediná sdružená mapa, která souhrnně popisuje pravdivosti všech termů. Podobně jako u tradičních map (K-mapy nebo S-mapy) je poloha každého políčka „adresována“ jako logický součin (AND) odpovídajících termů. Vepsaná hodnota je příspěvkem k hodnotě výsledného výstupního termu – jeho výsledná hodnota je jejich logickým součtem OR (sjednocení podmnožin).

S výslednými termy lze dále pracovat jako s izolovanými proměnnými, které charakterizují stav ložiska. Je možné je využít k ovládání signálek nebo ke generování textů stavových hlášení. Stav ložiska je ale možné vyjádřit jednou spojitou (číselnou) proměnnou, jejíž aktuální hodnota souhrnně charakterizuje stav ložiska – nazvěme ji výstupní jazyková proměnná, třeba ve významu „riziko poruchy“. Její hodnotu lze stanovit několika postupy (obr. 30). Postup na obr. 30a připomíná opačný postup ke granulaci. Každému výstupnímu termu je přiřazen interval hodnot, přičemž se jednotlivé intervaly navzájem dotýkají. Protože se výstupní termy navzájem vylučují, odpovídá pravdivému termu pravdivost výstupní jazykové proměnné na celém intervalu pro tento term. Její výslednou hodnotu lze stanovit např. jako polohu středu (těžiště) intervalu. Ke stejnému výsledku je možné dojít postupem na obr. 30b, kdy termům odpovídají úzká pásma hodnot (impulzy). Nejsnazší je postup podle obr. 30c, kdy každému termu odpovídá jediná hodnota (nekonečně úzký impulz – singleton).

Pro úplnost uveďme, že obdobný postup se (v zobecnění) používá ve fuzzy logice. Zde se nazývá Mamdaniho automat. Z jazykové proměnné je možné fuzzy termy získat postupem nazývaným fuzzifikace (např. podle pravdivostních funkcí podle obr. 28e). Ve fuzzy logice jsou výstupním termům přiřazeny pravdivostní funkce odpovídajících množin. Nejčastěji mají tvar lichoběžníků nebo trojúhelníků, popř. úzkých obdélníků (singletonů) – obr. 31. Hodnoty výstupních termů se ve fuzzy logice nemusí navzájem vylučovat. Každý může mít jinou nenulovou hodnotu. Hodnotou termů se pak omezí výška jeho pravdivostní funkce – podle zvolené metody se jeho tvar buď zachová, ale přiměřeně se sníží („stlačí“ aritmetickým násobením), nebo se „ořízne“ funkcí minima. Hodnota výstupní proměnné se pak získá postupem nazývaným defuzzifikace. Výsledek je obvykle vypočten jako poloha těžiště plochy výsledného obrazce. Někdy se určí jako poloha nejvýznamnějšího maxima nebo jiným postupem. To už ale jsme zase „v jiné pohádce“.

(pokračování příště)

 

Ing. Ladislav Šmejkal, CSc., Teco, a. s., a externí redaktor časopisu Automa

Obr. 28. Příklad granulace, odvození trojice logických funkcí od hodnot číselné proměnné teplota: horní tři grafy zobrazují množiny pravdivých hodnot pro jednotlivé termy, čtvrtý graf souhrnně zobrazuje pravdivost všech tří termů, v dolním grafu je uveden příklad řešení ve fuzzy logice – fuzzifikace

Obr. 29. Příklad modifikované mapy pro vyhodnocení termů nad dvojicí jazykových proměnných

Obr. 30. Možná zobrazení výstupních proměnných (výstupních termů) do množiny hodnot spojité proměnné

Obr. 31. Možný tvar výstupních termů ve fuzzy logice

Obr. 32. Počítač Spinnaner s milionem počítačových jader simuluje činnost neuronů v mozku

 

Neuronový superpočítač

V kapitole o prahových logických funkcích je uvedeno, že jejich zobecněním je umělý neuron (model nervové buňky). Jejich propojením vznikají neuronové sítě, které jsou perspektivní cestou k umělé inteligenci. Nedávno (v listopadu 2018) byla na webu (Seznam) zveřejněna zpráva, že byl do provozu uveden nový superpočítač, který obsahuje milion procesorových jader na bázi umělých neuronů (obr. 32). Měl by imitovat části lidského mozku. Na sestrojení počítače se pracovalo deset let. Superpočítač je dílem odborníků z vývojové firmy Spinnaker, která sídlí na univerzitě v Manchesteru. Projekt vedl profesor počítačového inženýrství Steve Fuber. „Primární úkol stroje je simulovat konkrétní části mozku, jako jsou kortex nebo bazální ganglie,“ říká Fuber. Počítač je schopen imitovat fungování většího počtu neuronů než jakýkoliv jiný počítač. Je schopen současně provádět 2 · 1017 akcí. Spinnaker přitom nedrží rekord v počtu procesorů, které obsahuje. Jeho výjimečnost spočívá v jejich propojení. Přesto ani Spinnaker není schopen simulovat funkci celého mozku, ale pouze jeho části. „I s jedním milionem procesorů dokážeme simulovat jen jedno procento mozku,“ vysvětluje Fuber.