Dieses Tutorial gilt ab dem Image Jessie. Für Wheezy gilt es leider nicht
Im folgenden Beispiel stellen wir einem Modbus-TCP-Master die CPU-Temperatur des RevPi zur Verfügung. Das RevPi Basismodul ü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 Basismodul über die RJ45 Buchse mit dem Master.
- Schließe Dein RevPi Basismodul an die Spannungsversorgung an.
Modbus-RTU-Slave-Funktion aktivieren
- Starte RevPi Status.
- Klicke auf das Register SERVICES.
- Aktiviere Modbus Slave.
- Klicke Button Save All.
Modbus RTU Slave konfigurieren
- Starte PiCtory.
- Ö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.
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.
- 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 Basismoduls 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. […]
Wenn du den Befehl abbrechen möchtest, dann musst du “fg” eingeben und dann CTRL+C .
Modbus-TCP-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 “Modbus RTU”
Lege hier die Einstellungen für die serielle Schnittstelle fest. Für unser Beispiel sieht das so aus:
- 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 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