Temperaturmessungen mit RevPi Core 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 Cores zur Verfügung. Das RevPi Core ü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 Core über die RJ45 Buchse mit dem Master.

Schließe Dein RevPi Core an die Spannungsversorgung an.

Modbus-TCP-Slave-Funktion aktivieren

  • Öffne Deinen Webbrowser.
  • Gib die IP-Adresse Deines RevPi Cores 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 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 Slave.
  • Klicke auf den Button “Save All”.
Services Reiter Screenshot
  • Klicke auf das Register “Apps”.
  • Klicke auf den Start-Button hinter dem Eintrag “PiCtory”.
Apps Reiter Screenshot

PiCtory öffnet sich.

Modbus-TCP-Slave konfigurieren

Öffne im Device Catalog den Ordner “Virtual Devices”.

Wähle den Modbus TCP-Slave aus.

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

  • 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 Cores 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 Cores 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. Damit wissen wir, dass die CPU-Temperatur unseres RevPi Cores gerade 50,8°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