This is an old revision of the document!


FIXME - překlad

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 responzivitu 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.

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:

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 kontroléru Unipi. 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 registrů.

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.

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 tutoriálem Unipi - konfigurace modulu.

Pokud měníte nastavení více registrů, můžete všechny změny uložit najednou později.

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í debounce intervalu. Pokud je třeba interval funkce Debounce nastavit na kratší dobu, než je očekávaná délka sčítaný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ču je globální proměnná - například vstupu Neuron_L503_DI_1.01 odpovídá proměnná Neuron_L503_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í:

Jak můžete vidět, program detekuje náběžné hrany na vstupu Neuron_L503_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_L503_CNT_1.01 má tato proměnná název Neuron_L503_CNT_1.01_set.

Last extra functionality (but not least) is the direct switch. As we discovered, the software detection of changes is far from being instantaneous. And there are applications, where even 20ms delay can cause problems, or represent some discomfort at least. Typical example is a switch controlling a light. What we expect from the behaviour is the instant change of the lighting upon pressing the switch. That, as demonstrated above, is not possible to achieve in the software by simple wiring the DI to DO.

The direct switch is the configuration of digital input in a way it will directly control digital or relay output of the same name. The wiring of the input and output is fixed a cannot be changed, only turned on or off. On Group 1, the DIs are wired to DOs. On other Groups, the DIs are wired to ROs.

On Neuron L503, the direct switch (DS) on DI1.1 is wired to DO1.1. The DS on DI3.14 is wired to RO3.14

The settings is done in the same way we did with the Debounce. Double click on the name of the UniPi module on the Left panel, search for the desired DI in the Main window, click on it and in the Properties panel look for the option called Direct switch.

As you can see, the option has dropdown menu with different modes.

  • Disabled: the direct switch is disabled
  • Copy: The status of the DI is copied to the DO/RO. So when the DI is TRUE, the DO is TRUE and when the DI is FALSE the DO is also FALSE
  • Copy (Invert): Same as above but inverted. When the DI is TRUE the DO is FALSE and vice versa.
  • Toggle: This mode toggles the DO on the rising edge of the DI. Handy for controlling a light with momentary switch for example

After setting the configuration, you need tu download it to the module. See the debounce section.

The Direct switch depends on the Debounce settings. In order to have instant change, you need to set the Debounce to value which doesn't deny the purpose of the Direct switch and yet to value, which doesn't deny the purpose of the Debouncing. The 5-10ms should be OK.