Modbus loves Smart­phones

12.5.2017 - Tobias Ballat

Modbus ist ein seri­elles Proto­koll, dass sich in der Indus­trie gut durch­ge­setzt hat, da es offen und schnell ist. Um Erfah­rungen mit Modbus zu sammeln, sollte ich im Rahmen einer Prak­ti­kums­ar­beit eine Kommu­ni­ka­tion zwischen Smart­phone und Bus ermög­li­chen.

Modbus loves Smartphones  teaser

Ziel

Verbinden einer LED mit einem Smpart­phone via Modbus.

Mate­rial

Vorgehen

Um die Lampe an und ausschalten zu können, benö­tigte ich ein Modbus-​fähiges Relay (Strom­zu­fuhr an/aus). Hierfür fiel meine Wahl auf den ADAM 4168.

Da Smart­phones mit Modbus-​Anschluss eher selten sind musste eine Schnitt­stelle zwischen Smart­phone und Modbus bzw. Relay (ADAM 4168) her. Diese Aufgabe über­nimmt in unserem Versuchs­aufbau ein Raspberry Pi 3 mit einem RS-485 Shield. Das Smart­phone kann nun (via Raspberry Pi und Shield) mit dem Modbus kommu­ni­zieren und so die Strom­zu­fuhr zur LED mithilfe des Relay steuern.

Nachdem ich alle noch fehlenden Kabel und Strom­an­schlüsse aufge­trieben hatten, konnte ich die erwähnten Kompo­nenten verbinden.

verkabelungsskizze

Obwohl ich alles richtig verka­belt hatte, blieb noch eine kleine Hürde zu über­winden:

Das Relay kommu­ni­ziert stan­dard­mässig nicht über das Modbus-​Protokoll, sondern über ein proprie­täres Proto­koll von Advan­tech. Dieses beruht auf dem Austausch von ASCII-​Zeichen. Mit dem Hand­buch des Relays und der Python Biblio­thek pySe­rial ging es dann erstaun­lich schnell die LED ein- und auszu­schalten.

Aller­dings wollen wir ja eine Kommu­ni­ka­tion über Modbus. Um das Relay in den Modbus Modus zu wech­seln wird eine Soft­ware mitge­lie­fert die auf alten Windows Rech­nern läuft, aber nicht, zumin­dest nicht mit geringem Aufwand, auf einem Rasb­perry Pi. Zum Glück ist es aber auch möglich das Relay mit einer ASCII Zeichen­folge zu konfi­gu­rieren. Mit dem rich­tigen Befehl konnte ich das Relay dann problemlos in den Modbus-​Modus versetzen.

Modbus ist ein wenig kompli­zierter als nur ASCII-​Zeichen zu senden. Zum Glück gibt es dafür eine Python Biblio­thek: pymodbus.

Leider ist diese nicht allzu gut doku­men­tiert. Auch das Manual des Relays für die Modbus­be­fehle ist viel kürzer und kryp­ti­scher gehalten als das für die ASCII-​Befehle. Trotzdem konnten ich irgend­wann die rich­tigen Befehle an das Relay senden. Aller­dings stimmten die Adressen im Manual nicht genau und so mussten ich ein wenig auspro­bieren, bis ich die rich­tige Adresse für unsere LED gefunden hatte.

Kommunikation

Der zweite Teil, die Kommu­ni­ka­tion zwischen Raspberry Pi und Smart­phone war dann nicht mehr allzu schwer. Da sowohl der Rasperry Pi und das Smart­phone am (W)LAN ange­schlossen sind, läuft die Kommu­ni­ka­tion über das LAN. Auf dem Raspberry Pi habe ich Flask instal­liert und konnten so einen einfa­chen Rest­server program­mieren. Dieser hört auf <tt><url>/on</tt> und <tt><url>/off</tt> und sendet die jewei­ligen Befehle über den Modbus an das Relay.

Auf dem Smart­phone muss nur noch die richr­tige IP des Raspberry Pi's einge­geben werden und schon kann via Knopf­druck das Licht gewech­selt werden.

Natür­lich muss die Bedie­nung des LEDs auch auf mehreren Smart­phones möglich sein. Dafür spei­chert der Raspberry Pi noch den aktu­ellen Zustand und die Smart­phones fragen diesen peri­odisch ab.

modbus prototype

Kontakt

Smoca AG
Tech­no­park­strasse 2
Gebäude A, 3. Stock
8406 Winter­thur

Letzter Blog­ein­trag

Does it Matter ? Ein Bericht zur Entwick­lung um den IoT-​Standard der ZukunftSaliha Chelouti - 7.7.2022

Das Smar­thome war bis mehr ...

  • Smoca Facebook
  • Smoca Twitter
  • Smoca LinkedIn
  • Smoca RSS Feed