SmartPi Modbus RTU und Modbus TCP Einstellungen

Modbus

Der SmartPi verfügt ab Softwareversion 1.0.0 (ab Juni 2019) über die Möglichkeit, per Modbus RTU und Modbus TCP ausgelesen zu werden (Slave).
Bei Modbus TCP erfolgt die Kommunikation über die Netwerkschnittstelle.
Bei Modbus RTU findet die Kommunikation über die RS485-Schnittstelle des SmartPi statt.
Aktuell müssen die Modbus-Einstellungen noch manuell in der Konfigurationsdatei /etc/smartpi durchgeführt werden.

Eigene Installation vs fertiges Image

Wir empfehlen Ihnen, bei der Verwendung von Modbus RTU unser fertiges Image zu verwenden, da für einen reibungslosen Betrieb einige Einstellungen an den seriellen Schnittstellen des Raspberry Pi durchgeführt werden müssen.

Bei einem eigenen Image gehen Sie bitte wie folgt vor:
Loggen Sie sich bitte über SSH auf den SmartPi ein.

sudo nano /boot/cmdline.txt

dort entfernen Sie
console=/dev/serial1
und
console=serial0,115200

 

speichern STRG+O und schließen STRG+C

sudo nano /boot/config.txt

am Ende die beiden Zeilen einfügen

dtoverlay=pi3-miniuart-bt
enable_uart=1
core_freq=250

speichern STRG+O und schließen STRG+C

sync
sudo reboot

Nun können Sie über /dev/serial0 den RS485 Bus nutzen.

Modbus RTU

Schließen Sie den SmartPi über die RS485-Klemmen A und B an den von Ihnen verwendeten Modbus-Master an. Bitte achten Sie auf die richtige Polung der Klemmen A und B. Sind A und B vertauscht, kann keine Kommunikation stattfinden.
Über den Jumper kann der Abschlusswiderstand aktiviert und deaktiviert werden. Ist der SmartPi am Anfang oder am Ende des RS485-Busses oder sind nur Master und Slave angeschlossen, muss der Jumper gesetzt sein. Ist der SmartPi in der Mitte des Busses, sollte der Jumper gezogen werden.

Konfiguration

Sie können die Modbus-Konfiguration über die Konfigurationsdatei /etc/smartpi einstellen.

[modbus]
modbus_rtu_enabled=0
modbus_tcp_enabled=0
modbus_rtu_address=1
modbus_rtu_device_id="/dev/serial0"
modbus_tcp_address=":502"

Sollte der Eintrag nicht in der Konfigurationsdatei vorhanden sein, können Sie den Eintrag einfach am Ende der Datei erstellen.
Um Modbus-RTU zu aktivieren, stellen Sie den Wert von modbus_rtu_enabled auf 1.
Mit Hilfe des Wertes modbus_rtu_address können Sie die SlaveID einstellen. Eine SlaveID darf in einem Bus nur einmal vorkommen. Sollten Sie zum Beispiel mehrere SmartPi ein einem Modbus betreiben, stellen Sie die SlaveIDs dementsprechend um.
Über den Wert modbus_rtu_device_id kann die entsprechende serielle Schnittstelle ausgewählt werden. Dieser Wert muss eigentlich nicht verändert werden.

RS485-Anschluss für Modbus RTU
Abbildung 1: RS485-Anschluss für Modbus RTU
RS485-Anschluss für Modbus RTU
Abbildung 2: RS485-Anschluss für Modbus RTU

Modbus TCP

Bei Modbus TCP findet die Kommunikation über die Netzwerkschnittstelle (LAN oder WLAN) im Netzwerk statt.
Auch bei Modbus TCP finden Sie die Einstellungen in der Konfigurationsdatei /etc/smartpi.

[modbus]
modbus_rtu_enabled=0
modbus_tcp_enabled=0
modbus_rtu_address=1
modbus_rtu_device_id="/dev/serial0"
modbus_tcp_address=":502"

Sollte der Eintrag nicht in der Konfigurationsdatei vorhanden sein, können Sie den Eintrag einfach am Ende der Datei erstellen.
Um Modbus TCP zu aktivieren, stellen Sie den Wert modbus_tcp_enabled auf 1.
Der einzige weitere Parameter ist modbus_tcp_address. Mit diesen Wert kann die IP-Adresse und der Port eingestellt werden, auf dem der SmartPi lauscht.
Standard ist, dass auf allen IP-Adressen des SmartPis auf Port 502 gelauscht wird.

Modbus Register

Register Wert  
0 I1 MSB
1   LSB
2 I2 MSB
3   LSB
4 I3 MSB
5   LSB
6 I4 MSB
7   LSB
8 U1 MSB
9   LSB
10 U2 MSB
11   LSB
12 U3 MSB
13   LSB
14 P1 MSB
15   LSB
16 P2 MSB
17   LSB
18 P3 MSB
19   LSB
20 CosPhi 1 MSB
21   LSB
22 CosPhi 2 MSB
23   LSB
24 CosPhi 3 MSB
25   LSB
26 F1 MSB
27   LSB
28 F2 MSB
29   LSB
30 F3 MSB
31   LSB
32 Balanced MSB
33   LSB