Temperaturmessungen mit RevPi als Modbus-TCP-Slave

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. Der RevPi übernimmt hierbei die Rolle eines Slaves.

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-TCP-Slave-Funktion aktivieren

  • Starte RevPi Status.
  • Klicke auf das Register SERVICES.
  • Aktiviere Modbus Slave.
  • Klicke Button Save All.

Modbus-TCP-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-TCP-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 TCP-Verbindung fest. In unserem Beispiel sind das folgende:

TCP_port: 502

Der Default-Wert des TCP-Ports ist nach Modbus Spezifikation “502”. Du kannst diesen Wert verändern. Das macht z. B. dann Sinn, wenn Du im gleichen Netz 2 verschiedene Steuerungen umsetzen willst, die sich gegenseitig nicht behindern sollen.

max._modbus_TCP_connections: 10

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 Deines RevPi 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-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-TCP-Verbindung kommunizieren:
    Modbus Mode: TCP
  • Wir wollen mit dem Slave mit der Adresse 1 kommunizieren:
    Unit ID: 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 TCP”.
Stelle die IP-Adresse Deines RevPi im Feld “Slave IP” ein.
Stelle den TCP Port ein. Bei ModbusTCP-Verbindungen ist das in der Regel “502”.


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 508 (CPU-Temperatur des RevPi ist gerade 50,8 °C).

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