Programování PLC (2): Práce se vstupy a výstupy

Domů Novinky Programování PLC (2): Práce se vstupy a výstupy Zpět
Blog

15.07.2020 Uvádíme druhý díl série blogových článků o použití open-source nástrojů na PLC Unipi. Tentokrát se zaměříme na vstupy a výstupy PLC Unipi a práci s 1-Wire teploměrem.

Úvod

Vítejte u druhého dílu blogové série věnované open-source nástrojům ve světě řídicích jednotek Unipi. V minulém díle jsme si vytvořili bootovatelnou micro SD kartu pro PLC řady Neuron, připojili se k němu, zkusili si lehce modifikovat ukázkový demo projekt v prostředí Node-RED a popsali si základní SW části tvořící dodávaný obraz OS.

V drtivé většině aplikací je stěžejním úkolem PLC ovládat výstupy (akční členy) na základě informací (dat) přivedených na vstupy. Právě vstupy a výstupy (I/O) jsou hlavním tématem tohoto dílu. Každá jednotka Unipi je vybavena sadou vstupů a výstupů, jejichž počet a kombinace závisí na konkrétním modelu. Pro rozsáhlejší projekty, ve kterých by již integrované vstupy/výstupy či komunikační rozhraní nepostačovaly, pak můžete využít rozšiřující moduly řady Unipi Extension. 

Integrované I/O

Pro úplnost si znovu připomeňme, jakými typy I/O je vybavena jednotka Unipi Neuron M203, kterou jsme zvolili jako ukázku pro tento blog.


Jednotka Neuron M203

Coby součást modelové řady Neuron M je M203 jedním ze středních kontrolérů nabízejících vyvážený poměr počtu vstupů/výstupů a kompaktních rozměrů. Jednotka je vybavena následujícími vstupy/výstupy a komunikačními rozhraními: 

Typ I/O Počet I/O Speciální funkce
Digitální vstupy 20 Režim čítače, nastavitelné potlačení zákmitů, možnost funkce přímé vazby na výstupy DirectSwitch
Digitální výstupy 4 Režim pulzně-šířkové modulace (PWM)
Reléové výstupy 14 -
Analogové vstupy 1 Napěťový nebo proudový režim
Analogové výstupy 1 Funkce měření odporu (např. odporové čidlo teploty)
Uživatelské LED 4 -
Rozhraní RS485 1 Volitelná bitová rychlost, parita, počet stop-bitů
Sběrnice 1-Wire 1 Automatická detekce připojených senzorů


Vstupy a výstupy jsou umístěny na samostatných deskách, které komunikují s výpočetním modulem jednotky pomocí vysokorychlostní sběrnice SPI. Datový provoz na ni pak řídí kernelový ovladač v OS Linux s názvem unipi. Pro komunikaci se vstupy/výstupy jednotek Neuron a Axon proto NELZE využít běžně dostupné knihovny pro práci s obecnými vstupy/výstupy (GPIO) jako např. pigpio pro jazyk Python. Naštěstí ale existuje řada jiných způsobů, jak k těmto periferiím uživatelsky přistupovat: 

1) SysFS

Nejpřímočařejší přístup k periferiím pomocí běžných souborových operací. Výhodné při tvorbě lastního SW prakticky v jakémkoliv jazyce (bash, C/C++, Python, PHP...) bez potřeby rozšíření či knihoven. Zároveň  jde o velmi snadný způsob, jak otestovat základní funkčnost vestavěných I/O.

Příklady: 

  • Sepnutí reléového výstupu č. 12 na skupině 2 (označeného jako 2.12):
echo 1 > /sys/devices/platform/unipi_plc/io_group2/ro_2_12/ro_value
  • Přečtení stavu binárního vstupu č. 1 na skupině 1 (označeného jako 1.01)
cat /sys/devices/platform/unipi_plc/io_group1/di_1_01/di_value

2) Modbus TCP

Standardní součást všech obrazů OS dodávaných k PLC Unipi. Ve výchozím stavu je server spuštěný a nakonfigurovaný tak, aby akceptoval pouze místní spojení v rámci jednotky na standardním portu 502. Toto nastavení lze ovšem jednoduše upravit i pro přístup z jiného zařízení skrze LAN či skrze jiný port. Stačí editovat soubor /etc/defaults/unipitcp dle instrukcí v něm uvedených. Modbusové mapy všech jednotek i rozšiřujícíh modulů naleznete na tomto odkazu

Poznámka: U tohoto typu doporučujeme použít již hotový modul/knihovnu pro daný programovací jazyk (např. Pymodbus pro Python). Pro rychlé otestování z prostředí příkazové řádky je pak vhodný například nástroj mbpoll, který je k dispozici jako .deb balík z oficiálního repozitáře. 

Webové služby

Volitelná nadstavba EVOK (součást otevřeného API vyvíjeného Unipi) fungující nad Modbus TCP serverem, která umožňuje ke vstupům/výstupům přistupovat pomocí několika protokolů webových služeb: 

  • REST - formáty WebForms i JSON, možnost hromadných (bulk) operací
  • SOAP
  • WebSocket (využívaný prostředí Node-RED)
  • JSON-RPC

EVOK je standardní součástí otevřeného obrazu OS s předinstalovaným systémem Node-RED. Lze jej ale doinstalovat do jiných obrazů založených na OS Debian, a to standardním způsobem z balíčků. 

Příklad čtení teploty skrze 1-Wire

Součástí předinstalovaného demo projektu v Node-RED je i ukázka práce s digitálními vstupy a výstupy, na které můžeme demonstrovat získávání hodnoty z připojeného teplotního senzoru s čidlem DS18B20. Mějte na paměti, že následující řádky jsou určené pro OS obraz s Node-RED, který jsme si nachystali v minulém díle.

Po připojení teplotního senzoru k jednotce zadejte její IP adresu do webového prohlížeče (bez specifikace portu). Otevře se kontrolní panel nástroje Evok, který slouží primárně pro ověření funkce I/O, ale rovněž lze skrze něj i provádět rychlou konfiguraci. Zařízení na sběrnici jsou detekována automaticky, hodnota z připojeného teploměru by se tak měla ihned zobrazit na stránce:

Nyní, když máme ověřenou základní funkčnost, můžeme si tuto hodnotu přečíst i v prostředí Node-RED. K tomu slouží uzel unipi input ze skupiny Unipi, který je součást dodávaného OS obrazu. Alternativně jej lze doinstalovat z veřejného repozitáře:

Uzel je třeba odpovídajícím způsobem nakonfigurovat:

Pole Devices označuje typ daného vstupu (binární, analogový, teplotní,...). Do pole Circuits je pak třeba zadat název daného vstupu. Ten je v případě 1-Wire teploměru shodný s jeho adresou a lze jej snadno zjistit pomocí kontrolního panelu nástroje EVOK (viz výše). 

Posledním důležitým polem je Property, které funguje jako filtr hodnot.  Celá zpráva na výstupu vstupního bloku totiž obsahuje množství pomocných dat, které nemusí být vždy potřeba:

První zpráva obsahuje již vyfiltrovanou hodnotu z pole value, zatímco druhá je uvedena v nezměněné podobě, ve které vychází ze vstupního bloku. S touto hodnotou datového typu number můžeme dále přímo pracovat - lze ji zobrazit ji na ovládacím panelu, případně ji odeslat do jiného zařízení. Do hloubky se ale tímto tématem budeme zabývat až v některém z příštích dílů. Prozatím postačí, když hodnotu použijeme v jednoduchém příkladu spínání topení podle teploty s hysterezí: 

Funkční blok Comparator zahrnuje asi nejjednodušší možnou implementaci “termostatu” s hysterezí. Pro lepší pochopení jsou všechny hodnoty zadány v kódu napevno, kdy ve skutečném projektu by byly zcela jistě uživatelsky konfigurovatelné.

 ----------------------------------------------------------------------------

var setpoint = 28;

var hysteresis = 1;

var current = msg.payload;


if (current >= (setpoint+hysteresis)) {

    msg.payload = false;

} else if(current <= (setpoint-hysteresis)) {

    msg.payload = true;

} else {

    msg.payload = "no change";

}


return msg;

--------------------------------------------------------------------------

Heater značí výstupní blok typu unipi output ovládající relé na jednotce.

Pro snadné ladění programu slouží uzel debug, u kterého jej stačí propojit s místem, ve kterém si přejete zprávu zachytit.  Pro zobrazení logovaných zpráv pak stačí kliknout na symbol štěnice v pravém horním rohu okna:

Ukázka ladicího výpisu pocházejícího z tohoto uzlu je uvedena výše (zprávy z bloku teploměru).

Závěr

V tomto díle jsme si vyzkoušeli práci s externím teplotním senzorem připojeným na sběrnici 1-Wire, seznámili se s kontrolním panelem nástroje EVOK a v prostředí Node-RED si vytvořili první vlastní funkci, která pomocí relé spíná topení v místnosti. V příštím díle nás pak čeká ukázka práce s externími moduly komunikujícími skrze velmi rozšířený protokol Modbus.

Kam dál?



Zobrazit více