Dieses Tutorial gilt ab dem Image Jessie. Für Wheezy gilt es leider nicht.
Du kannst Deinen RevPi Core auch als Modbus-RTU-Master verwenden. So kannst Du z. B. Slaves wie Temperaturfühler, Taster, Bewegungsmelder u. v. m. über Modbus-RTU verbinden und die Daten dieser Slaves in Deinem RevPi Core weiterverarbeiten.
Du benötigst dazu:
- RevPi Core
- Slave
- Passende Kabel (je nach Projekt) mit D-Sub 9-Steckern
- Adapter (z. B. Shopartikel 200018 oder 200019)
- Internetverbindung
Voraussetzungen:
- Du hast einen Webbrowser auf Deinem PC installiert (z. B. Google Chrome oder Mozilla Firefox).
- RevPi Core befindet sich in Deinem Netzwerk.
Los geht’s!
- Verbinde die eine USB-Buchse mit dem Adapter.
- Verbinde den Adapter über die D-Sub-9-Buchse mit den Slaves.
- Stelle die Adresse der Slaves ein und notiere Dir diese. Hinweise dazu findest Du ggf. in der Bedienungsanleitung des Herstellers.
- Ermittle den Gerätepfad Deines RevPi Cores und notiere Dir diesen. Hier erfährst Du, wie das geht.
- Öffne Deinen Webbrowser.
- Gib die IP-Adresse Deines RevPi Cores in die Adresszeile Deines Browsers ein.
Das Anmelde-Fenster öffnet sich.

- Melde Dich mit dem Benutzernamen “admin” an.
- Gib Dein Passwort ein. Du findest es auf dem Aufkleber an der Seite Deines RevPi Cores.
- Klicke auf “Login”.
Du siehst jetzt den aktuellen Gerätestatus Deines RevPi Cores.
- Klicke auf das Register “Services”.
- Klicke auf “Enabled” in der Zeile Enable/Disable Modbus Master.
- 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”.

PiCtory öffnet sich.
- Öffne im Device Catalog den Ordner “Virtual Devices”.
- Wähle den Modbus-RTU-Master aus.

- Halte die linke Maustaste gedrückt und ziehe den Modbus-RTU-Master auf Dein RevPi Core.

- Der Modbus-RTU-Master erscheint jetzt ganz außen auf dem Configuration Board.
- Klicke auf den Modbus-RTU-Master.
- 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.
- Lege im “Value Editor” die Einstellungen für Deine RTU-Verbindung fest. Folgende Werte musst Du angeben:

Parameter | Erklärung |
Input | Hier kannst Du Deine Eingänge konfigurieren. Für jeden Master können insgesamt 32 Werte verwendet werden. Ein Wert ist 16 Bit breit. |
Output | Hier kannst Du Deine Ausgänge konfigurieren. Für jeden Master können insgesamt 32 Werte verwendet werden. Ein Wert ist 16 Bit breit. |
device_path | Der Dateipfad zur Linux-Geräte-Datei, default: /dev/ttyUSB0 Diesen Pfad hast Du ja bereits in den Vorbereitungen notiert. Falls nicht, erfährst Du hier wie Du ihn findest. Wichtig!: Wenn Du mehrere Geräte des gleichen Typs verwendest, können sich die Pfade zu den Linux-Geräte-Dateien bei einem Neustart ändern. Durch Setzen von udev-Regeln, die z. B. Zuweisungen von Linux-Geräte-Dateipfaden zu Geräte-Seriennummern haben, kann dies verhindert werden. |
baud rate | Die Baudrate bestimmt die Geschwindigkeit der seriellen Verbindung, default: 19200 |
parity | Konfiguration des Paritätsbits None: kein Paritätsbit Even: gerade Parität (default) Odd: ungerade Parität |
data_bits | Anzahl der Datenbits default: 8 |
Stop_bits | Anzahl der Stopbits default: 1 |
- Klicke mit der rechten Maustaste auf den Modbus-RTU-Master auf dem Configuration Board.
- Ein Kontextmenü öffnet sich.
- Wähle den Eintrag “Extended Data”.

- Eine Eingabemaske öffnet sich.

- Du kannst hier die Modbus-Befehle einstellen.
Prüfe, wie die Adressierung bei Deinem Slave angegeben ist. Wenn der Slave, den Du verwenden möchtest, die 0 als erste Registeradresse verwendet, musst Du bei der Konfiguration zum angegebenen Wert eine 1 addieren.
Beispiel: In der Dokumentation zum Slave steht eine Registeradresse 30053. Die Adressen beginnen laut Doku bei 0. Du verwendest für dieses Register also die Adresse 30054 beim Konfigurieren eines Modbus-Befehls.
Parameter | Erklärung |
Slave Addr. | Adresse des Slaves Diese Adresse stellst Du direkt an Deinem verwendeten Slave ein. Informationen dazu, wie das geht, findest Du sicher in der Bedienungsanleitung des Herstellers. Wichtig!: Wenn Du mehrere Slaves verwendest, musst Du darauf achten, dass jeder Slave eine eigene Adresse hat. Wenn 2 oder mehr Slaves die gleiche Adresse haben, kommt es zu Fehlern in der Kommunikation. Die Adresse “0” darf nicht als Slave-Adresse verwendet werden. Diese ist bei Modbus für den Broadcast reserviert. |
Function Code | Bei Modbus gibt es Function Codes, die den Zugriff auf Daten in einer bestimmten Weise möglich machen. Wir verwenden folgende Function Codes: READ_COILS Einzelne Bits lesen
READ_DISCRETE_INPUTS Einzelnes Eingangs-Bit lesen
READ_HOLDING_REGISTERS Ein ganzes Ein-/Ausgangsregister (16 Bit) lesen
READ_INPUT_REGISTERS Ein ganzes Eingangsregister (16 Bit) lesen
WRITE_SINGLE_COIL Einzelnes Bit schreiben
WRITE_SINGLE_REGISTER Ein ganzes Register schreiben
WRITE_MULTIPLE_COILS Mehrere aufeinanderfolgende Bits schreiben
WRITE_MULTIPLE_REGISTERS Mehrere aufeinanderfolgende Register schreiben |
Register Address | Die Modbus-Registeradresse oder Bit-Adresse der Daten, auf die Du zugreifen möchtest. In der Bedienungsanleitung des Slaves findest Du die Information, wie die Register des Slaves belegt sind. Die Registeradressen sind immer in Zusammenhang mit dem jeweiligen Function Code gültig. Das bedeutet, dass z. B. ein read holding register nr. 17 auf einen anderen Wert zugreift als ein read input register nr. 17. |
Quantity of Registers | Anzahl der Register (oder Bits), die gelesen/geschrieben werden |
Action Interval | Das Intervall, in dem der Befehl gesendet wird (in Millisekunden) Beachte, dass sehr kurze Intervalle bei zu hoher Systemlast nicht eingehalten werden können. Die Befehle werden dann, so schnell es die Gegebenheiten zulassen, gesendet. |
Device Value | Der Variablenname im RevPi Prozessabbild, in dem das erste Wort oder Bit des Modbus-Befehls gelesen bzw. geschrieben wird. Stelle sicher, dass sich die einzelnen Befehle nicht überschneiden. |