Jste zde

TEST - Kompaktní PLC Omron CP1L – 5. díl – Interrupts

Každé vyspělejší PLC má i možnost využití a obsluhy tzv. přerušení (Interrupts), která umožňují okamžitě (bez prodlení) reagovat na časově kritické okolnosti a stavy aplikace, zařízení či systému, které jsou řízeny PLC. Tuto možnost mají i kompaktní PLC Omron CP1L. Pro začátečníka však zprovoznění režimu přerušení a realizování jeho obsluhy není úplně jednoduché. Pojďme se stručně podívat jako na to...

V minulém 4. díle (TEST - Kompaktní PLC Omron CP1L – 4. díl – rychlé vstupy pro enkodér) jsme si ukázali použití rychlých vstupů pro potřeby připojení a snímání zařízení generující pulsní signál s frekvencí v řádu stovek Hz a jednotek kHz, která v ukázce reprezentoval rotační enkodér generující 500 pulsů na otáčku. Již v tomto režimu se využívá tzv. režimu přerušení (interrupt), i když zde trošku skrytě, protože jej využívají vestavěné funkce rychlého čítače nebo také Quick režimu vstupů. Režim přerušení totiž umožňuje zaregistrovat a zpracovat jednotlivé pulsy i pulsní signály výrazně kratší nebo rychlejší než je doba zpracování jednoho cyklu programu, které by jinak při zařazení do programu jako běžné vstupy vůbec nebyly zaznamenány. Také to bylo minule jasně patrné na příkladu snímání krátkého impulsu Z kanálu enkodéru identifikující jednu celou otáčku. Pokud byl vstup v programu nastaven a používán v klasickém režimu "Normal", program puls obvykle ani nezaznamenal (obvykle jen v případě velmi pomalého otáčení enkodéru). Naproti tomu při nastavení vstupu do režimu Quick byl zaznamenán prakticky vždy. Rozdíl byl v tom, že v režimu "Quick" se skrytě využívá právě režimu přerušení, kdy po zaznamenání i krátkého pulsu na vstupu se přeruší základní chod programu a zaznamená jeho přítomnost do registru a následně vybaví v době, kdy zpracování programu dospěje do místa, kde se vyhodnocuje právě stav tohoto vstupu. V tento moment se tak nevyhodnocuje aktuální okamžitý stav daného vstupu, ale stav záznamu, zda během jednoho cyklu programu náhodou na vstup nepřišel puls.

V tomto případě sice "nepropásneme" ani krátké pulsy, ale program PLC prostě na ně zareaguje se zpožděním třeba až jednoho celého cyklu programu, tedy u rozsáhlejších programu i se zpožděním přes 10 ms. To není vždy žádoucí, protože pokud se například pohybuje nějaký objekt rychlostí např. 1 m/s ujede během 10 ms vzdálenost již 1 cm, což například u přesného řízení pozice nemusí být zanedbatelná hodnota. Proto v tomto i jiných podobných případech někdy prostě nutně potřebujeme zareagovat na změnu (např. stavu výstupu snímače) okamžitě, nezávisle na tom, kde se aktuálně v programu nacházíme a co se aktuálně vykonává. Pro tyto účely pak slouží režim přerušení "Interrupt" a s tím spojená část programu provádějící tzv. obsluhu přerušení. Tedy na hlavním programu PLC nezávislých instrukcích, které se vykonávají pouze právě když se přerušení vyvolá. Obvykle jde jen o velmi krátký úsek programu, který vykoná jen tu aktuálně časově nejdůležitější (nejvíce urgentní) záležitost, aby se příliš nezdržoval chod samotné hlavní smyčky programu. Obvykle jde jen o několik změn stavů bitů nějakých registrů, zápisu nové hodnoty proměnné, či např. změny stavu výstupu PLC.

Režim přerušení (Interrupt) může být v případě PLC Omron, a to i kompaktní řady CP1L, buď softwarový, kdy se po určité nastavené krátké periodě vždy vyvolá požadavek a vykoná se obsluha přerušení nebo hardwarový, který se vyvolá při změně stavu vstupu PLC, který je pro tento účel nadefinován v nastavení PLC. Protože ta hardwarová varianta je prakticky na ukázku zajímavější a dle mého názoru také v praxi více užitečná, dále se v tomto článku podíváme, co je nutné udělat, abychom mohli režim hardwarového přerušení od binárního vstupu použít.

Příklad realizace hardwarového přerušení

Prvním krokem, když chceme, aby nám změna stavu na určitém dvoustavovém vstupu PLC okamžitě vyvolala přerušení, je nadefinování PLC, na který vstup takto má reagovat. To se nejjednodušeji provádí změnou nastavení v okně "Settings / Built-in Inputs", kde jsme již v minulém díle nastavovali funkci rychlého čítače vstupu či režim "Quick". Zde pak ve spodní části okna je možné určité vstupy právě nastavit do režimu "Normal", již zmíněného režimu "Quick" a také do režimu "Interrupt". Ten pak zde aktuálně využijeme. 

Režim přerušení (Interrupt) pro požadovaný dvoustavový vstup základní jednotky je nutné nejdříve navolit v nastavení PLC (obrázek vlevo). Mimo to se v záložce "Timing" nastavuje základní časovací jednotka obsluhy přerušení.

V případě, že využijeme programu z minulého příkladu pro snímání enkodéru, je vstup IN0 v reálu ekvivalentní se 4. vstupem základní jednotky CP1L-L14, tedy bitem 0.04. Pokud tedy zde či u dalších vstupů nastavíme režim "Interrupt", říkáme tím PLC fakt, že "máme chuť" tento režim využít. Tedy, že pokud dojde ke změně stavu na tomto daném vstupu, bude zde požadavek na přerušení vykonávání hlavní smyčky programu a vykonání programu obsluhy přerušení. Zda tomu tak opravdu i ve skutečnosti bude, pak ještě závisí na programovém povolení tohoto režimu (tzv. vymaskování) a nastavení podmínek jeho funkce.

To se provádí obvykle v hlavní smyčce programu blokem MSKS(690), který toto programové nastavení kompletně provádí. Záleží na tom, jaké hodnoty do něj zadáme. V tomto směru se obvykle bohužel neobjedeme bez vyvolání nápovědy (HELPu) tohoto příkazu, protože možnosti nastavení jsou opravdu široké.

Příkazem MSKS se v hlavní smyčce programu povoluje (aktivuje) obsluha přerušení od požadovaného vstupu základní CPU jednotky.

V nápovědě je možné najít, že pokud chceme využít služeb přerušení na vstupu IN0 (nastaveného v okně Settings / Built-in Inputs), musíme jej povolit zapsáním hodnoty N=6 (N=7 pro vstup IN1 atd.) a C=0. Protože při startu hlavní smyčky programu jsou tato přerušení od vstupů vždy deaktivována (vymaskována), je vhodné tento blok zavolat hned na začátku hlavní smyčky programu. Stačí pouze jednou, tedy například jen při vykonávání první smyčky programu (to je v programu definováno vstupem P_On = Always On Flag). Pak je tento jeden vstup pro režim přerušení aktivován, a jak se lze v HELPu dále dočíst, při aktivaci se vyvolá úloha obsluhy přerušení č. 140 (Interrupt Task 140). Tato informace je velmi důležitá pro naprogramování, co se při přerušení má provést. Mimo to lze pomocí stejného bloku i nadefinovat, zda se přerušení vyvolá náběžnou nebo sestupnou hranou na vstupu zadáním N hodnoty příslušného vstupu (např. N = 6 nebo N = 7) a C = 0 pro náběžnou hranu nebo C = 1 pro sestupnou hranu. Standardně (pokud toto nastavení neprovedete) se pak reaguje na náběžnou hranu.

Důležitá část nápovědy příkazu MSKS mimo jiné informující o tom, jak povolit přerušení od požadovaného vstupu a přiřazení čísla úlohy přerušení každému hardwarovému vstupu (např. Interrupt input 0 = Interrupt Task 140).

Následně je tedy nutné vytvořit program pro obsluhu přerušení "Interrupt Task 140". To provedete v projektu vložením další úlohy ("programovací sekce") kliknutím ve stromu projektu na položku "Programs" a pak vybrat položku "Insert Program". Následně se vytvoří další "blok" programu, který pak následně nastavíme tak, že přísluší právě úloze obsluhy přerušení "Interrupt Task 140". To provedete v položce "Program Properties", kde se v záložce "General" a v políčku "Task Type" vybere právě "Interrupt Task 140". Od této chvíle se pak při každém vyvolání přerušení na vstupu IN0 vykoná program zde vytvořený. A stejné je to i v případě obsluhy přerušení od dalších vstupů, v mé ukázce konkrétně od dvou vstupů, tedy konkrétně IN0 (fyzicky 0.04) = Interrupt Task 140 a IN1 (fyzicky 0.05) = Interrupt Task 141.

Nastavení, že nově vložená úloha se bude chovat jako úloha obsluha přerušení č. 140, tedy bude volána po příchodu náběžné hrany na fyzický vstup 0.04. 

Programový obsah obsluhy přerušení je pak čistě na uživateli / programátorovi s tím, že je nutné se dobou vykonávání programu vejít do tzv. maximální doby vykonávání přerušení, která je uvedena v registru A440. Pokud by bylo vykonávání programu delší než tento čas, PLC automaticky prostě jeho běh po tomto čase ukončí a vrátí se na provádění hlavní smyčky programu.

Tuto omezující hranici i ověření provádění obsluhy přerušení si lze snadno vyzkoušet například, když se program obsluhy přerušení bude skládat z jednoduché linie, kdy se bude trvale aktivovat výstup, například v mém případě u přerušení "Interrupt Task 140" fyzický spínaný výstup PLC 100.04. Dokud přerušení nenastalo, je výstup vypnutý (jeho indikační LED nesvítí). Jestliže však na vstup 0.04 přijde puls, v mém případě například krátký puls od Z kanálu rotačního enkodéru, výstup se zapne (jeho indikační LED svítí) a je zapnutý po celou onu maximální dobu možného vykonávání obsluhy přerušení. Pak se výstup opět sám vypne.

Jednoduchý test funkce obsluhy přerušení generované vstupem 0.04.

Pokud během vykonávání obsluhy jednoho přerušení přijde další požadavek na přerušení, např. v mém případě od druhého vstupu, může si systém požadavek buď zaznamenat a vykonat jej okamžitě po dokončení prvního přerušení, nebo jej tzv. zapomenout a prostě vůbec nevykonávat. Toho lze docílit příkazem CLI (691), který vymaže záznam o dalším příchozím požadavku na přerušení. Tento příkaz je samozřejmě nutné provést dříve než se ono vykonávání přerušení spustí, tedy například na konci programu jiného přerušení.

Pokud během vykonávání obsluhy přerušení přijde požadavek na další obsluhu jiného přerušení, tak lze jeho následnou obsluhu zrušit příkazem "Clear Interrupt" (blok CLI).

Závěr

Pokud člověk "objeví" jak s režimem přerušení pracovat, je to pak již jednoduché. Obvykle není nutné režim přerušení používat příliš často a naopak jeho časté použití může být i kontraproduktivní v ohledu zpomalení a nepravidelného chodu základní smyčky programu. Jsou ale případy, kdy to prostě bez něj udělat nelze, zvláště pokud využíváte pomalejší PLC a zpracování programu mu trvá mnoho milisekund.

Autor článku i obrázků: Antonín Vojáček

DOWNLOAD & Odkazy

Hodnocení článku: