Aktuální vydání

celé číslo

03

2021

Digitální transformace, chytrá výroba, digitální dvojčata

Komunikační sítě, IIoT, kybernetická bezpečnost

celé číslo

Fuzzy logika a norma IEC 61131

číslo 6/2003

Fuzzy logika a norma IEC 61131

Mezinárodní norma IEC 61131 se věnuje programovatelným automatům – jejich funkci, provedení hardwaru a komunikací i způsobům jejich programování. Odborné veřejnosti je nejznámější její třetí část, tj. IEC 61131-3, týkající se programování automatů (forma uživatelských programů, deklarace proměnných a typů dat, způsoby aktivace programů a popis programovacích jazyků). Poměrně krátce, od roku 2000, platí také sedmá část normy (IEC 61131-7), věnovaná programování fuzzy řadičů a rozvíjející tak třetí část této normy o jazyk fuzzy řízení. V dodatcích k IEC 61131-7 jsou popsány a na názorných příkladech ilustrovány základní principy fuzzy logiky a fuzzy regulace. Protože je velmi dobře zpracována i po metodické stránce, lze na normu IEC 61131-7 současně nahlížet i jako na základní příručku o fuzzy logice a fuzzy řízení srozumitelnou technikům. Článek seznamuje se základními myšlenkami a se strukturou uvedené normy a obsahuje doporučení pro českou terminologii související s její náplní.

Struktura a historie IEC 61131, poznámky k názvosloví

Norma IEC 61131, po technické stránce zpracovávaná organizací PLCopen a oficiálně vydaná Mezinárodní elektrotechnickou komisí (International Electrotechnical Commission – IEC), se zabývá programovatelnými automaty, v anglicky psaných textech nazývanými Programmable Logic Controllers a běžně označovanými zkratkou PLC, používanou i v tomto článku (i když v současné době se již lze setkat také s výstižnějším označením Programmable Automation Controller a zkratkou PAC – alespoň pro kategorii vyspělých programovatelných automatů). Sama norma IEC 61131 označuje předmět svého zájmu jako Programmable Controllers se zkratkou PC, což může být, v souvislosti s hromadným používáním stejné zkratky pro osobní počítače (Personal Computers), poněkud zavádějící. Původně měla norma v označení jen čtyřmístné číslo IEC 1131. Počáteční šestka byla přidána později, v souvislosti s přijetím normy IEC 1131 do systému norem Evropské unie.

Norma IEC 61131 má již osm částí. První (vydaná v roce 1992) obsahuje základní informace z oboru PLC, část 2 (1993) shrnuje požadavky na provedení a testování hardwaru PLC, část 3 (1993) je věnována programování PLC a příslušným programovacím jazykům, část 4 (1995) sjednocuje požadavky na uživatelské příručky, část 5 (v tisku) na komunikace a část 6 (ve studijní fázi) na komunikace programovatelných automatů prostřednictvím průmyslových komunikačních sběrnic. Část 8 (2000 a dále upravovaná) obsahuje směrnice pro používání a implementaci programovacích jazyků.

Zatím druhou nejmladší částí normy IEC 61131 je část 7 (2000), definující programovací jazyk k programování algoritmů fuzzy řízení – Fuzzy Control Language (FCL). Navazuje na část 3 normy a rozšiřuje stávající soubor pěti programovacích jazyků, které si zde, pro přehled, stručně charakterizujme.

Základním textovým programovacím jazykem podle normy IEC 61131-3 je jazyk s názvem Instruction List (IL, jako český ekvivalent je ustáleno pojmenování jazyk mnemokódů). Jde o jazyk obdobný assembleru, ve kterém je každé instrukci PLC přiřazena písmenná zkratka (mnemokód). Je definován soubor základních instrukcí, které musí obsahovat každý PLC. Další instrukce, rozšiřující, lze definovat jako uživatelské funkce.

Textovým jazykem z rodiny vyšších programovacích jazyků je Structured Text (ST, strukturovaný text), obdoba např. jazyka Pascal či C.

Grafický jazyk Ladder Diagram (LD, jazyk kontaktních schémat) je určen k zápisu úloh převážně logického typu, jejichž program je sestavován obdobně jako liniové schéma reléových systémů. Dílčí logické funkce jsou vytvářeny jako sérioparalelní kombinace kontaktů spolu s výstupními funkcemi cívek relé, paměťovými funkcemi, čítači a časovači a dalšími funkčními bloky. V celkovém schématu připomínají dílčí obvody příčky žebříku – odtud pochází anglický název jazyka. Jeho doslovný překlad „příčkový diagram“, popř. „žebříčkový diagram“ je ale v českém názvosloví zbytečným novotvarem, jehož používání nelze doporučit. Naprosto nevhodné je vnášet do české terminologie zkrácené anglické označení „ladder“.

Grafickým jazykem je také Function Block Diagram (FBD, jazyk funkčních bloků, popř. jazyk blokových schémat), umožňující vytvářet programy v podobě logického (obecně blokového) schématu. Nabízí soubor standardních bloků pro elementární funkce, vedle kterých lze vytvářet také uživatelské funkční bloky.

Jako Sequential Function Chart (SFC, české pojmenování se dosud neustálilo, doporučujeme používat sekvenční přechodový diagram nebo jazyk přechodových grafů) je označován grafický programový prostředek pro systematický popis sekvenčních logických úloh v podobě přechodového diagramu, který v sobě spojuje prostředky konečných automatů a stavových Petriho sítí. Obvykle je považován za pátý z programovacích jazyků, ačkoliv v normě IEC 61131-3 není uveden mezi jazyky, ale mezi prostředky pro aktivaci úloh a organizaci programu. Lze jej současně považovat za prostředek k vytvoření organizační struktury nadřazený ostatním programovacím jazykům.

Obr. 1.

Jazyk Fuzzy Control Language (FCL, doporučený český název jazyk fuzzy řízení), definovaný v normě IEC 61131-7, je určen k popisu fuzzy algoritmů pro ucelené funkční bloky (fuzzy řadiče, Fuzzy Controllers), které mohou být využívány spolu s ostatními funkčními bloky v rámci jazyka FBD (obr. 1), popř. jiných jazyků podle normy IEC 61131-3. Jazyk FCL má podobu strukturovaného textu (ST podle IEC 61131-3), rozšířeného o nové příkazy. Cílem normy je zajistit přenositelnost programů popisujících fuzzy algoritmy mezi PLC od různých výrobců, kteří ji respektují, a to na úrovni zdrojového textu.

Fuzzy řadiče a jazyk FCL

Slovo control v názvu jazyka FCL má několik významů a několik možných českých ekvivalentů – řízení, regulace, kontrola. Doporučit lze přednostní používání prvního z nich, tedy řízení, protože je nejobecnější a může v sobě zahrnovat i zbývající dva významy (regulace je zvláštním případem řízení, tj. zpětnovazební řízení, kontrolní či diagnostické funkce by měly být součástí komplexního řídicího algoritmu). Teprve v situaci, kdy je třeba zdůraznit specializaci řídicího algoritmu na regulaci či na kontrolní a diagnostické funkce, je na místě přívlastek regulační či kontrolní.

Pro ucelený funkční blok realizovaný prostředky jazyka FCL lze analogicky doporučit název fuzzy funkční blok, nebo raději fuzzy řadič (nikoliv fuzzy kontrolér), a teprve při potřebě zdůraznit jeho specializovanou funkci použít pojmenování fuzzy regulátor či fuzzy regulační blok, fuzzy diagnostický blok apod. Pod označením fuzzy controller si lze představit i velmi obecný systém založený na souboru pravidel vyjádřených prostředky fuzzy logiky („fuzzy inferenční stroj“), např. expertní systém, systém pro nastavování parametrů regulátorů, pro ovládání spojité změny struktury regulačních obvodů, pro klasifikaci a rozpoznávání objektů, pro rozhodování a podporu operátora, pro technickou diagnostiku, pro modelování a predikci apod.

Struktura jazyka FCL

Vazba mezi jazykem FCL podle normy IEC 61131-7 a jazyky definovanými normou IEC 61131-3 je řešena na úrovni jazyka FBD tak, že fuzzy řadič je popsán jako jeden z funkčních bloků jazyka FBD. Jazyk FCL tedy respektuje všechny způsoby definice dat a proměnných i způsoby definování rozhraní funkčních bloků platné v jazyce FBD. Přináší pouze rozšíření o nové typy příkazů a nová klíčová slova.

Pokud tedy jde o vlastní syntax, je popis funkčního bloku v jazyce FCL uzavřen mezi klíčová slova (programové závorky) FUNCTION_BLOCK a END_FUNCTION_BLOCK. Za úvodní programovou závorkou se nachází jméno funkčního bloku (např. Fuzzy_FB) a dále následují (dílčí) bloky deklarací a příkazů atd. v pořadí:

  • deklarace vstupních proměnných,
  • deklarace výstupních proměnných,
  • příkazy fuzzifikace,
  • příkazy defuzzifikace,
  • pravidla,
  • volitelné parametry specifické pro aplikaci.

Ve skutečnosti mohou některé bloky příkazů chybět a jiné se mohou i několikrát opakovat: např. pro každou vstupní jazykovou proměnnou je použit zvláštní blok fuzzifikace a obdobně každé výstupní jazykové proměnné přísluší samostatný blok defuzzifikace. Pravidla mohou být podle potřeby rozdělena do několika bloků podle logických souvislostí nebo podle zvolených fuzzy operátorů.

Obr. 2.

Fuzzifikace

Cílem operace s názvem fuzzifikace je přiřadit ke vstupní jazykové proměnné (např. ve významu teploty, tlaku, polohy, hladiny, času, počtu) pravdivostní hodnoty jedné nebo několika elementárních fuzzy proměnných – vstupních jazykových termů, zkráceně vstupních termů ebo jen termů – odpovídající číselné hodnotě vstupní proměnné. Každý term je definován svou pravdivostní funkcí, která k hodnotám vstupní jazykové proměnné přiřazuje hodnoty pravdivosti tohoto termu (stupeň pravdivosti). V souladu s obvyklou praxí připouští norma pravdivostní funkci pouze ve formě spojité, lomené, po úsecích lineární funkce. Znázorněno graficky jde o dva nebo více spojitě navazujících přímkových úseků (typicky ve tvaru rampy, trojúhelníku, lichoběžníku, ale norma připouští i složitější lomené průběhy). V příkladu fuzzifikace na obr. 2 jsou nad jazykovou proměnnou teplota (např. v obytné místnosti) definovány pravdivostní funkce čtyř termů zima, chladno, pohoda a horko. Term zima je definován pravdivostní funkcí s průběhem „sestupné rampy“, pravdivostní funkce termu chladno má trojúhelníkový průběh, term pohoda je definován pravdivostní funkcí s lichoběžníkovým průběhem a term horko má pravdivostní funkci ve tvaru „nájezdové rampy“.

Každý blok fuzzifikace je uzavřen do příkazových závorek FUZZIFY a END_FUZZIFY. Za klíčovým slovem FUZZIFY následuje jméno vstupní proměnné využívané v tomto bloku jako vstupní jazyková proměnná, nad níž jsou definovány vstupní jazykové termy (její anglické pojmenování linguistic variable není vhodné překládat doslova, protože v češtině má slovo „lingvistický“ význam „jazykovědný“).

V normě IEC 61131-7 i v mnoha literárních pramenech se místo přívlastku pravdivostní používá méně názorné pojmenování příslušnostní (např. membership function,tj. příslušnostní funkce) a pravdivost termu je pak interpretována jako míra příslušnosti termu k jeho definiční fuzzy množině. Lze dokázat, že oba pojmy jsou si rovnocenné, a proto se doporučuje používat názornější pojmenování s přívlastkem pravdivostní, protože více odpovídá náplni předmětu našeho zájmu, kterým je aplikovaná fuzzy logika.

Za klíčovým slovem TERM následuje v zápisu dílčího bloku název termu a za symbolem přiřazení (přiřazovacím rovnítkem :=) posloupnost souřadnic bodů zlomu pravdivostní funkce (minimálně dva body, maximálně šest bodů) v pořadí: údaj na vodorovné ose (hodnota jazykové proměnné), hodnota pravdivosti v bodě zlomu v intervalu od 0 do 1. Pro příklad z obr. 2 lze dílčí blok fuzzifikace zapsat ve tvaru:

FUZZIFY teplota;
   TERM zima := (10, 1) (15, 0);
   TERM chladno := (10, 0) (15, 1) (20, 0);
   TERM pohoda := (15, 0) (20, 1) (25, 1) (30, 0);
   TERM horko := (20, 0) (25, 1);
END_FUZZIFY

Defuzzifikace

Defuzzifikace je proces zhruba opačný k procesu fuzzifikace. Spočívá v tom, že se k hodnotám pravdivostí souboru výstupních termů (vyčíslených souborem pravidel) definovaných nad výstupní jazykovou proměnnou přiřadí jediná (tzv. ostrá) hodnota výstupní jazykové proměnné. Pravdivostní funkce výstupních termů lze definovat obdobně jako u vstupních termů. Pro zjednodušení výpočtu je lze definovat i jako singletony, tedy izolovanými body (singleton je možné interpretovat jako svislou úsečku nebo jako nekonečně tenkou „tyčku“).

Blok defuzzifikace je při zápisu uzavřen v příkazových závorkách DEFUZZIFY, END_DEFUZZIFY. Za klíčovým slovem DEFUZZIFY opět následuje jméno výstupní jazykové proměnné. Za klíčovým slovem RANGE je třeba zadat rozsah výstupních hodnot. Dále následují definice pravdivostních funkcí výstupních termů: za klíčovým slovem TERM následují jméno termu a posloupnost souřadnic bodů zlomu (u singletonu se místo dvou souřadnic bodu zlomu uvádí jen jediná hodnota informující o jeho poloze na vodorovné ose).

Písmenný kód metody defuzzifikace se uvádí za klíčovým slovem METHOD. K dispozici jsou metody:

  • CoG (Centre of Gravity): vodorovná souřadnice těžiště plochy,
  • CoGS (Centre of Gravity for Singletons): vodorovná souřadnice těžiště singletonů,
  • CoA (Centre of Area): souřadnice svislého řezu, který dělí výslednou plochu na dvě stejně velké části),
  • LM (Left Most Maximum): největší z maxim zleva,
  • RM (Right Most Maximum): největší z maxim zprava.

Na závěr lze uvést implicitní (default) hodnotu výstupní jazykové proměnné pro případ selhání defuzzifikační metody, která by dávala nulový výsledek.

Blok pravidel

V příkazovém bloku pravidel lze mezi příkazovými závorkami RULEBLOCK a END_RULEBLOCK nejprve definovat fuzzy operátory zobecněných logických operací AND a OR pro vyčíslování logických výrazů v podmínkové části pravidel (operátory agregace dílčích podmínek).

Zobecněný operátor pro logický součin AND lze volit ze tří alternativ:

  • MIN (operátor minima: a AND b = min (a, b)),
  • PROD (Product, operátor aritmetického násobení, pravděpodobnostní součin: a AND b = ab),
  • BDIF (Bounded Difference, omezený rozdíl, Lukasiewiczův součin: a AND b = max (0, a + b – 1), tj. výraz a + b – 1 zdola omezený na hodnotě 0).

Pro zobecněný operátor logického součtu OR lze volit z alternativ:

  • MAX (operátor maxima: a OR b = max (a, b)),
  • ASUM (Algebraic Sum, algebraický – přesněji pravděpodobnostní – součet: a OR b = a + b – ab),
  • BSUM (Bounded Sum, omezený součet, Lukasiewiczův součet: a OR b = min (a + b, 1), tj. součet a + b shora omezený na hodnotě 1).

Jako zobecněný operátor negace je používán jedničkový doplněk NOT a = 1 – a.

Operátory se obvykle volí ve dvojicích, v pořadí, jak jsou zde ve výčtu uvedeny (MIN – MAX, PROD – ASUM, BDIF – BSUM), protože pak jsou navzájem duální a platí pro ně De Morganova pravidla, jak jsou známa z Boolovy algebry: NOT (a AND b) = (NOT a) OR (NOT b), NOT (a OR b) = (NOT a) AND (NOT b). Pro zobecněné logické operátory však neplatí všechna pravidla Boolovy algebry (pro každou volbu operátorů jsou neplatná jiná pravidla).

Nezávisle na operátorech zvolených pro agregaci lze dále zvolit operátor logického součinu pro metodu aktivace (ACT), tj. pro proces, který podle míry splnění podmínky (antecedentu) pravidla stanoví míru pravdivosti jeho závěru (konsekventu). Jako aktivační operátor je možné zvolit PROD (algebraický součin – pro metodu MAX-PROD) nebo MIN (pro metodu MAX-MIN). Obdobně lze zvolit i operátor pro operaci akumulace (ACCU, slučování) výsledků dílčích pravidel do konečného výsledku. Aktivační operátor má charakter logického součtu a lze jej volit z alternativ MAX, BSUM, NSUM, kde NSUM značí Normalized Sum (normovaný součet: a NSUM b = (a + b)/max{1, max [a(x) + b(x)]}.

Jednotlivá pravidla mají tvar RULE číslo: IF podmínka THEN závěr [WITH součinitel váhy pravidla]

Nepovinný součinitel váhy (váhový faktor) může upravit závažnost pravidla vůči ostatním. Podmínka může mít formu základní podmínky (subcondition) nebo může být složena (agregována) ze základních podmínek (subconditions), které mají obvyklý tvar jazyková_proměnná IS [NOT] jazykový_term

Obdobný tvar mají i dílčí závěry (subconclusions), takže celé pravidlo je např. RULE 1: IF teplota IS zima THEN topení IS maximum

Klíčové slovo IS má význam operátoru „rovnosti“, takže uvedené pravidlo se čte takto: „jestliže teplota je rovna zima, pak topení je rovno maximum“, nebo přesněji (ale komplikovaněji) „jestliže term zima, definovaný nad jazykovou proměnou teplota, má pravdivost x, pak odpovídajícím způsobem (v závislosti na volbě aktivačního a akumulačního operátoru) nastav výstupní term maximum nad výstupní jazykovou proměnnou topení“.

V jednom fuzzy funkčním bloku může být použito několik bloků pravidel s různými typy operátorů pro agregaci dílčích podmínek, pro metodu aktivace i akumulace. Norma IEC 61131-7 rozlišuje tři úrovně závažnosti: základní úroveň s povinnými možnostmi, úroveň rozšíření s volitelnými možnostmi a otevřená úroveň s přídavnými možnostmi.

Norma jako učebnice

Norma IEC 61131-7 je kvalitně zpracována i z pohledu metodického. Užitečná je už její úvodní a názvoslovná část, která vysvětluje základní pojmy a sjednocuje mnohdy roztříštěnou terminologii v oboru fuzzy množin, fuzzy logiky a fuzzy řízení. Metodicky cenná je normativní část, která v rámci popisu syntaxe jednotlivých příkazů seznamuje s typickou strukturou fuzzy řadičů a s doporučovanými postupy jejich implementace. Cenné jsou zejména informativní přílohy, ve kterých jsou stručně a srozumitelně vysvětleny základní pojmy a principy fuzzy logiky a fuzzy řízení (příloha A), popsány příklady realizace fuzzy řadičů (B, C) a použití proměnných v blocích pravidel (D) a uveden přehled synonym (E). Norma svou názorností vlastně supluje vzácně se vyskytující učebnice s výkladem odlehčeným od teorie, který je přístupný širokému okruhu čtenářů a bezprostředně směřuje k aplikacím fuzzy logiky v PLC.

Závěr

Skutečnost, že existuje mezinárodní norma věnovaná programování fuzzy algoritmů pro PLC (tedy nejrozšířenější řídicí systémy pro použití v průmyslu, v technice budov a v mnoha dalších oborech), svědčí o skutečnosti, že teorie i praxe fuzzy logiky dospěly do stadia, které umožnilo vznik standardního prostředku vhodného k rutinnímu programování úloh řízení v podobě nástroje dostupného programátorům PLC. K tomu je nutné zajistit „už jen“ tolik, aby významní výrobci PLC normu IEC 61131-7 implementovali ve svých produktech a vývojových programových nástrojích a aby se rutinní znalost metodiky tvorby fuzzy algoritmů stala základní výbavou programátorů obdobně jako Boolova algebra či teorie konečných automatů. Pak lze očekávat, že inteligentní systémy se stanou součástí naší každodenní praxe.

Literatura:

[1] Norma IEC 61131-7 Programmable controllers, Part 7: Fuzzy control programming. International Electrotechnical Commision, Ženeva, 2000.

[2] ŠMEJKAL, L.: Fuzzy logika a norma IEC 61131. In: Sborník konference Inteligentní systémy pro praxi. Seč u Chrudimi, AD&M, 2003.

[3] http://www.iec.ch

Ladislav Šmejkal, Luboš Urban,
Teco a. s., Kolín

Inzerce zpět