Siemens Logo!, jako spousta dalších zařízení podporuje univerzální komunikační protokol Modbus. A protože Logo! disponuje ethernetovým portem – jedná se o variantu Modbus TCP. Pro komunikaci přes linku Modbus RTU (kroucená dvoulinka – RS485) není problém použít jakýkoliv převodník TCP-RTU, nebo přímo modul Siemens Logo! CIM (6ED1055-5MC08-0BA1), který kromě převodníku disponuje dalšími funkcemi.
Do Loga jdou tímto způsobem dostat téměř jakákoliv data ze vzdáleného zařízení, ty lze nějakým způsobem zpracovat a případně něco dále ovládat. Možnosti zpracování jsou samozřejmě omezeny omezenou instrukční sadou modulu – je zde jednoduchá matematika, téměř neexistence paměti, práce pouze s celými čísly atd. Ale na druhou stranu, komunikace je stabilní, modul relativně levný a s trochou představivosti lze vytvářet poměrně komplexní programy.
V tomto článku budu vyčítat data z několika zařízení. Modbus je však univerzální protokol, takže na výrobci nezáleží. Důležité je mít správnou tabulku adres jednotlivých dat.
Elektroměr PAC2200 má jako komunikační rozhraní Modbus TCP. Je tedy vybaven ethernetovým portem, přes který je připojen do sítě. Ve stejné síti je i modul Logo! které se dotazuje na hodnoty z elektroměru. Elektroměr musí mít samozřejmě nastavenou IP adresu a port, na kterém jsou modbus data přístupná. Defaultně bývá nastaven na 502. Nic dalšího není potřeba.
Elektroměr pracuje s daty s plovoucí desetinnou čárkou – tedy s formátem Float/Double.
Fotovoltaický střídač Sofar Solar HYD 10KTL-3PH má jako komunikační rozhraní Modbus RTU. Jedná se o dvouvodičovou sběrnici, která musí být na Modbus TCP převedena nějakým převodníkem. Střídač samotný má nastavenou adresu (číslo od 1 do 247 – střídač umožňuje nastavit adresu pouze 1 až 32), rychlost a formát dat (ten je v případě tohoto střídače pevně daný). Tyto parametry se musí nějakým způsobem nastavit přímo do převodníku. Dále se musí v převodníku nastavit IP adresa a port, na který se dotazuje Logo! Komunikace je potom stejná jako v případě Modbus TCP.
Pro tuto komunikaci je tedy potřeba ještě převodník. V tomto případě použiji převodník TCP2RTU od Papouch.com. Střídač pracuje s celými čísly ve formátu Integer.
Seznam Modbus registrů je možné stáhnout na stránce FVE střídač SofarSolar HYD5-20KTL, která zde na webu slouží jako rozcestník a je postupně doplňována o další informace.
Nastavení zařízení
Jak jsem již psal v přechozí části článku, pro navázání komunikace je nutné mít správně nastavené parametry přenosu. Tedy rychlosti, adresy a formát dat.
Modbus RTU (nejčastěji sériová linka RS-485)
Tato komunikační linka je nejčastěji provozována na sběrnici RS485. Jedná se o dvouvodičovou sběrnici (kroucená dvoulinka), která je na obou koncích zakončena 110 Ohm odporem (často je fyzicky osazen rezistor 120 Ohm). U kratších sběrnic se nemusí zakončovací odpory použít. Vodiče jsou označovány RxTx+ a RxTx-. Není zde žádné křížení „plus“ se zapojuje na „plus“, „mínus“ na „mínus“.
V rozhraní zařízení je nutné nastavit adresu. Je to celé číslo od 1 do 247. Některá zařízení neumožňují takový rozsah. Díky adresaci je možné připojit na jednu linku více zařízení a nezávisle s nimi komunikovat. V síti může být jedno master zařízení které se „ptá“ a „nastavuje“ hodnoty do více slave zařízení.
Dále je nutné nastavit rychlost (běžně 9600, nebo 19200 baud), počet datových bitů (7, nebo 8) a paritu (sudá/lichá). Nejčastější konfigurace zařízení je 19200 baud, 8 bitů, sudá parita. Všechna zařízení na sběrnici musí komunikovat stejně.
Další věcí, se kterou se lze setkat při komunikaci je tzv. Endianita. Je to pořadí, ve kterém jsou vysílány jednotlivé bajty. Pokud se načítá např. hodnota ve formátu float, která má čtyři osmibitové bajty, lze tuto hodnotu načítat „obráceně“ a dojít ke špatnému výsledku. Viz příklad níže…
Proměnná s hodnotou „1 234 567 890“ bude uložena hexadecimálně jako bajty 0x49, 0x96, 0x02, 0xD2. Při požadavku na vyčtení hodnoty mohou jednotlivé bajty odeslat ve dvou různých pořadích. V programu je potom si je správně seřadit, abychom došli ke správnému výsledku. Data mohou být načtena takto:
Big Endian: 0x49, 0x96, 0x02, 0xD2 => 1 234 567 890 dec
Little Endian: 0xD2, 0x02, 0x96, 0x49 => 3 523 384 905 dec
Modbus je standardně Big Endian a většinou to nemusíme řešit. U Loga a většiny zařízení ani není možnost to nějak ovlivnit. Ale pokud používáme např. 16b systém, kde se jedno 32b číslo načte jako dva 16b bajty je nutné vědět v jakém pořadí je spojit před převedením na desítkový formát.
Modbus TCP
Protokol Modbus TCP běží na standardní ethernetové lince. Důležitá je tedy IP adresa a port, na který se zařízení dotazuje. Samotná komunikace probíhá na úrovni programu stejně.
Modbus TCP je na rozdíl od RTU multimasterová sběrnice. Může být zde více master zařízení, které komunikují se slave jednotkami.
Program pro Siemens Logo!
Protože je komunikace vždy převedena na Modbus TCP, bude program pro Logo pouze jeden. Nejprve je nutné v nastavení povolit Modbus komunikaci. To s sebou nese jisté bezpečnostní riziko, proto je tato volba defaultně zakázána.
Nejjednodušší způsob jak načítat data z Modbus zařízení je použít blok Network input, nebo Network analog input. Pomocí těchto bloků je možné přímo vyčítat data ze vzdáleného zařízení.
Načítání celého čísla z Modbus registru (Integer)
Na obrázku je vidět, že je zde vloženo několik bloků Network analog input. V konfiguraci bloku se zvolí IP adresa zařízení, typ zařízení, port, adresa (Unit ID) a pak typ dat (HR = Holding Register) a adresa registru. O vše ostatní se postará Logo!. Na výstupu bloku je pak hodnota registru, se kterou lze dál pracovat.
V mém případě je zde několik analogových zesilovačů, které používám pouze jako objekt ze kterého čtu a upravuji data pro zobrazení na displeji. Ale stejně tak zde může být matematická instrukce atd.
Tímto se ale načte pouze celé číslo, které může mít desetinná místa „uměle“ posunuta. Typicky se ze střídače načítá napětí jako např. hodnota 2301. V tabulce registrů je uvedeno, že hodnotu je potřeba vydělit koeficientem 10. Výsledná hodnota je tedy 230,1 V. Obdobné je to u frekvence, kde je koeficient 100. Tedy 5003 / 100 = 50,03 Hz.
Aby bylo možné zobrazit hodnotu s desetinným místem na displeji, je možné přímo v konfiguraci analogového bloku nastavit hodnotu Decimal Places. Volba samotnou hodnotu nijak neupravuje, ale na displeji bude zobrazena s nastaveným počtem desetinných míst.
Na displeji modulu lze pak hodnotu pohodlně zobrazit pomocí bloku Message text. Jeho konfigurace může být jako na obrázku níže.
Hodnota se načítá z bloku Analog Amplifier, použije se výstupní zesílená hodnota Ax. Protože je v bloku už nastavený počet desetinných míst, nic jiného se nenastavuje.
Načítání čísla s desetinnými místy (Float/Double)
Některá zařízení, nebo některé hodnoty mohou být v registrech uloženy ve formátu Float/Double. Umožňuje to uložit větší rozsah čísel i s desetinnými místy. Logo! bohužel práci s čísli s desetinnými místy neumožňuje, je tedy potřeba načítat data prostřednictvím speciálního bloku. Ten však neumožňuje přímé načítání hodnot jako blok Network input.
Je tedy nejprve nutné data ze zařízení načíst do VM paměti Loga a poté zpracovat blokem Float/integer Converter.
Konfigurace načítaných dat se provede ve vlastnostech projektu. Pravým tlačítkem v „Ethernet Connections“ se přidá slave zařízení. Zadá se jeho adresa, port a konečně i hodnoty registrů, směr přenosu a místo kam se uloží. Konfigurace na obrázku ukazuje načtení dvou holding registrů z IP adresy 192.168.1.105. V prvním řádku se data z registru 1 (opět je zde nutné přičíst jedničku, v tabulce je tedy adresa 2) uloží do VM paměti na pozici 0. Na druhém řádku data z registru 3 do paměti na pozici 4. Oboje data mají velikost 2 wordy a načítají se z Holding registru.
Více informací je přímo v nápovědě Logo Soft Comfortu.
Po této operaci jsou data uložena v registrech Loga a je možné s nimi pracovat. Do projektu je možné vložit blok Float/Integer Converter a ten nastavit tak, aby hodnotu z registru převedl pomocí nastaveného rozlišení na Integer.
Blok má dva výstupy. Standardní AQ, který může nabývat hodnot -32768 až 32767 a rozšířený eAQ, který umožňuje pracovat s hodnotami -999,999,999 až 999,999,999.
Výsledné zobrazení dat na displeji může vypadat třeba jako na obrázku níže. Jsou zde tři síťová napětí L1, L2 a L3. To jsou hodnoty z registrů 1166, 1177 a 1188. Dále je zde napětí na stringu P1 a P2. Je to foceno v noci, takže je napětí nulové. Jeden string má na mám střídači offset 1,4 V.
Ukázkový projekt pro Logo Soft Comfort si můžete stáhnout zde.
Další práce s vyčtenými hodnotami je obdobná jako s jakýmikoliv jinými analogovými hodnotami. Lze použít všechny analogové bloky, řídit hodnotami digitální výstupy atd. Více informací o dalších možnostech Loga najdete v ostatních článcích zde na webu.
- Programování Siemens Logo! #1 – O co vlastně jde?
- Programování Siemens Logo! #2 – Logické funkce
- Programování Siemens Logo! #3 – Časovače a analog
- Programování Siemens Logo! #4 – Tvorba programu bez software
- Programování Siemens Logo! #5 – Datalogger
- Programování Siemens Logo! #6 – Webové rozhraní
- Programování Siemens Logo! #7 – Propojení více modulů
- Programování Siemens Logo! #8 – Připojení HMI Simatic
- Programování Siemens Logo! #9 – Připojení na cloud AWS
- Programování Siemens Logo! #10 – Modbus komunikace
- Programování Siemens Logo! #11 – Komunikace s aplikací v PC
- Další články a videa v češtině. Nejedná se o moji tvorbu, ale také stojí za shlédnutí.
Ahoj, opět skvělé informace. Já jsem teď dokončil řízení jednoho čínského tepelka pomocí Loga. Ke čtení hodnot z registrů a softwarovému ovládání běhu čerpadla používám převodník USR-DR302. Pracuje bez problémů, je výrazně levnější a mohu doporučit.
Taky ho používám k plné spokojenosti.
Dobrý den, hezky napsaný článek. Mohl by jste komunikac Modbus TCP ze Sofarem udělat článek i na S7-1200? Děkuji.
Peťan: Po pravdě řečeno, s S7-1200 jsem Modbus ještě nezkoušel. Ale můžu něco sesmolit 🙂 Jinak asi odkážu na nápovědu v TIA 😉
Dobrý den, mám také ve vašich článcích zmíněný fotovoltaický střídač Sofar Solar HYD 10KTL-3PH a vyčítání dat pro další zpracování mě láká – cenově mě LOGO připadá také dostupné. Mám jen otázku, lze zpětně z LOGa i řídit funkce střídače, jako přepínání módů provozu nebo vypínání přetoků do sítě – vzdáleným přístupem přes LOGo pokud nejsem doma, to mě teď trápí nejvíce. Dostupnost takových řešení na Sofar je dnes zatím nula. Děkuji za informaci.
Peťan: Sám jsem zapisovat do střídače nezkoušel. Aktuálně data jenom vyčítám. Ale podle tabulky registrů jsou některé Read/Write. Můžete to zkusit a dát vědět, jak jste dopadl 😉
Dobrý deň, výborne popísane. Skúšam niečo také rozchodiť na meniči Goodwe no nejak som sa zasekol. Mohli by ste prosím zverejniť aj nastavenie prevodníka ? Ideálne screenshot.
Ďakujem.
Peťan: Doplnil jsem screenshot nastavení převodníku do článku. Ale samozřejmě záleží na nastavení sítě, střídače a typu převodníku. Spíš pro orientaci…
Ďakujem veľmi pekne ,pomohlo.