Modbus Instanzkonfiguration

Hallo,
stehe auf dem Schlauch… könnt ihr mir hier weiterhelfen was ich in der Instanzkonfiguration Modbus (Einheit und Funktion) eintragen muss damit ich hier interpretierbare Werte bekomme? bei UINT16 bekomme ich beispielweise 4369 zurück. Kann irgendwie nicht sein. Es geht um die Adresse X302 (X ist nur Platzhalter für Modul 1,2,3,…)


Freue mich auf Unterstützung
Martin

Den Wert musst du in Binär umrechnen und dann dir die einzelnen Bits raus ziehen.

Ich glaube das ist mir klar (sicher bin ich nicht ;-)). Ich sollte 5 schreiben, das sollte 0101 sein. Aber jetzt habe ich ja in einem DAtenwort 4 Ausgänge. Wie schreibe oder lese ich das mit integer?

Hilft dir das? Modbus Bitregister Waveshare, Sugar Valley / Infinity Elektrolyse Poolsteuerung - #11 von tobiasr

Beim Schreiben entsprechend ‚andersherum‘. Wenn lesen geht und schreiben klemmt, gerne nochmal mit deinem bisherigen, gescheitertem, Code melden.

Leider nein. Ich verwende das Modbus Modul und kann auch alle anderen Werte auslesen / schreiben. Nur weiß ich nicht wie ich in einem Datenwort die 4 Ausgänge schreiben soll. Alle 4 Ausgänge auf 5 schreiben wäre umgerechnet 21845 = 0101 0101 0101 ?
Also schreibe ich auf Integer 21845?

Ja im Grunde genau so. Du musst doch irgendwie aus allen vier Eingangsvariablen (ich vermute du baust dir VIER Variablen mit dem Integer Profil entsprechend 0-6) und willst die zusammenbauen? Das musst du doch ausrechnen also brauchst du eine Formel ähnlich

$byte1 = (GetValueInteger(*VAR1*) & 15) <<24;
$byte2 = (GetValueInteger(*VAR2*) & 15) <<16;
$byte3 = (GetValueInteger(*VAR3*) & 15) <<8;
$byte4 = (GetValueInteger(*VAR4*) & 15) <<0; // <<0 kann man weglassen....
$byte = $byte1+$byte2+$byte3+$byte4;
ModbusWrite....(...., $byte);

Nachtrag: Diese Formel muss unbedingt vorher per ‚Hand‘ geprüft werden. Für Schäden an deinen Geräten durch Formelfehler kann ich keine Haftung übernehmen.