====== Připojení 1-Wire zařízení ====== V tomto tutoriálu se dozvíte, jak zapojit [[https://www.unipi.technology/1-wire-temperature-sensor-p63?categoryId=3|1-Wire teploměr]] a vytvořit si velmi jednoduchý regulátor teploty. ;;# Patron \\ Neuron \\ Unipi 1.1 \\ Axon ;;# Co budete potřebovat? * kontrolér Unipi se spuštěným Mervis OS * základní projekt v Mervis IDE v **Plném módu** s: * připojeným kontrolérem * nadefinovaným kanálem Modbus TCP pro komunikaci s PLC * nadefinovaným **spustitelným projektem** s jedním programem * nastaveným **Autogenem** na kontroléru Unipi * nadefinovaným taskem se spuštěným programem ze **spustitelného projektu** * úspěšně provedenou kompilací * [[https://www.unipi.technology/power-supplies-c15|24 V⎓ zdroj]] * [[https://www.unipi.technology/1-wire-temperature-sensor-p63?categoryId=3|1-Wire teploměr]] Pro účely tohoto tutoriálu použijeme kontrolér [[https://www.unipi.technology/cs/neuron-c2|Unipi Neuron L503]]. ===== Připojení 1-Wire senzoru ===== Všechny potřebné informace o připojování senzorů založených na čipu DS18B20 naleznete [[cs:automation:02-glossary:1wire-hidden|zde]]. ===== Nakonfigurování 1-Wire sběrnice v Mervisu ===== Předpokládejme, že Vaše Mervis IDE nyní vypadá takto: {{ :en:sw:01-mervis:attaching-1-wire-devices-01-basic-project.png?direct |}} Klikněte pravým tlačítkem myši na **PLC** v nabídce **Sestava** na **levém panelu**. Pak klikněte na **Přidat kanál**. {{ :en:sw:01-mervis:attaching-1-wire-devices-02-add-channel.png?direct |}} Nový kanál nazvaný **channel** se objeví pod jménem PLC. Je označený, v panelu **Vlastnosti** proto můžete vidět jeho atributy. Nejprve změňte název kanálu na něco více informativního, např. **1-wire**. {{ :en:sw:01-mervis:attaching-1-wire-devices-02-set-channel-name.png?direct |}} Druhý parametr, který je třeba změnit, je komunikační protokol. Protokol 1-Wire je "skryt" pod volbou **PlatformIO** v rozbalovacím menu **Protokol**. {{ :en:sw:01-mervis:attaching-1-wire-devices-04-set-channel-protocol.png?direct |}} Zobrazí se další rozbalovací menu, ve kterém vyberte linkový protokol **OneWire** {{ :en:sw:01-mervis:attaching-1-wire-devices-04-set-channel-link-protocol.png?direct |}} Nyní je nutné **Nahrát sestavu** do PLC, aby se v PLC vytvořil komunikační kanál **OneWire**. ===== Detekce 1-Wire senzorů ===== Sběrnice 1-Wire je sériovou sběrnicí, která může sloužit pro propojení velkého množství senzorů. Každý senzor má svou vlastní unikátní hardwarovou adresu, skrze kterou zařízení v režimu Master adresuje Slave senzory a odečítá z nich data. Z toho důvodu musíme kontrolér Unipi nastavit tak, aby na sběrnici vyhledal specifickou HW adresu. Naštěstí můžeme na sběrnici nadetekovat všechny připojené senzory a až poté si vybrat ty, se kterými budeme dále pracovat. Pro detekci senzorů klikněte pravým tlačítkem myši na jméno kanálu **1wire** v záložce **Sestava** v **levém panelu**. V kontextovém menu pak klikněte na **Detekce čidel OneWire**. {{ :en:sw:01-mervis:attaching-1-wire-devices-06-detect-one-wire-sensors.png?direct |}} Pro spuštění detekce musí být kontrolér spuštěn v **módu oživování**. Mervis IDE Vám zobrazí varovnou zprávu a po potvrzení automaticky kontrolér do daného módu přepne. Po skončení detekce pak kontrolér přepne zpět. Vám stačí pouze potvrdit varování kliknutím na **Další >**. {{ :en:sw:01-mervis:attaching-1-wire-devices-07-switching-to-commissioning-mode.png?direct |}} Pokud jste vše provedli správně, Mervis IDE zobrazí chybovou hlášku s textem **Vybraný kanál v PLC neexistuje**. Při přidávání nového kanálu jej Mervis IDE nebude moci použít, dokud do PLC **nenahrajete sestavu**. **Nahrajte sestavu** a spusťte detekci znovu. Objeví se dialog **Detekce čidel OneWire**, ve kterém by se měl objevit senzor připojený k Vašemu PLC. Pokud jste připojili senzorů více, měli byste je vidět všechny. Pro import senzoru do **sestavy** zaškrtněte políčko **Import** a klikněte na **Další>** {{ :en:sw:01-mervis:attaching-1-wire-devices-09-selecting-sensors.png?direct |}} Import senzoru bude následně zakončen navrácením PLC zpět do původního módu. {{ :en:sw:01-mervis:attaching-1-wire-devices-10-restoring-previous-state.png?direct |}} Jelikož jsme přidali nové zařízení, je třeba **nastavit Autogen**, abychom mohli teplotní proměnné v programu použít. Práce s Autogenem už by pro Vás měla být snadným úkolem - klikněte pravým tlačítkem na jméno senzoru -> **Nastavit Autogen** a potvrďte kliknutím na **OK**. {{ :en:sw:01-mervis:attaching-1-wire-devices-11-set-autogen.png?direct |}} {{ :en:sw:01-mervis:attaching-1-wire-devices-12-set-autogen-dialog.png?direct |}} ===== Ladění sestavy ===== Mervis IDE je vybaven možností **ladění programů**, které umožňuje připojit se k zapnutému kontroléru Unipi, číst jeho stavy a dokonce i upravovat proměnné za chodu. Pro spuštění ladění na **vrchní liště** klikněte na **Start ladění**. {{ :en:sw:01-mervis:attaching-1-wire-devices-13-debug.png?direct |}} Pro zobrazení proměnných a jejich stavu v módu ladění klikněte na záložku **Prohlížeč proměnných** na **hlavním panelu**. Zobrazí se seznam všech dostupných proměnných v kontroléru (pro vyhledávání můžete použít hledání podle **jména**). Teploměr bude mít automaticky přiřazený název "1W-Thermometer" a jeho aktuální hodnota je **29,875** °C. {{ :en:sw:01-mervis:attaching-1-wire-devices-14-variable-browser.png?direct |}} ===== Programování regulátoru teploty ===== V této fázi máme ke kontroléru připojený teploměr a ověřili jsme si, že můžeme odečítat teplotní údaje. Nyní je můžeme použít pro vytvoření velmi jednoduchého teplotního regulátoru Úkolem regulátoru bude sledovat teplotu a při jejím poklesu pod 30 °C sepnout relé ''RO2.1'' do stavu ''ON''. Pokud naopak teplota přesáhne nebo bude rovna 30 °C, regulátor relé ''RO2.1'' přepne do stavu ''OFF''. ''RO2.1'' zde bude představovat topné těleso. Teoreticky bychom nyní mohli nastavit programu pevnou teplotu "30 °C", to by nám ale později zabránilo v její pozdější změně jiným způsobem než opětovným přeprogramováním PLC. Hraniční (či požadovanou) teplotu bychom nejspíše nastavovali tlačítkem, ovladačem či skrze HMI rozhraní, bude proto lepší teplotu definovat jako další proměnnou a nastavit hraniční hodnotu pomocí změny hodnoty této proměnné. Později můžeme proměnnou propojit s jiným hardwarovým vstupem. Program tak bude vyžadovat dva vstupy: ''namerena_teplota'' a ''hranicni_teplota''. Při programování musí mít každá proměnná přiřazený určitý typ, tj. definici hodnoty, kterou může mít. Proměnná může být ve formě integeru, reálného čísla, booleanu (tj. binární 0/1), znaku či řetězce znaků, případně jiného komplikovanějšího typu. Teplotní údaj je ze své podstaty reálné číslo, naše proměnné proto budou nastaveny stejně. Potřebovat budeme rovněž i booleanový výstup ''topeni_zapnuto'', neboť topení bude mít pouze stavy ''ON'' nebo ''OFF'' reprezentované booleanovými hodnotami ''TRUE'' a ''FALSE''. Název ''topeni_zapnuto'' nám pomůže v rozpoznání stavu topení a rovněž díky tomu můžeme definovat, že pokud topeni_zapnuto = true, topení je ve stavu ON. Začněmě tedy tvořit samotný program. Nejprve je třeba vypnout **Ladění**, zastavte jej proto kliknutím na **Stop ladění** v **horní liště**. Následně dvojitě klikněte na jméno programu v **levém panelu** pro jeho zobrazení v **hlavním panelu**. V **Prohlížeči proměnných** jsme proměnnou teploty nazvali jako **1-Wire-Thermometer-Temperature**. Toto jméno se generuje automaticky a jeho první část představuje název senzoru. Tento název ale není příliš popisný, senzor proto přejmenujeme na **kancelar**, neboť s ním chceme měřit teplotu v kanceláři. V **levém panelu** klikněte na název senzoru a v panelu **Vlastnosti** najděte vlastnost **Název**. Změňte jeho hodnotu na **kancelar** a potvrďte buď kliknutím na {{:files:dialog-confirm_button_2.png?nolink|}} nebo stisknutím klávesy **ENTER**. {{ :en:sw:01-mervis:attaching-1-wire-devices-16-sensor-name.png?direct |}} Proměnná **1W-Thermometer_Temperature** se tím přejmenuje na **kancelar_teplota**. Změnu můžete zkontrolovat v **Prohlížeči proměnných**. Nyní teplotu umístíme do programu do **sekce vstupů**. Klikněte pravým tlačítkem na **sekci vstupů** a klikněte na **Globální proměnné** -> **Vložit existující proměnnou**. Objeví se dialog **Vložit existující proměnnou**, ve kterém můžete snadno vyhledat proměnnou **kancelar_Temperature** a potvrdit její výběr kliknutím na **OK**. {{ :en:sw:01-mervis:attaching-1-wire-devices-17-selecting-variable.png?direct |}} Nyní je třeba přidat druhý vstup **hranicni_Temperature**. Tato proměnná v tuto chvíli neexistuje, nemůžeme ji proto vyhledat v existujících proměnných jako **kancelar_teplota**. Klikněte pravým tlačítkem v **sekci vstupů** na místo, kam chcete vstup umístit, a klikněte na **Globální proměnné** -> **Vytvořit novou proměnnou**. V dialogu **Vytvořit novou proměnnou** zadejte název **hranicni_teplota**, nastavte typ na **real** a nastavte výchozí hodnotu na **30**. Potvrďte kliknutím na **OK**. {{ :en:sw:01-mervis:attaching-1-wire-devices-18-create-new-variable-dialog.png?direct |}} Posledním krokem při nastavování vstupů a výstupů je nadefinovat výstup ''RO_2.01''. Klikněte pravým tlačítkem na **sekci výstupů** a klikněte na **Globální proměnné** -> **Vložit existující proměnnou**. seznamu proměnných pak vyhledejte **RO** a vyberte výstup ''Neuron_L503_RO_2.01_w''. Digitální výstupy mají stejnou logiku jako reléové výstupy, použít tak můžete jak RO, tak i DO. {{ :en:sw:01-mervis:attaching-1-wire-devices-19-insert-ro201.png?direct |}} Pokud bylo vše provedeno správně, hlavní panel bude vypadat zhruba následovně. {{ :en:sw:01-mervis:attaching-1-wire-devices-20-inputs-outputs.png?direct |}} Nyní můžeme **logickou sekci** vyplnit "vysokoúrovňovou" logikou. Potřebujeme kontroléru sdělit, aby porovnával proměnnou ''kancelar_teplota'' s proměnnou ''hranicni_teplota''. K tomu budeme potřebovat několik **funkčních bloků**. V **levém panelu** přepněte na záložku **FUPLA bloky**. Ta nyní zobrazuje seznam kategorií, z nichž každá má subkategorie a ty mají své vlastní subkategorie...jelikož nevíme, jak se námi hledaný funkční blok jmenuje, můžeme nyní jen hádat. Protože budeme porovnávat dvě analogové hodnoty, náš hledaný blok by mohl být v kategorii **Basic Analogue Boxes**. Kliknutím ji rozbalte. Porovnávání dvou proměnných se týká matematiky, otevřeme proto subkategorii **Mathematics**. Na konci této subkategorie pak naleznete podřízenou kategorii **Compare Functions** sdružující porovnávací matematické funkce. Jejím otevřením zobrazíte seznam funkčních bloků s poněkud tajemnými názvy jako **eq**, **ge**, **gt** apod... Zde vám bude nápomocna rozsáhlá nápověda, která je součástí Mervis IDE. Na každý funkční blok můžete kliknout pravým tlačítkem a vybrat **Nápověda**, čímž zobrazíte popis funkce každého bloku. Blok, který hledáme, se jmenuje **LT** neboli **Less than** ("Méně než..."). {{ :en:sw:01-mervis:attaching-1-wire-devices-21-compare-functions.png?direct |}} Přetáhněte blok **LT** do **logické sekce**. {{ :en:sw:01-mervis:attaching-1-wire-devices-22-placed-block.png?direct |}} V nápovědě k tomuto bloku se dozvíte následující: //Výstup je TRUE, pokud je hodnota prvního vstupu menší než hodnota druhého vstupu, resp. pokud je hodnota jakéhokoli vstupu menší než hodnota jakéhokoli dalšího vstupu.//. Blok má dva vstupy - ''in1'' a ''in2'' a jeden výstup ''=>''. Z hlediska logiky chceme, aby ''topeni_zapnuto'' mělo stav ''TRUE'' pokud je ''kancelar_teplota'' menší než ''hranicni_teplota''. Abychom vyhověli definici bloku, ''kancelar_teplota'' musí být napojena na vstup ''in1'' a ''hranicni_teplota'' musí být spojena s ''in2''. Výstup ''=>'' pak napojíme na ''topeni_zapnuto''. Propojení vytvoříme kliknutím na černou tečku u názvu vstupu/výstupu a jejím přetažením k obdobné tečce u druhého vstupu/výstupu. Výsledek by měl vypadat následovně: {{ :en:sw:01-mervis:attaching-1-wire-devices-22-wired-block.png?direct |}} Pokud jsme spoje vytvořili správně, můžeme nyní sestavu **zkompilovat**. Pokud pak bude **kompilace** úspěšná, můžeme sestavu **nahrát** do kontroléru. Pokud **nahrání** proběhlo bez problémů, můžeme začít s **laděním**. V módu ladění můžete vidět aktuální hodnoty každého vstupu/výstupu každého bloku. Nyní vidíme, že teplota v kanceláři je 29,625 °C, což je méně než hraniční teplota 30 °C. Topení se tudíž přepne do stavu ''ON'' (''TRUE''). {{ :en:sw:01-mervis:attaching-1-wire-devices-23-debugging-low.png?direct |}} Nyní senzor zahřejeme (např. jeho stisknutím v dlani). Teplota vzrostla na 30,875 °C; to je více než 30 °C a topení se tak přepne do stavu ''OFF'' (''FALSE''). {{ :en:sw:01-mervis:attaching-1-wire-devices-23-debugging-high.png?direct |}} Pokud jste jako výstup použili DO, můžete na kontroléru změnu mezi ''ON'' a ''OFF'' sledovat pomocí LED indikátoru. Pokud jste použili relé, kromě rozsvícení či zhasnutí LED indikátoru uslyšíte i cvakání příslušného relé. ===== Ke stažení ===== Celý projekt si můžete stáhnout zde: {{ :en:sw:01-mervis:attaching-1-wire-devices.zip |}}