Modbus Write Multiple Holding Register

Hallo
Ich brauch bitte Hilfe.
Es geht darum auf einen Genset Controller 2 Werte gleichzeitig zu schreiben.

Gelesen wird der Werte über das Holding Register 03 Adr. 4159 (Dez). Das lesen der Register ist kein Problem.
Geschrieben wird aber auf die Adr 8192 und 8193 gleichzeitig. Also Function Code = Multiple Holding Register 16
8192 ist der Wert fürs PW
8193 ist dann der Wert der gesetzt wird.
Problem ist das die Werte auf 1x mal geschrieben werden müssen.
Und ich finde jetzt in den Instanz Einstellungen kein Möglichkeit das umzusetzen

Aus dem Manual
The slave address is 10H, Set the content of the two points with the starting address
2000H (the two points must be written together when writing, otherwise it will be
invalid).
The point data address in this example is:
Address Data, (Hexadecimal), Data meaning
2000H 1DC7H Controller password
2001H 1111H Keyboard commands

Wie kann ich das umsetzen?
Hab Ihr da Ideen für mich.

Vielen Dank.
Grüße aus dem Waldviertel
Christian

Du brauchst eine 2. Instanz un verpackest beides in einen DWORD. Dann kannst du quasi 2 Register = 4 byte gleichzeitig schreiben.

paresy

Danke für die Antwort,

Aber jetzt bin ich noch verwirrter als sonst :smiley:
2 Instanzen je mit einer der zu beschreibenden Adresse.
Also Instanz 1 mit
image
und die 2te mit
image

Und wie schreib ich jetzt auf beide gleichzeitig mit "ModBus_WriteRegisterDWord (int $InstanceID, int $Wert) "? So kann ich aber auch nur eine nach der anderen ansprechen.

Ich glaub Du meinst das irgend wie anders?
Vielen Dank
Christian

Die „Schreib“ Instanz muss 32 Bit sein. Das ist der Trick daran.

paresy

Hi,
ich hab den Trick noch nicht durchschaut.

Ich hab jetzt eine Instanz nur für schreiben umgebaut, und die sieht so aus.


Und wie schreib ich jetzt in die Register.
Mit ModBus_WriteRegister (int $InstanceID, float $Value) oder mit
ModBus_WriteRegisterDWord (int $InstanceID, int $Value).

Ich steig da nicht ganz durch, sorry

Vielen Dank für Deine Hilfe

RequestAction, wie bei jeder Variable?!

Kannst auch über das WebFront testen.
Oder per Aktion mit auf Wert schalten.
Michael

Nall-chan,
danke. ich glaub wir reden aneinander vorbei bzw. ich kann meine Frage nicht richtig formulieren.

Ich kapiers nicht, wie übergebe ich die Werte, damit in die 2 Register gleichzeitig geschrieben wird.

Es reicht doch nicht, nur die Werte fürs Password u das Command zu übergeben, es muss doch auch das zweite Register angesprochen werden aber wie.
ich kapiers nicht

So sieht das aus wenn ich normal auf den Controller schreibe, damit werden die beiden Register gleichzeiti angesprochen.
Der Stop Befehl
grafik

grafik

Sorry aber ich glaub ich bin da leider ein Geisterfahrer.

Vielen Dank an Euch!

Christian

Was funktioniert den nicht an der Instanz mit 32Bit zum schreiben.
Ich hae dir nur gesagt wie du den schreib Befehl auslöst.

RequestAction (VarID, 0x00091111); // vielleicht auch 0x09001111

Michael

Hello,
Knopf is raus aus dem Kopf :smiley:
Ich hab das mit dem 32Bit DWord nicht verstanden.
U war der Meinung das ich auch das Register mitgeben muss u nicht nur die Werte.

Und so funktioniert es
RequestAction (ID,0x33330009);

Recht herzlichen Dank für die Unterstützung.