Tutorial Modbus-RTU-Slave

Im folgenden Beispiel stellen wir einem Modbus-TCP-Master die CPU-Temperatur des RevPi Flats zur Verfügung. Das RevPi Flat übernimmt hierbei die Rolle eines Slaves. Du hast gerade ein ähnliches Projekt? Prima, dann mach unser Beispiel doch einfach gleich mit! Einige Daten musst Du natürlich anpassen.

Info!: Wir verwenden in diesem Beispiel die Software “qModMaster” auf einem Windows-PC, um einen Modbus-Master zu simulieren. Du kannst Dir diese Software unter https://sourceforge.net/projects/qmodmaster herunterladen, wenn Du dieses Beispiel einfach mitmachen möchtest.

Los geht’s!

  • Verbinde Dein RevPi Flat über die RJ45 Buchse mit dem Master.
  • Schließe Dein RevPi Flat an die Spannungsversorgung an.

Modbus-RTU-Slave-Funktion aktivieren

  • Öffne Deinen Webbrowser.
  • Gib die IP-Adresse Deines RevPi Flats in die Adresszeile Deines Browsers ein.

Das Anmelde-Fenster öffnet sich.

pictory-anmelden
  • Melde Dich mit dem Benutzernamen “admin” an.
  • Gib Dein Passwort ein. Du findest es auf dem Aufkleber an der Seite Deines RevPi Flats.
  • Klicke auf “Login”.

Du siehst jetzt den aktuellen Gerätestatus Deines RevPi Flats.

  • Klicke auf das Register “Services”.
  • Klicke auf “Enabled” in der Zeile Enable/Disable Modbus Slave.
  • Klicke auf den Button “Save All”.

Tipp!: Du kannst die Master-Funktion auch in der Kommandozeile aktivieren. Gib dazu folgendes Kommando ein: “sudo revpi-config enable pimodbus-master”

  • Klicke auf das Register “Apps”.
  • Klicke auf den Start-Button hinter dem Eintrag “PiCtory”.
Apps Reiter Screenshot

PiCtory öffnet sich.

Modbus RTU Slave konfigurieren

  • Öffne im Device Catalog den Ordner “Virtual Devices”.
  • Wähle den Modbus RTU-Slave aus.
  • Halte die linke Maustaste gedrückt und ziehe den Modbus RTU-Slave auf Dein RevPi Flat.

Dein Modbus-RTU-Slave erscheint jetzt ganz außen auf dem Configuration Board.

Lege im Bereich „Device Data“ die Grundeinstellungen für Deine Adapter fest. Diese Eingabe ist optional. Wenn Du viele Geräte verwendest und die Daten später in einem anderen Programm weiterverarbeiten möchtest, kann diese Eingabe sehr hilfreich sein. Im”Value Editor”legen wir die Einstellungen für die RTU-Verbindung fest. In unserem Beispiel sind das Folgende:

  • device_path: /dev/ttyUSB0
  • baud_rate: 19200
  • parity: none
  • data_bits: 8
  • stop_bits: 1
  • modbus_address: 1

PiCtory Konfiguration Speichern

Klicke auf „File>Save“. Damit speicherst Du Deine Datei.

Klicke auf „Tools>Reset Driver“. Damit aktivierst Du die Änderungen für den Adapter.

CPU-Temperatur abfragen

Die CPU-Temperatur des RevPi Flats kannst Du mit dem folgenden Befehl in der Kommandozeile abfragen:

/usr/bin/vcgencmd measure_temp

Du erhältst die aktuelle Ausgabe der Temperatur:

/usr/bin/vcgencmd measure_temp

temp=48.7'C

Damit wir die Werte  auf dem Modbus verarbeiten können, müssen wir diese Ausgabe umwandeln.  Die Temperatur muss als x10 °C ausgegeben werden:

/usr/bin/vcgencmd measure_temp | awk ' { print substr($0,6,2) substr($0,9,1) } '

492

Jetzt schreiben wir die Daten mit piTest in ein Modbus Register:

piTest –w Output_1, $(/usr/bin/vcgencmd measure_temp | awk ' { print substr($0,6,2) substr($0,9,1) } ')

Damit die Temperatur nicht nur einmal sondern kontinuierlich in das Register geschrieben wird, muss das Ganze in einer Schleife laufen:

while true; do piTest -w Output_1,$(/usr/bin/vcgencmd measure_temp | awk ' { print substr($0,6,2) substr($0,9,1) } '); sleep 1; done &

Write value 492 dez (=01ec hex) to offset 11.

Write value 498 dez (=01f2 hex) to offset 11.

Write value 492 dez (=01ec hex) to offset 11.

[…]

Modbus-RTU-Master konfigurieren

In diesem Beispiel fragen wir die Werte mit dem Tool “qModbusMaster” ab. Du kannst natürlich auch eine geeignete andere Software verwenden.

Für unser Beispiel nehmen wir Folgende Einstellungen vor:

  • Wir wollen über eine Modbus-RTU-Verbindung kommunizieren:
    Modbus Mode: RTU
  • Wir wollen mit dem Slave mit der Adresse 1 kommunizieren:
    Slave Addr: 1
  • Die Daten sollen in einem Zyklus von 1000 ms abgerufen werden:
    Scan Rate (ms): 1000
  • Die Daten sollen als ganzes Modbus-Register gelesen werden:
    Function Code: Read Input Registers (0x04)
  • Die Daten sollen Dezimal ausgegeben werden:
    Format: Decimal
  • Die Daten sollen ab der Modbus-Registeradresse 1 gelesen werden:
    Start Address: 1
  • Es soll ein ganzes Register gelesen werden:
    Number of Registers: 1

Klicke auf “Menü”.

Klicke auf “Options” und wähle “ModbusRTU”.

Lege hier die Einstellungen für die serielle Schnittstelle fest. Für unser Beispiel sieht das so aus:

Info!: Falls du qModbus Master verwendest und einen anderen Port benutzt, musst du diesen eventuell so eingeben: “.COM10”
  • Klicke auf “Commands”Klicke auf “Connect”. Damit stellst Du eine Verbindung zum Modbus her.

Klicke auf “Commands”.

Klicke auf Read/Write. Damit rufst Du die Werte über den Modbus ab.

Du siehst nun den Wert 519. Damit wissen wir, dass die CPU-Temperatur unseres RevPi Flats gerade 51,9°C ist.

Modbus Funktionen

Das Modbus Slave Modul stellt dir die folgenden Modbus Funktionen zur Verfügung:

  • Read Holding Registers (0x03)
    • Eingänge lesen
  • Read Input Registers (0x04)
    • Ausgänge lesen
  • Write Single Register (0x06)
    • Ein Eingang Register beschreiben
  • Write Multiple Registers (0x10)
    • Mehrere Eingang Register beschreiben