MBUSD – sw modbus gateway jako náhrada za Modbus extension
How Can We Help?
Úvod
Pokud potřebujete v Loxone komunikovat se zařízeníma pomocí Modbus RTU protokolu, máte několik možností, jak daný problém vyřešit. Buď koupit drahý Modbus extension, nebo si koupit převodník Modbus RTU <-> TCP, nebo využít svého domácího servříku a zprovoznit sw gateway. S ohledem na cenu a kybernetickou bezpečnost je volba jasná. Sw gateway, která má otevřený zdrojový kod. K provozování budeme potřebovat nějaký stroj s linuxem a převodník USB-RS485. V našem návodu použijeme stroj s nainstalovaným Debianem. Není třeba instalovat grafické prostředí – zbytečně zabírá operační paměť a reálně ho vůbec nepotřebujeme. Převodník propojíme se zařízeníma, ze kterých chcete číst, připadně zapisovat modbus registry a zasuneme do USB portu linuxového stroje. Pokud doma ještě nemáme linuxový server, může posloužit i obyčejné raspbery, banán, orange, … Převodník USB-RS485 se dá koupit na Aliexpressu od jednoho do několika $.
Update 31.03.2018: Nově jsem vytvořil plugin do LoxBerry, takže kdo má LoxBerry, tak pouze nainstaluje plugin a má hotovo. Konfigurace je jednoduchá přes Webové rozhraní pluginu. http://www.loxwiki.eu/display/LOXBERRY/Modbus+Gateway
MBUSD
Nyní nainstalujeme potřebné náležitosti, stáhneme MBUSD a provedeme kompilaci:
sudo -s apt-get install git linux-headers-`uname -r` build-essential uucp eclipse-cdt-autotools cd /usr/local/src/ git clone https://github.com/3cky/mbusd.git mbusd.git cd mbusd.git mkdir -p build && cd build cmake -DCMAKE_INSTALL_PREFIX=/usr .. make make install
Po úspěšné kompilaci můžeme vyzkoušet spuštěním příkazu mbusd s patřičnými parametry. Použil jsem následující:
sudo mbusd -d -p /dev/ttyUSB0 -s 9600 -P 502 -v2
kde:
- /dev/ttyUSB0 je port na kterém máte převodník
- 9600 je přenosová rychlost RS485 a tedy i modbus zařízení (tu je třeba mít stejnou s tou, která je na zařízeních – většina zařízení ji umožňuje měnit)
- 502 je TCP Port
- V2 je úroveň ukecanosti logu
Parametry si upravíte podle svých potřeb.
Příkaz mbusd –help vyjede komplexnější popis, nicméně vám pravděpodobně bude stačit to, co jsem uvedl.
Při ladění je dobré využít parametr -d, který zabrání spuštění na pozadí, případně můžete zvýšit ukecanost až na -v9.
Autoři dodělali podporu systemd, takže lze všechno krásně provozovat jako 1 – n služeb.
Službu spustíte příkazem sudo systemctl start [email protected] kde ttyUSBx je port s převodníkem. Služba se spustí s konfigurací dle /etc/mbusd/mbusd-ttyUSBx.conf
Příklad konfigurace s převodníkem jako ttyUSB0:
sudo nano /etc/mbusd/mbusd-ttyUSB0.conf
Vložíme a uložíme:
########## Serial port settings ############# # Serial port device name device = /dev/ttyUSB0 # Serial port speed speed = 9600 # Serial port mode mode = 8n1 # RS-485 data direction control type (addc, rts, sysfs_0, sysfs_1) trx_control = addc # Sysfs file to use to control data direction # trx_sysfile = ############# TCP port settings ############# # TCP server port number port = 502 # Maximum number of simultaneous TCP connections maxconn = 32 # Connection timeout value in seconds timeout = 60 ######### Request/response settings ######### # Maximum number of request retries retries = 3 # Pause between requests in milliseconds pause = 100 # Response wait time in milliseconds wait = 500
Po uložení spustíme službu a nastavíme její automatické spouštění:
sudo systemctl start [email protected] sudo systemctl enable [email protected]
A analogicky stejně si můžeme vytvořit n dalších slžeb pro další převodníky třeba s jinými paremetry v konfiguračním souboru.
Je třeba pamatovat, že co služba, to samostatný převodník.
V loxone je třeba přidat modbus server. Stoupnete si na Komunikace Miniserveru a kliknete na ikonku Modbusserver.
Vyplníte název – např.: MBUSD
Adresa – <IP_stroje_s_mbusd>:<port_mbusd> (např.: 192.168.1.10:502)
Čekající doba startu jsem dal 5
Timeout jsem dal 500
Dále již zbývá pouze vložit modbus zařízení a jeho senzory (čtení), případně aktory (zápisy), nebo vybrat z předdefinovaných zařízení.
Já čtu elektroměry Eastron SDM630 (třífázový) a SDM120 (jednofázový). Loxone má SDM630 předdefinovaný a SDM120 funguje na tu samou konfiguraci, akorát si vyházíte senzory pro 2. a 3. fázi. Oproti použití s Modbus extension jsem ve všech senzorech elektroměru musel zaškrtnout parametr Pořadí registru. SDM630 se dá na Aliexpressu koupit za necelých 80$, SDM120 za 22$. Pozor, vyrábí se i verze bez modbus!
Autor článku: Zmáťa
6 thoughts on “MBUSD – sw modbus gateway jako náhrada za Modbus extension”
Vzhledem ke změnám v nové verzi MBUSD jsem upravil návod. Trochu se změnila kompilace a hlavně je možné jednoduše spouštět jako 1 – n služeb.
Na ktere piny USB-RS485 prevodniku modbusova zarizeni pripojujes?
Na Tx-/Tx+ nebo Rx-/RX+?
Sorry, trochu jsem nestíhal. Musel jsem taky chvilku řešit to, co mě živí 😉
Připojeno mám TX
ahoj, riesim otazku ako viaceri… nechcem kupovat modbus extension a zvazujem bude pouzit rs485-tcp prevodnik (aliexpress) ale viac sa mi pozdava toto sw riesenie. mam otazku:
Je mozne pri tomto sw rieseni na rovnaku modbus zbernicu pripojit viacero zariadeni (napr. 2x 3f elektromer a 1x 1f elmer)? Pripadne skombinovat viacero elektromerov (senzory) s napriklad s RS485 Relay Controller od KMTronicu (aktory)? Alebo je nutne pre kazde zariadenie pouzit samostatny usb-rs485 prevodnik a nasledne to “vystavit” na samostatny tcp port s tym, ze loxone bude kazde zariadenie “citat” na samostatnom tcp porte?
vdaka za info
Ahoj, stačí ti jeden převodník pro každou kombinaci parametrů:
– serial port speed
– serial port mode
– RS-485 data direction control type (addc, rts, sysfs_0, sysfs_1)
– sysfs file to use to control data direction
@zmata Nevěděl bys poradit, která z těch aktuálních SDM630 je ta pravá pro MODBUS?
Alík jich má v boudě teď 8 modelů od 64 po 94 Eur a jsem z toho trošku lichej v čem se lišej. Jsou tam teď i SDM630 Modbus V2 verze, ty se lišej od sebe asi jen jestli jsou MID nebo NON-MID. A zbytek to už vůbe cnejsem moudrej z toho. Mám zatím jen ty jednofázový SDM120 Modbus.
https://www.aliexpress.com/store/529519/search?SearchText=modbus+sdm630