SEMESTRÁLNÍ PROJEKT Y38PRO Závěrečná zpráva Jiří Pomije Cíl projektu Propojení regulátoru s PC a vytvoření knihovny funkcí pro práci s regulátorem TLK43. Regulátor TLK43 je mikroprocesorový regulátor s ON/OFF a PID regulací. Ovládání je možné prostřednictvím tlačítek a 4 znakového displeje nebo pomocí sériové linky RS485. Maximální rychlost přenosu je 38400 baud. Přístroj využívá pro komunikaci přes RS485 protokol MODBUS RTU. Regulátor má 4 dvoustavové nebo 2 analogové výstupy a jeden analogový vstup pro připojení teplotních snímačů různých typů. V TLK43 je možné nastavit mnoho parametrů ovlivňujících např. typ a vlastnosti regulace, nastavení vstupů a výstupů nebo nastavení sériové komunikace. Regulátor je v laboratoři využíván pro regulaci teploty. Přes teplotní čidlo získává informace o aktuální teplotě a pomocí ON/OFF regulace ovládá Peltierovy články. Propojení s PC Počítač, ke kterému bude regulátor připojen, nemá rozhraní sériové linky RS485. Proto byl použit převodník USB RS485. Jedná se o převodník Papouch RS485s s galvanickým oddělením, automatickým řízením toku dat a možností přepínání mezi linkami RS485 a RS422. Dále je možné připojit také zakončovací rezistor. Nastavení se provádí pomocí šesti přepínačů na převodníku. Instalace proběhla bez problémů a komunikace s regulátorem byla úspěšně ověřena jednoduchým programem. Převodník je v počítači zobrazen jako virtuální sériový port a je tedy možné využívat i existující programy vytvořené pro komunikaci přes sériový port. Protokol MODBUS Protokol MODBUS byl vytvořen v roce 1979 a je používán především v průmyslových zařízeních. Protokol je používán na různých fyzických vrstvách (RS485, RS232, optické a rádiové sítě,...). Jedná se o komunikaci master/slave prostřednictvím požadavků a odpovědí. Protokol definuje dvě metody zpracování zpráv RTU a ASCII. RTU režim musí podporovat všechna zařízení využívající tento protokol, ASCII režim je volitelný. V RTU je každý bajt definován jako 2 hexa znaky. Časová mezera mezi jednotlivými bajty nesmí přesáhnout 1.5 znaku. Mezi jednotlivými zprávami je definována mezera minimálně 3.5 znaku. Data nb Obecný rámec protokolu MODBUS RTU V ASCII režimu obsahuje každý bajt jeden ASCII znak. Proto je přenos pomalejší. Každý rámec začíná znakem : a končí znakem zalomením řádky CR LF. Je tedy jasně daný počátek i konec přenosu rámce a to umožňuje i různě dlouhé prodlevy mezi jednotlivými znaky. Znak : 1 znak Data n znaků Obecný rámec protokolu MODBUS ASCII LRC Znaky CRLF
Struktura zpráv MODBUS RTU Protokol definuje 3 druhy zpráv: požadavek odpověď odpověď při chybě Každá zpráva požadavku čtení obsahuje adresu příjemce, kód funkce, počáteční adresu paměti a počet čtených hodnot (zapsat je možné pouze 1 hodnotu). Správnost přenášených dat je zabezpečena pomocí. je v posledních 2 bajtech každého rámce. paměti Počet hodnot Rámec MODBUS požadavek na čtení Zpráva odpovědi při čtení dat obsahuje adresu odesílatele, kód funkce, počet bajtu, které obsahují hodnoty a požadované hodnoty. Počet hodnot Hodnoty nb Rámec MODBUS odpověď při čtení Zpráva požadavku na zápis obsahuje adresu příjemce, kód funkce, adresu paměti a hodnotu, která má být zapsána. Správnost přenášených dat je zabezpečena pomocí. je v posledních 2 bajtech každého rámce. paměti Hodnota Rámec MODBUS požadavek na zápis Zpráva odpovědi na zápis při úspěšné změně dat je stejná jako požadavek. paměti Hodnota Rámec MODBUS odpověď při zápisu Odpověď při chybě má nejvyšší bit v hodnotě funkce roven 1, ostatní bity funkce se shodují s požadavkem a data obsahují 1 bajt s kódem chyby. Kód chyby Rámec MODBUS odpověď při chybě kód popis 1 neznámý kód funkce 2 neplatná adresa paměti 3 neplatná hodnota 6 zařízení nekomunikuje Kódy chyb
Vývojové prostředí Pro vytvoření programu jsem použil vývojové prostředí LabWindows CVI 9.0. Toto vývojové prostředí se vzhledem k doporučení, budoucímu vývoji a využití jeví jako nejvhodnější, i přes počáteční problémy se spuštěním. Protože svém počítači používám operační systém Linux a LabWindows není možné v tomto systému provozovat, musel jsem využít virtualizační program VirtualBox s Windows XP. Knihovna Hlavním úkolem tohoto projektu bylo vytvořit knihovnu s funkcemi potřebnými ke komunikaci s regulátorem TLK 43. Dále obsahuje funkce pro načítání příkazů ze souboru a práci se sériovým portem. Funkce knihovny Ovládání sériového portu otevření a uzavření sériového portu udržuje informaci o aktuálně otevřeném portu vyčištění bufferu otevřeného portu Komunikace MODBUS sestavení rámce ze zadaných hodnot přečtení hodnot z přijatého rámce vytvoření dat rámce ověření dat rámce odeslání a načtení rámce z otevřeného portu Načtení příkazů načtení jednotlivých příkazů ze souboru(1 řádek souboru = 1 příkaz) oddělení hodnot v příkazech(pomocí předem daného oddělovače, výchozí ';') Knihovna obsahuje také datové struktury pro rámce a příkazy a funkce pro jejich vytváření a mazání z paměti. Většina funkcí má návratový kód 0 nebo NULL při chybě nebo neúspěšném výsledku. Programy Pro potřeby testování jsem vytvořil jednoduchý program pracující jako MODBUS RTU master na sériové lince. K vývoji mimo laboratoř jsem použil program Sipmly Modbus Slave a virtuální sériový port Virtual Serial Ports Emulator.
MODBUS RTU Master Program, který jsem vytvořil využívá knihovnu vytvořenou v rámci tohoto projektu a umožňuje odeslat požadavek a přijmout odpověď. Ze zadaných hodnot nebo vybraného příkazu sestaví zprávu, vypočte a odešle na zvolený port. U odpovědi ověří a vypíše obsah rámce na obrazovku. V případě, že není doručena odpověď včas nebo nemá odpovídající, zobrazí chybu. Okno programu obsahuje v horní části pole pro výběr portu a nastavení jeho parametrů. Níže jsou pole pro vytvoření požadavku a tlačítka pro jeho odeslání. Požadavek je možné sestavit ručně vyplněním příslušných hodnot nebo pomocí výběru příkazu. Příkazy jsou načteny ze souboru při spuštění programu. Jednoduchou editací souboru je možné doplnit nové příkazy nebo upravit stávající. čtení zápis chyba Okno programu MODBUS RTU Master Na obrázku je okno testovacího programu, které zobrazuje ukázku komunikace s MODBUS slave zařízením. V textovém poli Zprávy jsou vypisovány požadavky << a odpovědi >>. Je zde ukázka všch typů požadavků a odpovědí. První dvojice požadavek/odpověď ukazuje úspěšné čtení jedné hodnoty z registru 1. Druhá dvojice ukazuje úspěšný zápis hodnoty 1 do registru 1. Třetí dvojice zobrazuje pokus o zápis na neplatnou adresu paměti.
Simply Modbus Slave Simply Modbus Slave simuluje MODBUS slave zařízení na sériové lince a umožňuje nastavit režim RTU i ASCII. Tento program provádí kontrolu rámce, dokáže vytvořit odpověď na požadavek podle nastavených hodnot nebo vrátit chybovou zprávu při neúspěchu požadované operace. Je tedy dostačujícím nástrojem pro testování a ladění implementace protokolu MODBUS RTU. Bohužel se jedná o demoverzi, která umožňuje odpovědět pouze na 4 požadavky, pak je nutné program restartovat. Pro potřeby testování je však tento program plně dostačující. Okno programu Simply Modbus Slave Obrázek ukazuje okno programu Simply Modbus Slave. Komunikace v okně odpovídá oknu testovacího programu výše. Zde je zobrazen poslední přijatý požadavek na zápis na neplatnou adresu a odpověď obsahující kód chyby. Závěr Přes počáteční potíže s provozováním vývojového prostředí se podařilo vytvořit funkční knihovnu a program pro komunikaci pomocí MODBUS protokolu přes sériový port. Původní záměr s vytvořením knihovny příkazů pro toto zařízení byl nahrazen načtením těchto příkazů ze souboru a tedy i jejich snadnou úpravou nebo přidáváním. Knihovna obsahuje všechny funkce, které jsou důležité pro základní komunikaci a bude využita pro software k řízení a nastavování regulátoru TLK43. Pokud se vyskytnou jiné funkce vhodné pro tuto knihovnu, bude jimi v budoucnu doplněna.