MichaelK
Topic Author
Posts: 12
Joined: 02 Apr 2020, 14:51
Answers: 0

Register Bit-Reihenfolge einlesen, Doppelregister auslesen

06 Apr 2020, 07:42

Hallo,ie

mit meinem Revolution Pi Connect möchte ich verschiedene Daten aus einem Siemens Sentron PAC 4200 via Modbus TCP auslesen. Soweit so gut, die Verbindung steht, mit PiCtory konnte ich auch den Modbus MAster anlegen und über PiTest die Register einzeln auslesen.

Zu meiner ersten Frage, wie kann man ein Doppelregister auslesen? Wenn ich in PiCtory bei den erweiterten Einstellungen des Modbus Masters 2 Register in die Anzahl schreibe, und über PiTest auslese, wird mir nur in 2 Byte langer Wert angegeben.

Und zweitens kommen jedoch ganz abstruse Werte bei den Messungen heraus, welche nicht stimmen können. Deshalb telefonierte ich mit der Firma Siemens, diese sagten mir, dass es sein kann, das mein Revolution Pi die Bytes dcba liest, das Siemens Sentron sie jedoch abcd schickt.

Kann das auslesen vielleicht in einer eigens für das Sentron angelegten RAP-Datei eingestellt werden?

Vielen Dank im Vorraus und freundliche Grüße

MichaelK
 
User avatar
dirk
KUNBUS
Posts: 1760
Joined: 15 Dec 2016, 13:19
Answers: 1

Re: Register Bit-Reihenfolge einlesen, Doppelregister auslesen

06 Apr 2020, 10:58

Hallo MichaelK, Modbus verwendet 16Bit Register im Format Big Endian.
Wenn Deine Daten mehr als ein Register umfassen, dann musst Du diese in Deiner Anwendung richtig zu interpretieren.
Mit Python funktioniert die Konvertierung eines Int in das Big Endian Format so:
import struct
print struct.pack('>I', your_int)
Hier ist die Quelle.

Eine Idee ist dass Du erstmal mit der Software QModMaster die Register z.B. mit Read Multiple Registers ausließt und schaust,
wie die Daten zu interpretieren sind.
Hier gibt es ein Video, das beschreibt wie Du das machen kannst
Tutorial 20 – Modbus TCP Master
Kann das auslesen vielleicht in einer eigens für das Sentron angelegten RAP-Datei eingestellt werden?
Wäre natürlich denkbar. Doch auch dort kommst Du um diese Applikationslogik nicht herum.
Du kannst jedoch eine Variable definieren z.B. int32 und diese dann z.B. mit Python befüllen.
 
MichaelK
Topic Author
Posts: 12
Joined: 02 Apr 2020, 14:51
Answers: 0

Re: Register Bit-Reihenfolge einlesen, Doppelregister auslesen

16 Apr 2020, 10:43

Hallo dirk,

das Problem ist genauso aufgetreten, wie du es beschrieben hast. Nachdem ich die beiden 16bit UInt zu einem 32bit single precision Float zusammengeführt habe, hat alles ohne Probleme funktioniert.
Falls noch jemand das selbe Problem haben sollte, der Code lautete bei mir wie folgt:
// Create a buffer
var buf = new ArrayBuffer(4);
// Create a data view of it
var view = new DataView(buf);
// Write the ints to it
view.setUint16(0, msg.payload.data[0]);
view.setUint16(2, msg.payload.data[1]);
// Read the bits as a float; note that by doing this, we're implicitly
// converting it from a 32-bit float into JavaScript's native 64-bit double
msg.payload.Float = view.getFloat32(0);
// Done
return msg;
Grüße Michael
 
User avatar
dirk
KUNBUS
Posts: 1760
Joined: 15 Dec 2016, 13:19
Answers: 1

Re: Register Bit-Reihenfolge einlesen, Doppelregister auslesen

16 Apr 2020, 16:32

Hi Michael, vielen Dank für Dein positives Feedback und die ausführliche Dokumentation. Das hilft allen anderen, klasse.

Who is online

Users browsing this forum: No registered users and 1 guest