Připojení 1-Wire zařízení

V tomto tutoriálu se dozvíte, jak zapojit 1-Wire teploměr a vytvořit si velmi jednoduchý regulátor teploty.

Axon
Neuron
Unipi 1.1

  • 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
    • nadefinový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í

Pro účely tohoto tutoriálu použijeme kontrolér UniPi Neuron L503.

Všechny potřebné informace o připojování senzorů založených na čipu DS18B20 naleznete zde.

Předpokládejme, že Vaše Mervis IDE nyní vypadá takto:

Klikněte pravým myšítkem na PLC v nabídce Sestava na levém panelu. Pak klikněte na Přidat kanál.

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.

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.

Zobrazí se další rozbalovací menu, ve kterém vyberte linkový protokol OneWire

Nyní je nutné Nahrát sestavu do PLC, aby se v PLC vytvořil komunikační kanál OneWire.

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 myšítkem 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.

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ší >.

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ší>

Import senzoru bude následně zakončen navrácením PLC zpět do původního módu.

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.

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

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.

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 nebo stisknutím klávesy ENTER.

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.

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.

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.

Pokud bylo vše provedeno správně, hlavní panel bude vypadat zhruba následovně.

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ž…”).

Přetáhněte blok LT do logické sekce.

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ě:

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

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

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

Celý projekt si můžete stáhnout zde: attaching-1-wire-devices.zip