Fahrschein für den Modbus – Teil 2

Im ersten Teil des Blogbeitrages über das Kommunikationsprotokoll Modbus sind wir auf die Endianness, die Reihenfolge der Datendarstellung, eingegangen. Nun möchten wir auf die richtige Adressierung der Register hinweisen.

Alles auf 0? 

Eine weitere Falle des Modbus ist die Adressierung der Register bzw. der Speicherstellen.

Im vorhergehenden Beitrag hatten wir u. a. folgende Tabelle als Beispiel:

 

Reihenfolge Modbus Big-Endian Big-Mix* Little-Mix* Little-Endian
1 0x12 0x12 0x34 0x56 0x78
2 0x34 0x34 0x12 0x78 0x56
3 0x56 0x56 0x78 0x12 0x34
4 0x78 0x78 0x56 0x34 0x12

*Phantasienamen

  

In dieser Tabelle taucht die Adressierung bereits auf: 1, 2, 3, 4. Der erste Wert steht in Zeile 1 oder eben Adresse 1. Dies ist jedoch in „Modbusianisch“ falsch. Da es ein binäres Protokoll ist, zählt man im Modbus logisch ab 0. Der erste Wert steht daher im Register mit Adresse 0.

Will man also den ersten Wert bzw. das erste Register abfragen, muss man die Adresse 0 nutzen. Auf binärer Ebene ist das einfach. Jetzt kommt aber der Mensch ins Spiel, dessen 1. Wert eben an der 1 liegt. Daher nutzen viele Modbus-Komponenten diese menschliche Adressierung und beginnen ab 1 zu zählen.

Verwirrenderweise wird aus dieser 1 dann auf Modbus allerdings „automatisch“ eine 0 im Adressfeld und die Gegenstelle antwortet dann entsprechend mit der 0.

Hier müssen daher beide Seiten die gleiche Zählweise nutzen.

Bei unseren Geräten orientieren wir uns am Modbus und nutzen die Zählung ab 0. Daher haben zum Beispiel die ersten 10 Register auch die Adressen 0 bis 9. Eine Verschiebung um +1 ermöglichen wir nicht. 

Falls die Gegenstelle ab 1 zählt, müssen Sie daher in dieser jeweils die Adresse um 1 erhöhen, im Gegensatz zu der Angabe in unseren Geräten.

 

Wie kann ich das prüfen?

Speziell aus diesen beiden Aspekten heraus haben wir einen sogenannten Test-Modus in unsere Geräte integriert:

Modbus-swap2

 

Hierbei wird ein statischer Antwort-Datensatz aktiviert, welcher zur Prüfung der Gegenstelle genutzt werden kann. Nur wenn die Zahlen exakt mit den Vorgaben aus unserem Handbuch übereinstimmen, dann stimmen Endianness und Zählweise überein.

Modbus-Adressierung

 

Sofern Ihre Gegenstelle Float32 als Datenformat unterstützt, empfehlen wir stets die Prüfung anhand der Register 24 und 25.

Wenn die Zahl in Ihrer Gegenstelle nicht genau der 1234.5677490234375 entspricht (ja, es können bei Float32 kleine Abweichungen auftreten), stimmt etwas nicht. Würden Sie beispielsweise eine 237810783920322510848 angezeigt bekommen, würden Sie die Register 23 und 24 auslesen, was für eine Zählweise ab 1 spricht.

Für die Prüfung der Float32-Werte kann man u.a. folgende Seite nutzen: https://www.h-schmidt.net/FloatConverter/IEEE754.html

Kategorien:
Kategorien

Ähnliche Beiträge

Smart Metering im eigenen Heim (VI) – Datenbank per Script anbinden

mehr lesen

Videoreihe neue Software-Funktionen – Teil 1: Erweiterte Analysemöglichkeiten

mehr lesen

Cookies & Skripte von Drittanbietern

Diese Website verwendet Cookies. Für eine optimale Performance, eine reibungslose Verwendung sozialer Medien und aus Werbezwecken empfiehlt es sich, der Verwendung von Cookies & Skripten durch Drittanbieter zuzustimmen. Dafür werden möglicherweise Informationen zu Ihrer Verwendung der Website von Drittanbietern für soziale Medien, Werbung und Analysen weitergegeben.
Weitere Informationen finden Sie unter Datenschutz und im Impressum.
Welchen Cookies & Skripten und der damit verbundenen Verarbeitung Ihrer persönlichen Daten stimmen Sie zu?

Sie können Ihre Einstellungen jederzeit unter Datenschutz ändern.