Modbus RTU <–> Modbus TCP / UDP Gateway postavená na Arduinu

Modbus RTU <–> Modbus TCP / UDP Gateway postavená na Arduinu

How Can We Help?

Categories

Modbus RTU <–> Modbus TCP / UDP Gateway postavená na Arduinu

You are here:
< Zpět

K čemu to je?

Umožňuje připojit vaše Modbus zařízení (jako jsou senzory, elektroměry, HVAC zařízení) k Loxone (případně jiným systémmům jako Home Assistant, OpenHAB a další). Stačí Arduino s ethernet shieldem a levným modulem TTL na RS485! Nastavení vaší Arduino Modbus brány můžete snadno změnit přes webové rozhraní, vaše nastavení se automaticky uloží do EEPROM.

Brána je (více než) plnohodnotnou alternativou k Loxone Modbus Extension. Do Lox Configu ji vkládáte jako Síťové zařízení > Modbusserver. Jakmile ji máte jako Modbusserver v Lox Configu, tak přidávání samotných Modbus zařízení je úplně stejné jako u oficiální “Loxone Modbus Extension”.

Detailní popis, návod na sestavení brány (hardware a firmware), nastavení brány a integraci do Loxone najdete na Githubu:

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

Pomohl Vám náš blog? Chcete nás podpořit? I málo udělá radost 😉
Become a patron at Patreon!
Table of Contents

16 thoughts on “Modbus RTU <–> Modbus TCP / UDP Gateway postavená na Arduinu

  1. Hodně zajímavé řešení… Jestli to dobře chápu, tak se tvým řešením nemusí použít zde hojně doporučovaný převodník “USR-TCP232-410s ModBus RTU” a pomocí Nano posílat zprávy do Loxone přímo přes Modbus TCP (nebo UDP) protokol…

  2. Jojo, je to plně funkční náhrada za převodník “USR-TCP232-410s ModBus RTU”. Ten převodník nemám, ale když koukám na návod, tak rozdíly jsou minimální:
    – Nano funguje pouze v režimu kdy Modbus zařízení (slaves) připojuješ přes RTU a klienty (masters) připojuješ na straně TCP či UDP”. Převodník USR umí i opačný režim, který je pro naše potřeby ale zbytečný.
    – Nano nemá web server na konfiguraci a neumí websockets.
    – Nano nemá keepalive na TCP rozhraní ani heartbeet. Jak už jsem psal v návodu, neimplementoval jsem ani periodický polling Modbus RTU slavů samotnou bránou (periodické odesílání požadavků řeší Loxone).

    Jinak je to to v zásadě to samé. Základem je Modbus RTUModbus TCP protocol conversion. Nano taky zvládá až 8 TCP klientů. Hmm, koukám, že USR umí UDP broadcasty. Tuhle možnost jsem tam taky měl (je to trochu rychlejší, páč v broadcastu ethernet shield neověřije existenci cílové IP adresy v podsíti), nakonec jsem ale nechal singlecast a “vytunil” jsem jej tím, že jsem snížil timeouty a retries.

    Když na to koukám, tak možná jsem neměl psát “transparentní gateway”. V návodu od USR “Modbus RTU transparent transmission” znamená Modbus RTU Modbus RTU over TCP. Moje Nano nic takového jako “Modbus RTU over TCP” ani “Modbus RTU over UDP” nedělá. Dělá Modbus TCP a Modbus UDP (tj. dělá konverzi hlaviček). Tou transparentností v nadpise jsem měl na mysli to, že Nano nijak nesahá na samotná data, která se přes Modbus přenáší.

    1. Moc díky za komentář. Já právě ten “USR-TCP232-410s ModBus RTU” používám na Meteostanici dle návodu od jirin.sv, která je tady taky ve Wiki.
      Takže mi to připadá jako zajímavá věc v tom smyslu, že kdybych to použil, tak odpadne “jedna krabička” USR v komunikační cestě. Co se týče nákladů, tak je to 10 dolarů za Ethernet Shield navíc oproti 25 dolarům za USR…

  3. Moment, moment….
    Nebylo by jednodušší upravit skeč od jirin.sv tak, aby meteostanice posílala data rovnou přes UDP pakety a ne přes Modbus? Ostatně jirin to ve svém návodu taky píše, že by bylo určitě reálné udělat i jiné varianty komunikace.

  4. Jestli se dá DMX brána a Modbus brána udělat na jednom Arduinu? Asi jo, jenom si hlídej:

    1) DMX a Modbus RTU musí být na samostatných drátech. Takže potřebuješ 2 ks MAX485.

    2) Modbus je připojený přes HW serial. Standardní Arduino má k dispozici jenom jeden HW serial (piny 0 a 1). Vypadá to, že DMX nevyžaduje připojení přes HW serial (v tom návodu je MAX485 někde na pinu 3), takže potud je vše OK.

    3) Pokud se ti program vejde do flash paměti Arduina a jestli bude dost RAM na jeho běh. Modbus gateway využívá skoro všehnu RAM Arduina, ale není problém zmenšit frontu (REQUESTS_QUEUE a REQUESTS_QUEUE_BYTES) aby zbyla RAM i na jiné věci.

    4) Arduino neumí multithreading. Celý program běží v jednom procesu (donekonečna se opakující void loop()), takže pokud chceš obsluhovat víc věcí současně (Modbus a DMX) je vhodné, aby kód neobsahoval žádné funkce, které by ho blokovaly a zastavovaly. Pokud budeš mít ve funkci, která obsluhuje DMX, příkaz delay(1000), tak to znamená, že se celé Arduino na 1s zastaví a po tu dobu nebude obsluhovaná ani Modbus brána. Kód pro Modbus Gaeway je psaný jako nonblocking, kód na DMX si budeš muset ověřit.

    1. Díky moc budulinku za vyčerpávající odpověď, to jsou přesně ty informace, které jsem potřeboval.

  5. Ahoj

    potrebuju trosku poradit.. nikde jsem nenasel, jak udelat, kdyz mi elektromer vraci 32bit floating HEX – 43 6c 20 30
    Hodnota je 236… jak ale presvedcim Loxone, aby to nebralo jako 32bit číslo, tedy 1131159600… ale s desetinou čásrkou a předznaménkem
    diky za nakopnuti

    Swoby

    1. No, nevidím důvod, proč by neměla fungovat. Brána je naprogramovaná tak, aby fungovala podle standardů Modbus protokolu (Modbus RTU a Modbus TCP). Takže by měla umět komunikovat se všemi zařízeními, která se tohoto standardu drží.

  6. No, nevidím důvod, proč by neměla fungovat. Brána je naprogramovaná tak, aby fungovala podle standardů Modbus protokolu (Modbus RTU a Modbus TCP). Takže by měla umět komunikovat se všemi zařízeními, která se tohoto standardu drží.

  7. Ahoj. Potřeboval jsem si k Loxone připojit modbus zařízení a nechtělo se mi platit 7k za origoš interface. Tak mně napadlo, proč by to nemohlo jít přes nějakou gateway Modbus TCP na RTU za pomocí Arduina. Už jsem se pustil do bastlení a v tu chvíli mně osvítilo a na padlo mně použít gůgle, zda to už někdo neřešil. A ejhle…. budulínek. Zkusil jsem to rozjet na Arduino Ethernet (který mi doma zůstal za nehtem) + tohle (https://www.laskakit.cz/prevodnik-uart-na-rs-485–max485/) a šlape to na první dobrou. Musím přiznat, že jsi udělal kousek hezké práce. Palec nahoru.

Leave a Reply to bradek Cancel reply

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