Forum

Forum

Notifications
Clear all

LOXONE - MODBUS

425 Posts
46 Users
39 Likes
54.8 K Views
(@budulinek)
Reputable Member
Joined: 7 years ago
Posts: 355
 

@dusanmsk 

Před pár lety jsem doslova rozšlapal všechny eth shieldy s ENC28J60. Jediné, co se mezitím změnilo je to, že se objevila nová knihovna od člověka, kterého respektuju ( https://github.com/JAndrassy/EthernetENC ). Takže SW bude snad konečně OK (zatím jsme netestoval). Ale hardwarově je to pořád slabý čip. IP stack není v čipu (jako je tomu u W5X00), ale řeší se softwarově, takže knihovna zabírá hodně místa.


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

Tak ještě jeden větší upgrade Modbus brány

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

Bye bye <meta http-equiv=refresh>.... Na stránce Modbus Status se teď data tahají z Arduina na pozadí, javascriptem (fetch API). Původně jsem chtěl implementovat nějaké minimální websockety aby mohlo Arduino samo posílat data do prohlížeče, ale už jenom úvodní handshake websocketů by zabral strašného místa.

Plus nějaké bugfixy. @smotek7 dej vědět, jestli už to funguje s MAX485.

P.S. ENC28J60 jsem dal definitivně k ledu. Letmo jsem si zkusil zkompilovat nějaký vzorový sketch a výsledný program byl o 5000 kB větší než při použití standardní Ethernet.h knihovny.


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

Zdravím, 

 

tak já nevím. Mám modbus gateway od Budulinka a teď i RS485 to ETH od Waveshare, k tomu dva elektroměry. Jeden od Eniky ten vrací hodnoty v INT ve dvou bajtech a druhej od Eastronu a ten posílá data ve floating point ve čtyřech bajtech. Nechci jít v Loxonu přes Modbus server kvůli omezení 5ti vteřin. Rád bych využil přenos UDP.

Jenže u elektroměru od Eniky ten INT (teď honem nevím jestli 16/32 bit) přeteče registr kolem těch 3,5kW a pak začne vracet nesmysly. A ten od Eastronu s floating pointem zas neumím zpracovat v Loxonu na UDP vstupu. 

Mám to k vytěžování přebytků FVE do vody na každý fázi přes SSR. Chci se pohybovat na 1sec periodě. 

Existuje nějaký způsob kudy do toho? Mít prostě každou vteřinu aktuální spotřebu na patě domu? 

Předem všem děkuji, a hlavně za toto forum 🙂

 

 


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

A ten od Eastronu s floating pointem zas neumím zpracovat v Loxonu na UDP vstupu. 

Návody na parsování jsou tady:

https://www.vodnici.net/wiki/modbus-rtu-modbus-tcp-udp-gateway-postavena-na-arduinu/

a něco je roztroušené i v tomto vláknu.


   
ReplyQuote
elpaso
(@elpaso)
Prominent Member
Joined: 7 years ago
Posts: 826
 

nevim jestli to sem uplne patri, ale i tak.

velmi se mi nakonec osvedcil modbus tcp prevodnik Elfin EW11 a to jako Wifi (neuveritelne vykony wifi modul, ma to signal vsude i tam kde mobil pokulhava) tak ETH verze.

mam doma 4, nektere dokonce zapojene paralel ke shodnemu spotrebici a vse funguje skvele


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

Na github jsem do dev větve nahrál další upgrade Modbus brány.

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

Nově tam máte možnost posílat Modbus požadavky přímo z brány, vidíte i odpověď od zařízení. Hodí se to na jednorázové nastavování slave zařízení, případně na testování. Jenom upozorňuju, že požadavek i odpověď jsou ve formátu Modbus RTU. Pokud ale s bránou komunikujete přes ethernet, používáte Modbus TCP protokol (tj. vepředu je navíc 6 bytů MBAP hlavičky, vzadu naopak chybí 2 byty CRC).

modbus2

Mělo by to být OK, pokud byste ale narazili na nějaký problém, dejte vědět. Nechám to u sebe pár dní běžet a pokud bude vše v pořádku, přehodím na githubu do master větve.

P.S. Major revision, připravte se na to, že po flashi na Arduino se brána zresetuje do továrního nastavení.


   
Aleq reacted
ReplyQuote
(@fedrajiri)
Active Member
Joined: 2 years ago
Posts: 6
 

Ahoj,

prosím o radu. Nedaří se mi ovládat přes LOXONE Modbus Extension china relé. Přes redukci USB/485 jsem si změnil adresu na 19. Ovládání, čtení vstupu i stavu relé funguje. Ale přes Modbus ani ťuk. Příkaz pro zapnutí prvního relé je "13 05 00 00 FF 00 8F 48"

Nastavení Analogový aktor:

Modbus Adresa zařízení 19

příkaz 05

adresa ( 0= relé č.1 )

hodnota pro zap. FF 00  = 65280 ( zkoušel jsem i 255 )

součtová kód je CRC 8F 48  ale tady nevím, jak to LOXONE Modbus Extension posílá.

(V Loxone RS485 extencion je volba s výpočtem CRC nebo bez.)

Zkoušel jsem všemožně přenastavovat analogový aktor ( i digitální ) a pořád nic. 

Něco dělám špatně, nebo to asi nebude fungovat.

Děkuji za každou radu.

Config 1
image

 

 

 

 

 


   
ReplyQuote
msk
 msk
(@dusanmsk)
Member
Joined: 7 years ago
Posts: 1870
 

A to je presne dovod, preco nenavidim modbus.

Ja to mam takto:

zavlaha

   
ReplyQuote
(@_petr_)
Honorable Member
Joined: 6 years ago
Posts: 483
 

@fedrajiri Ahoj, přepni si datový typ na 16 bit unsigned integer a kdyby to nefungovalo, tak pošli místo 65280 255 nebo přepni pořadí bytů.


   
ReplyQuote
kobra23
(@kobra23)
Member
Joined: 7 years ago
Posts: 2193
 
Posted by: @zigy

Zdravím, 

 

tak já nevím. Mám modbus gateway od Budulinka a teď i RS485 to ETH od Waveshare, k tomu dva elektroměry. Jeden od Eniky ten vrací hodnoty v INT ve dvou bajtech a druhej od Eastronu a ten posílá data ve floating point ve čtyřech bajtech. Nechci jít v Loxonu přes Modbus server kvůli omezení 5ti vteřin. Rád bych využil přenos UDP.

Jenže u elektroměru od Eniky ten INT (teď honem nevím jestli 16/32 bit) přeteče registr kolem těch 3,5kW a pak začne vracet nesmysly. A ten od Eastronu s floating pointem zas neumím zpracovat v Loxonu na UDP vstupu. 

Mám to k vytěžování přebytků FVE do vody na každý fázi přes SSR. Chci se pohybovat na 1sec periodě. 

Existuje nějaký způsob kudy do toho? Mít prostě každou vteřinu aktuální spotřebu na patě domu? 

Předem všem děkuji, a hlavně za toto forum 🙂

 

 

1s je dost málo. Co tě nutí to mít takto? Z pohledu toho, že má den 24 hodin, tak reálně budeš vytěžovat max. 6 hodin a to ne ještě každý den a né tak dlouho, je   to na pováženou.


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

1s je dost málo. Co tě nutí to mít takto? Z pohledu toho, že má den 24 hodin, tak reálně budeš vytěžovat max. 6 hodin a to ne ještě každý den a né tak dlouho, je   to na pováženou.

FVE a vytěžování přebytků do vody. TUV 200l 1f, TUV 200l 3f, spínání 0-10V SSR.

Loxone na SSR posílá signál 0-100, jelikož průběh otevírání SSR není lineární tak využívám modbus elektroměr který po vteřině posílá odběr v každé fázi. Pokud to letí ven přičte/odečte "jedna" k signálu SSR, pokud to letí o víc jak 500W přičte k signálu "deset", požadavek je aby se přetok pohyboval v rozmezí 50-150W na fázi. 

Když mám data každou vteřinu, tak je to rychlá regulace (do pěti vteřin reaguje na vypnutí/zapnutí ostatních spotřebičů). TUV mám zapojeny v měřené části FVE.

Už to ale vypadá že skončím na klasickém modbus serveru v Loxu s 5sec intervalem, protože na UDP vstupu nejsem schopný parsovat floating point na UDP vstupu.

\x02\x04\.\4\3\2\1

Zkouším to takhle a to vrací nesmysly. 

Budulinek mě směřoval na:

http://sarnau.info/loxone-udp-http-command-parser-syntax/

Ale tam jsem nepochodil 🙁


   
ReplyQuote
(@smotek7)
Member
Joined: 7 years ago
Posts: 1886
 
Posted by: @zigy

protože na UDP vstupu nejsem schopný parsovat floating point na UDP vstupu

Ja si myslim, ze by to mohlo ist. Aj ked v loxone tvrdia ze to nejde.
Treba si nastudovat co ten floating point je do detajlu.
Treba tie cisla rozlozit na bity a potom znovu stoho poskladat cislo.
Je to na 3-5 nocnych...

This post was modified 1 year ago by smotek7

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

@zigy Přesně tak. Přinejhorším to rozbijeme na bity a znovu poskládáme.

Hele postni sem

  1. relevantní výcuc z návodu k tomu elektroměru
  2. příklad UDP packetu + finální floating point číslo, které si myslíš, že by měl reprezentovat, a zkusíme se k tomu reverzně dostat.

P.S. Letmo jsem koukal na wiki (předpokládám že to bude float32) a úplně triviální to není, takže těch 3-5 nočních odhadovaných smotkem je reálných... Ale jít to mohlo. Udělat pro každý byte samostatný UDP virtuální vstup, na každý z nich pověsit blok "binární kódování" a pak z toho poskládat výsledný float?


   
ReplyQuote
msk
 msk
(@dusanmsk)
Member
Joined: 7 years ago
Posts: 1870
 

A nez to robit takto priserne, neslo by pouzit arduino gateway a tu konverziu si tam doprogramovat? Kludne na cele cislo a v loxone ho potom vydelit napr 1000?


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

@dusanmsk bolo , ale to by bolo moc jednoduche.


   
msk reacted
ReplyQuote
Page 18 / 29
Share: