MBUSD – sw modbus gateway jako náhrada za Modbus extension

MBUSD – sw modbus gateway jako náhrada za Modbus extension

You are here:
< Zpět

Ú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

Poslední úprava článku March 31, 2018

6 thoughts on “MBUSD – sw modbus gateway jako náhrada za Modbus extension

  1. 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.

  2. 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

  3. 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

  4. @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

Leave a Reply

Your email address will not be published. Required fields are marked *