17.06.2020 Představujeme první díl blogové série zaměřené na použití open-source nástrojů v řídicích jednotkách Unipi.
Nová série cílí především na čtenáře z řad studentů, vývojářů, kutilů, a fanoušků Raspberry Pi (či podobných platforem), užitečné informace v ní ale naleznou i stávající uživatelé PLC Unipi, kteří by rádi vyzkoušeli alternativu k oficiálnímu podporovanému řešení Mervis. Články proto předpokládají jisté elementární znalosti IT a programování - čtenáři by proto neměly být cizí základy práce s příkazovým řádkem linuxového shellu nebo pojmy jako IP adresa, paměť flash, SSH či Modbus.
Co vás čeká v prvním díle?
- vytvoříme kartu s předpřipraveným obrazem operačního systému (OS)
- zkusíme lehce upravit předchystaný program typu Hello world
- vysvětlíme si vnitřní softwarovou strukturu jednotek Unipi
Veškeré příklady budou předváděny na jednotce z řady Neuron, konkrétně modelu Neuron M203, samozřejmě je ale možné je aplikovat i na ostatní typy jednotek z nabídky Unipi. Jejich hlavním společným jmenovatelem tvořícím základ pro všechen ostatní software je totiž otevřený operační systém Linux v distribuci Debian (dále jen OS).
Představení Neuron M203
Nákres jednotky M203
Vlastnosti | ||
Digitální vstupy | 20 |
Raspberry Pi 3 Model B |
Digitální výstupy | 4 | |
Reléové výstupy | 14 | |
Analogové vstupy | 1 | |
Analogové výstupy | 1 | |
Rozhraní RS485 | 1 | |
Sběrnice 1-Wire | 1 |
Generování microSD karty s OS
Jednotky z řady Neuron založené na jednodeskovém počítači Raspberry Pi neobsahují žádnou vnitřní paměť flash, kterou by bylo možno použít pro operační systém. Proto si nejprve “vytvoříme” bootovací microSD kartu, kterou následně vložíme do jednotky. Je na ní uložen jak obraz OS, tak i veškeré ostatní programy včetně uživatelských dat. Pojďme tedy na to.
V tomto kroku budeme potřebovat následující:
- Libovolný počítač vybavený čtečkou (micro)SD karet a s prakticky libovolným OS (abychom dostáli názvu této série, budou veškeré ukázky prováděny na OS Linux - konkrétně distribuci Mint, lze však použít jakoukoliv distribuci a to i ve virtualizovaném prostředí - např. VirtualBox pro OS Windows). Použít lze samozřejmě i například Raspberry Pi s připojenou USB čtečkou.
- Micro SD kartu o velikosti alespoň 4 GB (lépe však 8 GB a více)
- Samotnou řídicí jednotku Neuron M203
Pro obě hlavní platformy (Neuron i Axon) lze aktuálně vybírat ze 3 typů předpřipravených obrazů OS:
- Mervis OS - obraz OS pro Mervis, hlavní podporované softwarové řešení pro PLC Unipi. Více informací o Mervis se dozvíte na tomto odkazu
- OpenSource OS - čistý OS na bázi Linux Debian se všemi potřebnými ovladači a nástroji nutnými pro komunikaci s I/O jednotky, určený jako základ pro instalaci SW třetích stran nebo vývoj vlastních aplikací. K dispozici jsou uživateli práva správce (root), je povolen přístup přes SSH.
- Node-RED OS - shodný jako OpenSource OS, avšak obsahuje již předinstalované populární webové IDE Node-RED včetně nezbytných podpůrných nástrojů (např. Evok - viz dále). Pro účely blogu bude využita právě tato varianta.
Všechny tyto obrazy jsou ve svých posledních verzích volně ke stažení na Unipi Knowledge Base. Obsah staženého archivu ve formátu .zip rozbalíme a zapíšeme na připojenou microSD kartu, například pomocí nástroje dd. Samotná operace zápisu obrazu na kartu může trvat i několik minut. Celý proces pak může vypadat třeba takto (názvy souborů a jejich cesty se mohou pochopitelně lišit):
martyy@martyy-pc:~#wget https://kb.unipi.technology/_media/files:software:os-images:neuron-node-red_image-20200507.2.zip
martyy@martyy-pc:~#unzip files\:software\:os-images\:neuron-node-red_image-20200507.2.zip
martyy@martyy-pc:~#dd if=neuron-node-red_image-20200507.2.img of=/dev/sda bs=1024 status=progress && sync
1907815424 bytes (1.9 GB, 1.8 GiB) copied, 547 s, 3.5 MB/s
1863680+0 records in
1863680+0 records out
1908408320 bytes (1.9 GB, 1.8 GiB) copied, 576.53 s, 3.3 MB/s
martyy@martyy-pc:~#
Takto připravenou kartu následně vložíme do vypnuté jednotky, připojíme síťový kabel místní sítě a přivedeme napájení 24 V DC. Úspěšný start operačního systému poznáme dle blikajících LED u konektoru RJ45.
Připojení k jednotce
Ve výchozím stavu je na síťovém rozhraní aktivní dynamické přiřazení IP adresy pomocí protokolu DHCP. Pro připojení k jednotce je tak nutné zjistit její aktuální IP adresu. To lze provést několika způsoby - např. pomocí skeneru IP adres, seznamu přidělených adres poskytnutým Vaším směrovačem nebo pomocí služby mDNS, která je na jednotce aktivní prostřednictvím démona Avahi (nástroj avahi-resolve je součástí Debianovského balíku avahi-utils).
Hostname všech jednotek Unipi má tvar <model>-sn<sériové číslo>, například:
martyy@martyy-pc:/home/martyy# avahi-resolve -n M203-sn55.local
M203-sn55.local 192.168.221.145
Po zadání zjištěné IP adresy do řádku webového prohlížeče by se měla zobrazit tato úvodní stránka nástroje Evok:
Adresu již máme, pojďme si tedy shrnout, co vlastně na jednotce běží a je dostupné zvnějšku:
- SSH na standardním portu 22 (login: unipi; heslo: unipi.technology)
- Několik webových stránek
- Port 80 - panel nástroje Evok (viz dále). Slouží pro rychlé ověření funkčnosti vstupů/výstupů a případné změně jejich režimu (viz další díly série)
- Port 1880 - hlavní rozhraní vývojového prostředí (IDE) Node-RED, ve kterém se vytváří jak vizualizace (GUI Dashboard), tak samotná logika programu
- Port 1880/ui - samotné grafické rozhraní (GUI) svázané s běžícím programem.
První program
Aplikace vytvořené v prostředí Node-RED jsou tzv. programy řízení událostmi (event-driven). Tyto spouštěcí události (triggery) mohou přestavovat jak události fyzické (tzn. spojené s HW) - např. změna logického stavu binárního vstupu, tak i čistě softwarové - impuls z uzlu časového spínače zapnutí nebo vypočtená informace o východu/západu slunce. Pro tok události skrze síť jednotlivých uzlů (označovaných jako Nodes), které na ni mohou (nebo nemusí) reagovat je zaveden výraz "flow", označující zároveň i ucelenou skupinu vzájemně propojených uzlů. Takovýchto skupin může být v rámci jednoho Node-RED projektu více.
Ve výchozím obsahuje obraz Neuron Node-RED OS jednoduchý ukázkový program typu Hello world, který umožňuje sledovat/ovládat některé I/O na připojené jednotce a obsahuje jednoduchou vizualizaci (GUI) - Dashboard.
Po kliku na přepínače v sekci Digital outputs by se měly sepnout příslušné binární výstupy -> rozsvítit jejich LED indikátory. Pokud tomu tak je, funguje vše správně a my si můžeme zkusit program lehce upravit - zde lze volně experimentovat s vestavěnými uzly, případně si jednoduše z internetu nainstalovat další (Manage palette -> Install).
Výše uvedený triviální příklad přidá na dashboard další ovládací prvek (tlačítko), které umožní spínat výstup DO 1.1 se zpožděním 5 vteřin.
Po každé modifikaci programu je nutné ho “nasadit”, k čemuž slouží tlačítko Deploy v pravém horním rohu okna:
Tato blogová série rozhodně necílí na to stát se tutoriálem Node-RED, pro další studium tohoto mocného nástroje mohu doporučit například tyto zdroje:
- Oficiální tutoriály na https://nodered.org/docs/tutorials/
- Vícedílný průvodce na http://noderedguide.com/
- Množství video-tutoriálů na YouTube, například zde
Vnitřní struktura SW
Toho, kdo dočetl první díl blogu až sem a je trochu zvídavý, může napadnout otázka, jak to vlastně funguje “uvnitř” jednotky po softwarové stránce. Vzhledem k otevřenosti jednotek to není žádným tajemstvím - po přihlášení skrze SSH se můžete sami přesvědčit. Procesy klíčové pro běh uživatelského programu jsou primárně tyto:
- unipi_tcp_server - služba umožňující přístup k periferiím (I/O jednotky) skrze protokol Modbus TCP. Primárně určena pro další služby/procesy běžící v rámci jednotky, ale lze nakonfigurovat i pro přímý přístup “zvenčí” - vyzkoušíme si prakticky v některém z příštích dílů. Tento proces je závislý na modulu jádra (s názvem unipi), zprostředkovávajícím samotný přístup na fyzickou sběrnici SPI, kam je připojena drtivá většina I/O.
- EVOK - nástroj zpřístupňující funkce TCP Modbus serveru prostřednictvím volání webových služeb (WebSocket, REST, SOAP, RPC...). Jde o nezbytný komunikační "most" mezi procesem TCP Modbus serveru a nástrojem Node-RED (v tomto případě probíhá komunikace skrze WebSocket).
- Node-RED - uživatelsky příjemné prostředí pro návrh řídicí logiky (Flow) a tvorbu vizualizace (Dashboard). Běží v rámci okna webového prohlížeče a hlavním programovacím jazykem je JavaScript
Schéma SW struktury jednotek Unipi
V rámci OS běží samozřejmě i sada pomocných utility zajišťujících běžné služby jako DHCP klient, SSH server, cron, avahi-daemon apod.
Závěrem
V tomto díle jsme si pro řídicí jednotku Unipi vytvořili kartu s obrazem OS obsahujícím důležité nástroje pro přístup k periferiím jednotky. Předinstalován je zde, spolu s jednoduchým ukázkovým projektem, také SW Node-RED pro návrh řídicí logiky (programu) a webové vizualizace (GUI). Na kterém jsme si velmi stručně ukázali podstatu návrhu aplikace řízené událostmi - tzv. “flow”.
V příštím díle se zaměříme na integraci zajímavějších periferií jako např. teploměr a zkusíme si vytvořit také o něco sofistikovanější program v Node-RED. Na něm si ukážeme také základy ladění užitečné v případech, kdy vše nefunguje podle našich představ.