Jste zde

TEST - MODBUS Master terminály pro PC - 1. Simply Modbus

Průmyslová sběrnice MODBUS je dnes běžnou součástí mnoha průmyslových systémů, komponent a zařízení. V provedení MODBUS RTU pro sériovou sběrnici nebo MODBUS TCP pro ethernetovou síť ji podporuje prakticky většina PLC. Ale jak komunikaci snadno otestovat z připojeného PC? K tomu poslouží jednoduchý PC software obvykle označený jako MODBUS terminál. Dnes se prakticky podíváme na prvního zástupce program Simply Modbus.

Proč použít MODBUS terminály pro PC?

Pro základní testování základního přenosu ASCII znaků (textu) přes sériové rozhraní RS-232, RS-422 či RS-485 , připojené k PC dnes obvykle přes USB převodník, běžně slouží různé softwarové sériové terminály, které poskytující zachycení a zobrazení přijatých dat a vyslání libovolných dat či textů v podobě ASCII znaků. Zmínit lze ve Windows historicky integrovaný a velmi spartánský Hyperterminál nebo například free program HW Hercules (viz odkaz hercules-tcp-udp-a-seriovy-terminal-pro-windows.html).

Průmyslová sběrnice MODBUS RTU používající na fyzické vrstvě sériovou sběrnici RS-485, či MODBUS TCP podobně využívající ethernet LAN síť, pak svojí nepříliš velkou složitostí komunikačního formátu (paketu) umožňuje v nouzi pro ovládání z PC využít i tyto základní sériové terminály. Při požadavku vzdáleného ovládání či čtení dat a sledování MODBUS zařízení pak počítač musí pracovat v režimu Master, tedy vysílá požadavky / dotazy konkrétním slave jednotkám identifikovatelným jejich MODBUS ID adresou a následně zpracovává jejich odpovědi. Ale zadávání dat v podobě čísel v hexa formátu a navíc nakonec počítání kontrolního součtu celé sekvence dat není na druhou stranu úplně jednoduchá záležitost. Opravdu v nouzi si lze připravit několik základních vysílacích sekvencí, ale pro smysluplnější práci je vhodné použít specializované programy tzv. MODBUS terminály či MODBUS testery. Ty nejsou tak složité na instalaci a nakonfigurování jako např. OPC servery či podobné vizualizační prostředky, které by samozřejmě šlo také využít, ale obsahují prostředky pro snadné složení odchozích paketů z jednotlivých informací, i "dekódování" příchozích komunikačních paketů zpět na jednotlivé části a přehledné zobrazení dat jednotlivých registrů. Navíc u nich lze kontrolovat i strukturu dat celého paketu, což je výhodné pro odlaďování případných komunikačních chyb.

Při vhodném hledání na internetu lze najít několik velmi pěkných prográmků, které jsou buď zdarma, nebo nejsou drahé a lze je obvykle na začátku používat i v nezaplacené demo či shareware verzi. Jedním velmi příjemně jednoduše, ale přehledně realizovaným PC Modbus RTU i TCP terminálem je "Simply Modbus". Ten jsem prakticky vyzkoušel ve spolupráci se slave zařízením - převodníkem Laumas TLS, o kterém jsem psal v testu "TEST - Velmi dobře vybavený převodník tenzometrů = Laumas TLS - 2.díl".

Komunikační formát MODBUS

Dříve než si ukážeme praktické používání terminálu Simply Modbus v režimu Master, je dobré si připomenou některé základní obecné věci o Modbusu:

MODBUS je průmyslový protokol pro přenášení zpráv pracující na aplikační hladině OSI modelu poskytující komunikaci na principu klient / server (master / slave) mezi zařízeními komunikujícími na různých typech sběrnic a sítích. Struktura standard byla vyvinuta firmou Modicon v roce 1979 a postupně se z něho stal průmyslový standard. MODBUS je protokol typu žádost / odpověď (request / reply ) a poskytuje přenos služeb specifikovaných tzv. kódem fukce (function code). Protože je MODBUS plně otevřená architektura, umožňuje komunikaci po mnoha různých typech architektur sítí.

Struktura paketu komunikačního protokolu MODBUS.

MODBUS protokol je definovaný jednoduchým PDU (Protocol Data Unit) na úrovni aplikační vrstvy OSI modelu a je tedy nezávislý na komunikaci spodních vrstev OSI modelu (tzn. na typu sítě a přenosovém médiu). Mapování MODBUS protokolu na specifickou sběrnici nebo síť pak může přidat další data do paketu, čímž vznikne tzv. ADU (Application Data Unit). Zatímco PDU je stejný pro komunikaci na všech typech sítí, ADU již se může lišit v závislosti na typu sítě (např. RS-485 či TCP/IP).

MODBUS ADU je sestavena master jednotkou (klientem), který tak datovou komunikaci iniciuje. Kód funkce (Function code) určuje serveru druh akce, kterou má s daty vykonat. Jde tedy vlastně o příkaz slave jednotce (serveru). Kód funkce má délku 1 bajtu, tedy teoretický rozsah kódu je 1 až 255. Existují i subfukční kódy, které se přidávají k funkčním kódům pro určení vícenásobných akcí. V praxi je ale nejobvyklejší používání prvních 16 funkcí, které obsahují příkazy čtení i zápisu. Délka celého ADU je limitována maximální délkou dat pro přenos na fyzické síti. Tedy například 256 bajtů pro komunikaci přes RS-485 nebo 260 bajtů pro MODBUS TCP ADU při komunikaci po síti Ethernet.

Komunikace probíhá na základě žádosti (request) od jednotky Master na jednotku slave (od Klienta na Server), při které se v PDU přenáší již zmíněný kód funkce a k němu potřebná data pro její vykonání. Jestliže v průběhu komunikace nenastala chyba, tak slave po provedené akci vyšle odpověď (response) zpět k Masteru, která obsahuje původní kód funkce a data výsledku akce či odpovědi na příkaz. Pokud při přenosu k slave nastala chyba, tak je odpověď obsahuje místo kódu funkce tzv. kód výjimky (Exception code) pro identifikaci chyby.

Komunikační formát sběrnice MODBUS pracuje na principu dotazů a odpovědí jednotek master (klient) a slave (server).

Konkrétně pro komunikaci po sériové sběrnici existuje protokol MODBUS RTU. Ten na fyzické vrstvě využívá standardu rozhranní RS-485, resp. EIA/TIA-485, a na linku může být připojen jen jeden Master (řídící jednotka) a až 247 slave (účastnických) jednotek. Samotná komunikace jen vždy inicializována jednotkou master, takže slave jednotky nikdy nevysílají data bez předchozí žádosti jednotky master a nemohou tak navzájem spolu komunikovat bez účasti Mastera. Struktura MODBUS rámce pro komunikaci po sériové lince je shodná s obecným schématem MODBUS rámce ADU. Jako Error Check se využívá metody CRC nebo LRC. Adresa, udává komunikující slave jednotku, se přenáší  v obou směrech komunikace, tedy ve směru od master k slave i zpět od slave k master, aby master vždy věděl, která jednotka právě odpovídá.

Program Simply Modbus

PC software "Simply Modbus", v mém případě konkrétně ve verzi 6.3.6, představuje na ovládání velmi jednoduchý, ale z pohledu Modbusu velmi dobře zpracovaný komunikační Modbus terminál, jak pro získávání (čtení dat) ze slave jednotek, tak současně i pro zápis dat do zařízení.

Obsahuje totiž velmi přehledný interaktivní popis složení komunikačního paketu, kdy pro vysílanou zprávu prostě uživatel jen zadává či vybírá příslušné hodnoty v příslušných kolonkách představující jednotlivé sekce MODBUS rámce. Nejdříve je nutné zadat adresu dotazované slave jednotky, pak zvolit číslo některého Modbusem standardizovaného příkazu (tzv. číslo funkce) a následně zadat počáteční čtený či zapisovaný registr a počet následujících čtených či zapisovaných registrů. V případě zápisu dat pak ještě následují data, která se mají do příslušných registrů zapsat. Nakonec se automaticky vypočítá kontrolní součet a je možné rámec odeslat.

Samozřejmě nejdřív je nutné program Simply Modbus stáhnout, nainstalovat a spustit. Tedy přesněji jen stáhnout a spustit, protože program v podobě jednoho .EXE souboru se nijak neinstaluje. Prostě se jen klikne na EXE soubor a program se spustí. Pokud tedy jako já budete zkoušet "testovací" verzi, je nutné při každém spouštění vždy několik desítek sekund počkat, což je "otravující" režim této demo verze. Jinak program pracuje v plném režimu, jen po 4 odeslání požadavků slave jednotkám je nutné znovu absolvovat ono zpomalené spuštění, protože se program zablokuje (nelze dále komunikovat) a program se musí vypnout a znovu zapnout... Samozřejmě, když programu zadáte placený registrační klíč, vše toto odpadá.

Po spuštění programu je samozřejmě nejdříve nutné definovat rozhraní, ke kterému je MODBUS sběrnice připojena. V mém případě MODBUS RTU sběrnice jde tedy COM port, protože pro napojení slave zařízení Laumas jsem použil RS485-USB převodník společnosti Papouch, kde je pak přes driver virtuálního COM portu převedeno USB rozhraní na COM port, u mě číslo COM15. Přestože se Simply Modbus nijak neinstaluje, poslední nastavení si vždy pomatuje, takže i při výše uvedenému nucenému restartu programu naštěstí nemusíte nic zadávat.

Pokud je komunikační spojení navázáno, je možné začít komunikovat. Simply Modbus software prakticky má všudy všeho jen 2 okna. První okno, které se automaticky otevře při spuštění programu, slouží pro zasílání "čtecích" dotazů, kdy se vysílají funkce s požadavkem na obdržení nějakým parametrů / dat od slave zařízení. V mém případě převodník Laumas zde podporuje standardizovanou funkci č. 3 (READ HOLDING REGISTR/PROGRAMMABLE REGISTER READING). Druhé okno, do kterého se přejde z okna prvního stiskem tlačítka "Write" slouží naopak k odesílání požadavku zápisu dat do registrů slave zařízení. V mém případě Laumas podporuje funkci č. 16 (PRESET MULTIPLE REGISTERS/MULTIPLE REGISTER WRITING). A to je vše.

Popis výrobce základního okna programu Simply Modbus pro čtení dat ze slave MODBUS zařízení.

Na druhou stranu obě okna jsou koncipována nanejvýš přehledně, což se mi na tomto programu právě nejvíce líbí. Postupujete od levného horního rohu postupně dolů, tedy nejdříve nastavit fyzické komunikační rozhraní, pak zadat adresu daného slave Modbus zařízení se kterým chceme komunikovat, pak zadat číslo funkce, tedy požadovaný příkaz, a nakonec počáteční registr a následný počet registrů slave zařízení, na kterých bude zadaná funkce vykonána. Adresa se zde velmi inteligentně zadává jako celá adresa mínus číslo první adresy, což dává vždy jasný přehled, kde se pohybujete.

Oficiálně podporované funkční kódy programu Simply Modbus:

Funkční kód Typ příkazu Bližší popis funkce
01 (01 hex) Read Discrete Output Coils
05 (05 hex) Write single Discrete Output Coil
15 (0F hex) Write multiple Discrete Output Coils
02 (02 hex) Read Discrete Input Contacts
04 (04 hex) Read Analog Input Registers
03 (03 hex) Read Analog Output Holding Registers
06 (06 hex) Write single Analog Output Holding Register
16 (10 hex) Write multiple Analog Output Holding Registers

 

Příklad čtení dat z MODBUS slave jednotky

Například v případě slave jednotky Laumas TLS, s nastavenou adresou "1", jsou k dispozici adresy použitelných registrů v rozsahu 40001 až 40046. Například registry 40008 a 40009 obsahují aktuální naměřenou hodnotu brutto hmotnosti a registry 40010 a 40011 hodnotu netto hmotnosti, které potřebuji přečíst. V prvním okně programu Simply Modbus tedy zadám adresu č. 1, Laumasem podporovanou čtecí funkci č. 03 a zadám celou adresu 40008, přičemž do ofsetové adresové kolonky zadám první dostupnou adresu 40001 (pozn. Seznam adres každého slave Modbus zařízení musí poskytnout výrobce daného zařízení). Vysílám tak po Modbusu prakticky adresu "7".

Nakonec je ještě nutné zadat počet čtených registrů na "4" a tlačítkem "SEND" se složený MODBUS paket vyšle ven ze sériového portu do slave jednotky. Ta je vykoná a pošle zpět v podobě podobné struktury paketu, která však obsahuje 4 integer hodnoty (spodní a horní) aktuální naměřené hodnoty brutto a netto. Ty se pak již zcela rozklíčované a zabavené ostatních Modbus komunikačních dat objeví ve velmi přehledné tabulce vpravo nahoře, kde je jasně vidět číslo registru i jeho hodnota.

K dispozici je pak i možnost záznamu celé komunikace do log souboru přes tlačítko "SAVE LOG" nebo i uložit či zpět načít aktuální nastavení komunikace přes tlačítka "SAFE CFG" a "RESTORE CFG". Nakonec je tu velmi užitečná funkce automatického periodického časového zasílání aktuálně nastaveného paketu a tedy i následný pravidelný příjem dat ze slave jednotky. To se aktivuje zadržením nenápadného políčka "send continuously" a jeho pomocí okolních voleb se nastavují parametry tohoto režimu.

Simply Modbus umožňuje uložit jak nastavení parametrů v okně, tak i samotnou zaznamenanou komunikační sekvenci (obr. vlevo). Při zasílání požadavku na přečtení např. aktuálních naměřených hodnot je možné aktivovat automatické odesílání požadavku po uběhnutí zadané periody v sekundách (obr. vpravo).

Příklad zápisu / vyslání dat do MODBUS slave jednotky

Do okna zasílání paketů pro zápis hodnot do slave jednotky je nejdříve nutné přejít do druhého okna stiskem tlačítka "WRITE" v základním prvním okně programu Simply Modbus. Jeho koncepce je pak prakticky obdobná jako okna čtení dat, pouze zde je navíc tabulka pro zadání dat vysílaných do zadaných příslušných registrů slave jednotky. V mém případě zde například vysílám do výše zmíněné jednotky Laumas dvě hodnoty pro nastavení spínacích limitů umístěné v registrech 40017 a 40018.

Zde jsme narazil pouze na jeden "chyták". Zadání čísla funkce pomocí rolovacích malinkých šipek u políčka nedovoluje nastavit číslo max. 11, přičemž například v mém případě jednotky Laumas je využívána funkce č. 16. Ale naštěstí ji lze zadat přímo z klávesnice a program neprotestuje.

Závěr

Software Simply Modbus svojí jednoduchostí, ale současně skvělou přehledností rozhodně patří mezi ty lepší programy tohoto typu. Sice neobsahuje různé speciality např. v podobě současného nadefinování a komunikace s více MODBUS slave jednotkami na sběrnici, ale pro základní a rychlou kontrolu funkce a obsluhu MODBUS slave zařízení myslím velmi dobře postačuje. Škoda jen, že není zcela volný (freeware), ale pokud si jej oblíbíte, tak licence / registrační kód za 60 US dolarů není zase tak mnoho. Jím odblokujete pomalý start a zablokování programu po každých 4 odeslaných požadavcích (paketech).

Příště v 2. dílu se podíváme na podobný software, který je sice trošku složitější na ovládání, ale má nějaké funkce navíc a hlavně je zcela legálně zdarma, takže jde o velkého konkurenta programu Simply Modbus...

Odkazy:

Hodnocení článku: