X
Forum

Forum

Notifications
Clear all

LOXONE - MODBUS

426 Posts
46 Users
39 Likes
56.7 K Views
(@hl-jarda)
Trusted Member
Joined: 5 years ago
Posts: 48
 

@smotek7

Je to opravdu o verzi configu.

Měl jsem verzi 12.0.xxxx a v té přetažení nefungovalo.

Dostával jsme hlášku

obrazek

Ale po aktualizaci na 12.1.xxx už to funguje


   
ReplyQuote
 zigy
(@zigy)
Active Member
Joined: 6 years ago
Posts: 13
 

Ahoj, 

s trochou trápení jsem rozjel modbus - udp gateway od @budulinek

Mám elektroměr od Eniky EM340.

Vytvořím UDP požadavek na vyčtení více registrů, například napětí na všech fázích, odešlu, vrátí se mi odpověď, kterou si parsováním rozhodím na 3 virtuální vstupy. Vše je v pořádku. 

Problém přijde když chci vyčíst další hodnoty, třeba proud ve všech fázích. Vytvořím požadavek zase na 3 registry ale od jiné adresy. 

Ale na vrácenou odpověď se chytá původní parsování na napětí, ta odpověď vypadá stejně, liší se pouze jinými daty. 

Potřebuji v parsování rozlišit ke kterému konkrétnímu požadavku patří ta konkrétní odpověď.

1. a 2. bajt je transaction ID, to se nabízí, protože odpověď přijde i s tímto ID

mám tedy 1. požadavek na napětí

\xO1\xOO\xOO\xOO\xOO\xOO\xO1\xO4...od jakýho a kolik registrů

a pak mám 2. požadavek na proud

\xO2\xOO\xOO\xOO\xOO\xOO\xO1\xO4...od jakýho a kolik registrů

u virtuálního vstupu pro napětí bych měl nějak říct aby si všímal pouze první odpovědi a né tý druhý, a u vstupu pro proud zase obráceně.

Snažil jsem se podle: http://sarnau.info/loxone-udp-http-command-parser-syntax/

rozeznání příkazu vypadalo nějak takto... což mi nefungovalo

xO1|.|.|.|.|.|.|.|.|.|2|1

Periodicky po vteřině chci vyčítat základní údaje, občas si sáhnout na jiné registry a podle toho chci vytěžovat fve.

 


   
ReplyQuote
(@budulinek)
Reputable Member
Joined: 7 years ago
Posts: 355
 

@zigy

Nezapomeň, že u rozeznávání příkazu by mělo být na začátku lomítko:

|xO1|.|.|.|.|.|.|.|.|.|2|1

Jinak stejný případ jsme už řešili s @jimyjims:

https://www.vodnici.net/community/loxone-a-arduino/loxone-modbus/paged/12/#post-29379

 


   
ReplyQuote
(@smotek7)
Member
Joined: 7 years ago
Posts: 1898
 

Aku pouzivate metodu na zmenu adresy a rychlosti modbus zariadeni?
Vytvorite nato aktor, alebo nieco ine?


   
ReplyQuote
(@budulinek)
Reputable Member
Joined: 7 years ago
Posts: 355
 

Modbus zařízení mám připojené přes Modbus TCP/UDP bránu. Na tyhle servisní zásahy a na testování používám

https://packetsender.com/

Jednoduchý, umí posílat HEX data (ideální pro Modbus) a hned vidíš, jaká ti přišla odpověď.


   
ReplyQuote
Jakub
(@jakub)
Reputable Member
Joined: 5 years ago
Posts: 249
 

@smotek7 Ja pouzivam ModbusPoll, pripojim se kablikem (usb-rs485) a pak zapisu do registru dle manualu pozadovanou zmenu. Nemusim resit HEX, nicmene to jde taky, da se zobrazit komunikace, takze je take videt odpoved.

2021 12 07 083208

   
ReplyQuote
(@smotek7)
Member
Joined: 7 years ago
Posts: 1898
 

@jakub ten ModbusPoll je len na 30 dni, mal som ho uz nainstalovany.

@budulinek skusim ten packetsender.
Inak Modbus monitor som vyriesil tak, ze mal som na policke Ext. RS485 dal som ho na modbus zbernicu a vidim v Lox Configu co tam chodi.

A otazka este k datam, co znamena tento znak?

image

Ci len ma to matie ked to nieje v HEX?


   
ReplyQuote
(@budulinek)
Reputable Member
Joined: 7 years ago
Posts: 355
 

Jo a na Modbus RTU (přes USB-RS485 převodník) jsem párkrát použil

https://realterm.sourceforge.io/

V záložce "Send" a v "+crc" umí sám spočítat CRC pro Modbus. Ale už je to složitější na nastavení.

P.S. ModbusPoll je super, ale nezjistil jsem, jak obejít ten 30 denní trial.


   
ReplyQuote
(@_petr_)
Honorable Member
Joined: 6 years ago
Posts: 492
 
Posted by: @budulinek

ModbusPoll je super, ale nezjistil jsem, jak obejít ten 30 denní trial.

na to vymysleli peníze a autor to na svém webu podporuje přes stránku "Order" 😎 

 

Jinak já používám QModMaster.


   
ReplyQuote
(@budulinek)
Reputable Member
Joined: 7 years ago
Posts: 355
 

@_petr_

Hmmm, jasně.

A každý normální obchodník má různé cenové politiky (a různé funkcionality) pro různé segmenty zákazníků. Vývojář Modus zařízení (komu je ModbusPoll primárně určený) si to rád zaplatí, protože pro něj je to vypnutí programu po 10 minutách opruz a překážka v práci.

Domácí bastlíř, který si jednou za X měsíců chce něco vyzkoušet nebo nastavit za to ty peníze nedá. Normální (tj. racionálně kalkulující) obchodník má pro tyhle lidi nachystanou osekanou verzi (kterou má nastavenou tak, aby byla pro profi zákazníky nepraktická/nepoužitelná). Ví, že z tohodle segmentu nikdy $ nevytříská, ale chce aby i tenhle segment jeho produkt (čas od času) používal (z různých důvodů - šíření povědomí o produktu, vytěsňování potenciální konkurence, atd).

EDIT

Dík za tip, QModMaster vypadá zajímavě. ModbusPoll nemá cenu řešit, po půl roce od instalace tě nepustí ani na 10 minut něco nastavit. Použijte raději nějaký konkurenční program.


   
ReplyQuote
(@smotek7)
Member
Joined: 7 years ago
Posts: 1898
 

@budulinek este je dalsia moznost, napisat si vlastny SW 😀 


   
ReplyQuote
(@peterj)
Active Member
Joined: 5 years ago
Posts: 16
 

tieto utility su zdarma

https://store.chipkin.com/products/tools#modbus-scanner


   
ReplyQuote
(@budulinek)
Reputable Member
Joined: 7 years ago
Posts: 355
 

Přes PM jsem tu měl od @jimyjims dotaz na čtení několika Modbus registrů najednou. Dávám odpověď sem pro všechny...

 

Začnu sepsnutím Loxone Configu. Všichni víme, že Loxone zkurvil Modbus 5 sekundovým limitem na dotazování. Ale je tu ještě jeden průser: klasické loxoní klikátko (tj. Modbus Extension nebo Modbusserver) se neumí dotázat na vícero registrů najednou. Podle mě je to velkej fail, protože dotaz na vícero registrů najednou je standardní vlastnost modbus protokolu.

Co to znamená v praxi? Mám elektroměr s 8 kanály ( https://www.aliexpress.com/item/1005002673919847.html) - dělají se ale i 16 kanálové. Pokud si v Lox naklikám Modbus zařízení s 16 senzory, frekvence dotazování 5s, tak to znamená, že zelená mrcha každých 5 sekund odešle 16 individuálních modbus dotazů na každý registr zvlášť. Úplná debilita...

Řešení: Vlastní modbus brána, která umí protokol Modbus UDP.

Modbus dotaz přes virtuální UDP výstup (zaměňte O za nuly). Frekvenci odesílání dotazu si dejte jakou chcete, já mám 2s:

\xOO\xO1\xOO\xOO\xOO\xO6\xO1\xO3\xOO\xO8\xOO\xO8

složení zprávy viz https://www.vodnici.net/community/loxone-a-arduino/loxone-modbus/paged/14/#post-30170

---------------- MBAP hlavička (poskládám si sám) -------------

1. a 2. bajt: transaction ID (dejte cokoliv, mělo by to být unikátní pro každý virtuální výstup s modbus requestem)

3. a 4. bajt protocol ID (vždy 0000)

5. a 6. bajt délka zbytku zprávy (v tomto přípatě 6)

--------------- další bajty jsou u Modbus UDP protokolu stejné jako v Modbus RTU protokolu, takže je poskládám podle návodu k mému zařízení (ve kterém je popsaný Modbus RTU protkol) -----------------------------

7. bajt: adresa modbus zařízení (můj elektroměr má adresu 1)

8. bajt: modbus funkce (u mě 3, tj. Read Holding Registers)

9. a 10. bajt: adresa prvního registru, který chci číst (v mém případě 8, protože proud prvního kanálu je na registru 0008h)

11. a 12. bajt: kolik po sobě jdoucích registrů chcete číst (v mém případě 8 registrů, páč proudy všech osmi kanálů jsou za sebou na registrech 0008h až 000Fh)

------------ vynechám CRC (v Modbus UDP se nedává)-----------

Pokud kouknete do manuálu ke svýmu zařízení, určitě tam taky najdete zmínku o tom, že je možné číst vícero registrů pomocí jednoho modbus requestu. A samotný dotaz bude u vás vypadat dost podobně.

 

No a co dostanu zpátky? V UDP monitoru mám:

00,01,00,00,00,13,01,03,10,00,00,00,00,00,4E,00,00,00,00,00,00,00,00,00,00

1. až 6. bajt je zase MBAP hlavička

7. je zase modbus adresa

8. je zase funkce (stejná jako v requestu)

9. bajt: délka zbytku dat (10h, tj 16)

10. a 11. bajt: proud v prvním kanálu

12. a 13. bajt: proud druhého kanálu atd atd (jak vidíte, moc mi toho teď v noci neběží, snad jenom lednice...).

Parsuju přes virtuální UDP vstupy (nahraďte O za nuly). První kanál:

\xOO\xO1\s4\xO1\xO3\s1\2\1

druhý:

\xOO\xO1\s4\xO1\xO3\s3\2\1

třetí:

\xOO\xO1\s4\xO1\xO3\s5\2\1

a tak dále.....

Takže pro shrnutí: posílám jeden modbus dotaz za 2 sekundy. Dostanu zpátky jednu modbus zprávu, ve které jsou hodnoty proudu pro všech 8 kanálů. Ty si parsuju pomocí osmi virtuálních UDP vstupů.

 

Čus bus


   
mikrotom, msk, Jakub and 1 people reacted
ReplyQuote
(@kubrt_cz)
Estimable Member
Joined: 2 years ago
Posts: 166
 

Mám k dispozici Modbus Ethernet bránu (více kusů) Moxa mb3170 a nemám čas se jí zabývat, ale možná by to mohla být cesta, jak přes UDP dostávat odpovědi do Loxone častěji než 1x za 5s. Pokud to někdo chce "obklíčit", tak zašlu na testování a v případě úspěšného detailního popisu řešení ponechám zdarma. Ostatním nabídnu za cenu lepší, než originál Loxone Modbus.

Dokumentace zde, mělo by to být easy, jen prostě nemám čas 🙁

Zájemci do PM pls.


   
ReplyQuote
(@budulinek)
Reputable Member
Joined: 7 years ago
Posts: 355
 

Zdar,

udělal jsem větší upgrade své Modbus brány postavené na Arduinu:

https://github.com/budulinek/arduino-modbus-rtu-tcp-gateway

Konkrétně ve web UI na stránce Modbus Status najdete nově:

  • Modbus statistics pro lepší diagnostiku chyb. Pokud na bránu pošlete Modbus TCP/UDP request, vždycky se dozvíte, "jak to dopadlo".
  • Request Queue. Můžete vidět, jak hodně je zaplněná fronta. Pokud začnete bránu bombardovat requesty na neexistující zařízení (neexistující slave address), tak se fronta začne plnit. Fronta je ale optimalizovaná (requesty na existující zařízení mají prioritu), takže váš "DoS attack" musí být opravdu brutální, aby frontu zcela zaplnil 🙂
  • Modbus masters. IP adresy TCP/UDP masterů...
  • Modbus slaves. Poslední status Modbus RTU slejvů. Tentokrát už tam nemáte jenom suché "OK", ale specifičtější info o posledním statusu.
  • Modbus Scan. Proskenuje Modbus RTU. Přidal jsem "autoscan" - to znamená, že po (re)startu Arduina se automaticky provede skenování všech platných adres (1-247). Scan je teď rychlejší - u skenu je fixní response timeout 200ms (podle mě to stačí). Na skenování používám funkci 0x03 - podle mě je to dostatečně spolehlivé, snad všechny Modbus zařízení tuto funkci znají.

Upozorňuji, že se jedná o "major revision", pokud tedy už používáte moji bránu, zresetuje se vám do továrního nastavení. Takže musíte znovu nastavit IP adresu a pravděpodobně i RS485 (paritu a stop bity).

Pokud byste měli připomínky, návrhy na zlepšení, můžete buď sem do fóra nebo otevřít issue na githubu.

Enjoy 🙂


   
mikrotom, Aleq, L and 1 people reacted
ReplyQuote
Page 16 / 29
Share: