Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision Last revision Both sides next revision | ||
cs:sw:01-mervis:advanced-modes-of-digital-inputs-hidden [2020/01/17 07:22] avsetula created |
cs:sw:01-mervis:advanced-modes-of-digital-inputs-hidden [2022/05/13 07:44] avsetula |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | FIXME - překlad | + | ====== Digitální vstupy: funkce Debounce, Counter a Direct Switch ====== |
- | ====== Digital inputs: debounce, counter and direct switch ====== | + | <WRAP group 100%> |
- | + | <WRAP half column 81%> | |
- | The digital inputs on UniPi controllers have interesting "add-ons", which help accuracy and responsiveness of the regulation. These add-ons are configured in the CPU of the input/output backplane board in UniPi, so they are SW independent and therefor very fast. | + | 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. |
+ | </WRAP> | ||
+ | <WRAP half column 15%> | ||
+ | ;;# | ||
+ | <html><span class="dev-tag dev-patron">Patron</span></html> \\ | ||
+ | <html><span class="dev-tag dev-neuron">Neuron</span></html> \\ | ||
+ | <html><span class="dev-tag dev-axon">Axon</span></html> \\ | ||
+ | <html><span class="dev-tag dev-extens">Extension</span></html> | ||
+ | ;;# | ||
+ | </WRAP> | ||
+ | </WRAP> | ||
===== Debounce ===== | ===== 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: | |
- | The **debounce** functionality is for catching glitches which typically occur when changing states on digital input. Those happen mostly when the digital input is operated by some mechanical element, e.g. momentary switch. The signal generted upon pressing and releasing a momentary switch can look like this: | + | |
{{ :en:sw:01-mervis:digital-inputs-01-debounce.jpg?direct&400 |}} | {{ :en:sw:01-mervis:digital-inputs-01-debounce.jpg?direct&400 |}} | ||
- | To "debounce" these glitches, you have to slow down the reaction on changing states of the input. On HW level, you could achieve this with employing a RC element for example. To make your life easier, you can set this "slowing down" on SW level. | + | 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. |
- | The functionality looks for changes on a digital input. If the change is less then defined debounce time, it will be ignored. Once the change exceeds the debounce time, then the event is passed to the Mervis. | + | 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. |
<WRAP center round info 60%> | <WRAP center round info 60%> | ||
- | By default, all digital inputs are equipped with 5ms debounce time | + | Z výroby jsou všechny digitální vstupy na jednotkách Unipi nastaveny na debounce interval 5 ms. |
</WRAP> | </WRAP> | ||
- | Let's see, how the debounce can be configured in Mervis. The configuration is done per device input, so double click on the UniPi's controller name. In the **Main window**, the tab with all controller's registers will apear. Under the **Name**, you have a search box, where by entering "DI_" you will be presented with the list of digital inputs, or more precisely, their registers. | + | 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 |}} | {{ :en:sw:01-mervis:digital-inputs-02-list-of-inputs.png?direct |}} | ||
- | Select the desired digital input, for which you want to set the debouncing. In the **Properties panel** you can see all the options you can set on this register. The option we are interested in right now is the **Debounce**. Value of this option is number of miliseconds of deboucing period. | + | 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 |}} | {{ :en:sw:01-mervis:digital-inputs-03-debounce-time.png?direct |}} | ||
- | We just changed the configuration of the PLC modules, which is not applicable by simply uploading the solution. To save the configuration, follow the [[en:sw:01-mervis:unipi-configure-module-hidden|UniPi - Configure Module]] tutorial. | + | 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]]. |
<WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
- | If you are about to set options on multiple registers, you can do it at once and **Configure module** afterwards | + | Pokud měníte nastavení více registrů, můžete všechny změny uložit najednou později. |
</WRAP> | </WRAP> | ||
- | ===== Counter ====== | + | ===== Čítač (Counter) ====== |
- | Another interesting functionality of **digital inputs** is the **counter**. It is a software independent, high-speed counter of rising edges of changing signal on digital input. In simple words, it can count short pulses very precisely. | + | |
- | The speed of Mervis programs is not enough for detecting quick changes of digital inputs in traditional way (with the "Pulse counter (BD30)" FUPLA box for example). If you have a [[https://en.wikipedia.org/wiki/Slot_car|slot car track]] and you want to count the number of passes of slot cars, you wouldn't be able to detect it, since the length of pulses from the "pass" sensors will be in units of miliseconds. Speed of the slot car is up to 80kmph and with length of the car about 10cm is the pass of whole car above the sensor about 4.5ms. | + | 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. | ||
<WRAP center round important 60%> | <WRAP center round important 60%> | ||
- | The HW counter depends on the **Debounce** settings. Therefor the **Debounce** has to be set to lower value, than is the expected length of the pulses to count. | + | 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ů. |
</WRAP> | </WRAP> | ||
+ | Čí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_L523_DI_1.01'' odpovídá proměnná ''Neuron_L523_CNT_1.01''. | ||
- | Each **digital input** is equipped with **counter** and you don't need to set anything to use it. The counter is available through global variable. For the input named ''Neuron_L503_DI_1.01'' we have counter variable named ''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í: |
- | + | ||
- | To demonstrate how slow is the software counting, look at this program in debugging mode: | + | |
{{ :en:sw:01-mervis:digital-inputs-08-sw-counter-vs-hw-counter.png?direct |}} | {{ :en:sw:01-mervis:digital-inputs-08-sw-counter-vs-hw-counter.png?direct |}} | ||
- | As you can see, we are counting the rising edge events on the ''Neuron_L503_DI_1.01'' through ''Pulse counter (BD30)'' function block, and reading the HW counter of the same input via the ''Neuron_L503_CNT_1.01'' variable. Afterwards, we compare those two variables in ''eq'' function block, and if they are equal, we will turn the ''X1'' LED on the controller ''ON''. Once the two counters are not equal, the LED will be ''OFF''. | + | 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. |
- | The debugging started with both counter values at 0. We connected a momentary switch to the ''DI1.1'' input and start pressing the switch very quickly. As you can see, the software counter detected only 10 presses, but the hardware counter detected 54. | + | 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. |
<WRAP center round tip 60%> | <WRAP center round tip 60%> | ||
- | The counter variables are read only, therefor you cannot set or reset them directly from program or the variable browser in debugging mode. You can set or reset the variables via "set" variable. For the ''Neuron_L503_CNT_1.01'' the set variable is called ''Neuron_L503_CNT_1.01_set''. | + | Čí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''. |
</WRAP> | </WRAP> | ||
===== Direct switch ===== | ===== Direct switch ===== | ||
- | 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. | + | 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. |
- | 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. | + | 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. |
<WRAP center round info 60%> | <WRAP center round info 60%> | ||
- | 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 | + | U modelu Neuron L523 je vstup DI1.1 propojen s DO1.1. DI3.14 je pak propojen s RO3.14. |
</WRAP> | </WRAP> | ||
- | + | 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**. | |
- | 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**. | + | |
{{ :en:sw:01-mervis:digital-inputs-09-direct-switch.png?direct |}} | {{ :en:sw:01-mervis:digital-inputs-09-direct-switch.png?direct |}} | ||
- | As you can see, the option has dropdown menu with different modes. | + | Jak můžete vidět, tato možnost má rozbalovací menu obsahující různé módy funkce. |
- | * **Disabled**: the direct switch is disabled | + | * **Blokování**: funkce je vypnuta |
- | * **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'' | + | * **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''. |
- | * **Copy (Invert)**: Same as above but inverted. When the DI is ''TRUE'' the DO is ''FALSE'' and vice versa. | + | * **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. |
- | * **Toggle**: This mode toggles the DO on the rising edge of the DI. Handy for controlling a light with momentary switch for example | + | * **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. |
- | After setting the configuration, you need tu download it to the module. See the [[#debounce|debounce]] section. | + | Po dokončení konfigurace je nutné ji stáhnout do kontroléru. Viz návod [[cs:sw:01-mervis:unipi-configure-module-hidden|]]. |
<WRAP center round important 60%> | <WRAP center round important 60%> | ||
- | 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. | + | 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. |
</WRAP> | </WRAP> | ||
- |