====== Digitální vstupy: funkce Debounce, Counter a Direct Switch ====== Digitální vstupy na kontrolérech Unipi jsou vybaveny užitečnými přídavnými funkcemi, které umožňují zvýšit odezvu a přesnost regulace. Tyto funkce jsou řízeny mikroprocesorem samotné I/O desky a jsou tak nezávislé na řídicím softwaru, což výrazně zvyšuje jejich rychlost odezvy. ;;# Patron \\ Neuron \\ Axon \\ Extension ;;# ===== Debounce ===== Funkce **Debounce** je navržena pro vykrývání nepřesností, se kterými se typicky setkáte při přepínání stavu digitálního vstupu. Tyto chyby obvykle vznikají v případěch, že je vstup spínán mechanickým prvkem (např. přepínač). Signál generovaný při stisknutí a puštění spínače může vypadat např. takto: {{ :en:sw:01-mervis:digital-inputs-01-debounce.jpg?direct&400 |}} Pro odstranění těchto odchylek by normálně bylo nutné zpomalit reakci vstupu na změnu stavu. Na úrovni hardwaru lze tohoto docílit například zapojením RC prvku. Pro usnadnění práce ale můžeme toto zpomalení provést i na úrovni softwaru. Funkce Debounce detekuje změnu na digitálním vstupu. Pokud je signál kratší než předdefinovaný debounce čas, je ignorován. Změna je předána řídicímu SW až tehdy, pokud je délka změny delší než definovaný interval. Z výroby jsou všechny digitální vstupy na jednotkách Unipi nastaveny na debounce interval 5 ms. Nyní se podívejme, jak lze debounce konfigurovat v Mervis IDE. Nastavení se provádí přes vstupy zařízení, dvojitě proto klikněte na název vašeho kontroléru Unipi pod Modbus TCP kanálem. Na **hlavním panelu** se objeví záložka se všemi registry kontroléru. Pod kolonkou **Název** naleznete vyhledávací řádek, do kterého zadejte "DI_". Zobrazí se seznam všech dostupných digitálních vstupů, či přesněji řečeno jejich datových bodů. {{ :en:sw:01-mervis:digital-inputs-02-list-of-inputs.png?direct |}} Ze seznamu vyberte vstup, který chcete konfigurovat. V panelu **Vlastnosti** jsou zobrazeny všechny možnosti nastavení daného registru. Nás zajímá kolonka **Debounce**, jejiž hodnota určuje délku debounce intervalu v milisekundách. {{ :en:sw:01-mervis:digital-inputs-03-debounce-time.png?direct |}} Zadání Vámi žádané hodnoty je změnou konfigurace modulu PLC, kterou nelze aplikovat nahráním sestavy. Pro uložení konfigurace modulu se řiďte návodem [[en:sw:01-mervis:unipi-configure-module-hidden|Unipi - konfigurace modulu]]. Pokud měníte nastavení více registrů, můžete všechny změny uložit najednou později. ===== Čítač (Counter) ====== Druhou zajímavou funkcí **digitálních vstupů** je **čítač**. Jde o vysokorychlostní počítadlo náběžných hran signálů pro změnu stavu digitálního vstupu, které je (stejně jako funkce Debounce) nezávislé na řídicím softwaru. Jednoduše řečeno, čítač dokáže velmi přesně sčítat i velmi krátké pulzy. Programy vytvářené v Mervis IDE nejsou dostatečně rychlé pro detekci rychlých změn digitálních vstupů (např. pomocí funkčního bloku "Pulse Counter (BD30). Pokud například vlastníte autodráhu a chcete počítat průjezdy autíček cílovou čárou, samotný Mervis IDE nebude schopný je detekovat - při rychlosti až 100 km/h a délce autíčka cca 10 cm trvá průjezd přes senzor sotva 4,5 ms. Hardwarový čítač je závislý na nastavení intervalu funkce debounce. Interval funkce **Debounce** je třeba nastavit na kratší dobu, než je očekávaná délka sledovaných pulzů. Čítačem jsou standardně vybaveny všechny **digitální vstupy** a pro jeho používání není třeba žádných nastavení. Výstupem čítače je globální proměnná - například vstupu ''Neuron_L523_DI_1.01'' odpovídá proměnná ''Neuron_L523_CNT_1.01''. Jako důkaz nízké rychlosti softwarového čítače si prohlédněte následující program běžící v režimu ladění: {{ :en:sw:01-mervis:digital-inputs-08-sw-counter-vs-hw-counter.png?direct |}} Jak můžete vidět, program detekuje náběžné hrany na vstupu ''Neuron_L523_DI_1.01'' pomocí bloku ''Pulse counter (BD30)'', a zároveň na stejném vstupu pulzy počítá pomocí hardwarového čítače. Pokud mají čítače stejnou hodnotu, na kontroléru se rozsvítí dioda X1. Pokud čítače nejsou shodné, dioda zůstane zhasnuta. V okamžiku spuštění ladění jsou oba čítače na hodnotě 0. Ke vstupu ''DI1.1'' připojíme kontaktní spínač a začneme jej co nejrychleji stiskávat. Jak vidíte, softwarový čítač zachytil pouze 10 pulzů, zatímco hardwarový celých 54. Čítačové proměnné jsou pouze pro čtení, nelze je proto nastavovat či resetovat přímo v programu či skrze prohlížeč proměnných v módu ladění. Tyto proměnné se nastavují pomocí proměnné "set"; u čítače ''Neuron_L523_CNT_1.01'' má tato proměnná název ''Neuron_L523_CNT_1.01_set''. ===== Direct switch ===== V neposlední řadě jsou jednotky Unipi vybaveny funkcí Direct Switch. Jak jsme zjistili výše, softwarová detekce změn není dostatečně rychlá - v některých projektech přitom způsobí problémy zpoždění už 20 ms, jako například u spínačů osvětlení. U nich očekáváme okamžitou reakci světla na stisknutí vypínače, na předchozích řádcích ale vidíme, že pouhým propojením digitálního vstupu s výstupem tohoto cíle nedosáhneme. Direct Switch oproti tomu umožňuje nastavit digitální vstup tak, aby ovládal určený digitální či reléový výstup přímo skrze fyzické propojení. To je pevné a nelze jej měnit, lze jej pouze zapínat a vypínat. V I/O skupině 1 jsou na jednotkách Unipi digitální vstupy propojeny s digitálními výstupy. U skupin 2 a 3 pak jsou digitální vstupy napojeny na reléové výstupy. U modelu Neuron L523 je vstup DI1.1 propojen s DO1.1. DI3.14 je pak propojen s RO3.14. Konfigurace Direct Switch se provádí stejně jako u **Debounce**. V **levém panelu** dvojitě klikněte na název vašeho kontroléru Unipi pod Modbus TCP kanálem, v **hlavním panelu** vyhledejte příslušný DI, klikněte na nej a v panelu **Vlastnosti** vyhledejte kolonku **Direct Switch**. {{ :en:sw:01-mervis:digital-inputs-09-direct-switch.png?direct |}} Jak můžete vidět, tato možnost má rozbalovací menu obsahující různé módy funkce. * **Blokování**: funkce je vypnuta * **Kopírovat**: Stav DI je přenášen na DO či RO. Pokud se DI přepne na ''TRUE'', stav DO se rovněž změní na ''TRUE''. To samé platí i při změně stavu na ''FALSE''. * **Kopírovat inverzně**: Stejný princip jako u předchozího módu, avšak inverzně, tj. pokud je DI ve stavu ''TRUE'', DO se přepne do stavu ''FALSE'' a naopak. * **Přepnout**: Tento mód přepne DO při detekci náběžné hrany na DI. Tato funkce je praktická například pro ovládání světel digitálním spínačem. Po dokončení konfigurace je nutné ji stáhnout do kontroléru. Viz návod [[cs:sw:01-mervis:unipi-configure-module-hidden|]]. Funkce **Direct Switch** je rovněž závislá na nastavení **Debounce**. Aby změna na výstupu nastala okamžitě, je nutné **Debounce** nastavit na takovou hodnotu, která nezabrání požadované funkci **Direct Switch**, ale zároveň nepopře smysl funkce **Debounce**. Interval 5-10ms by měl v tomto případě stačit.