Hauptmenü

2 WORD zu ein DWORD

Begonnen von mfreye, 14. Oktober 2017, 19:32:45

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

mfreye

Hallo,

ich lese per Modbus zwei WORD Werte aus, wie kann ich diese zu einen DWORD Wert zusammen fassen / rechnen?

Ich kann die Werte nicht direkt als DWORD Wert vom Slave holen.

Danke für die Hilfe.

mfreye

Ich glaube ich habe es.

Word 1: 68

Word 2: 54721


(65536 * 68 + 54721) /1000


DWORD: 4511

peewit

hallo

denke immer dran das oscat ja schon fast alles erfunden hat !

benutze einfach den baustein DWORD_OF_WORD von der oscat basic lib

du brauchst selber nichts rechnen

mfreye

Sorry, das ganze ist in 3.5 :( Hab es ausversehn in 2.3 reingestellt.

Der Baustein ist aber doch für genau umgekehrt?

Gruß

peewit

über modbusregister kannst du ja maximal word übertragen

ein dword muss also über zwei register (words) übertragen werden

auf der anderen seite musst du dann die beiden words wieder zu einem DWORD zusammenfügen

das ist der standardweg
eventuell musst du die beiden words am baustein tauschen

es kann aber sein das deine beiden words anders aufgebaut sind , also kein echten DWORD !


warum dividierst du dann noch durch 1000 ?

mfreye

OK, dann past es soweit.

Durch 1000 ist nur bei meinen Wert wichtig. Wird von mWh in kWh umgerechnet.

dacown

Ich habe es so gelöst, habe die Original Namen aus meinen  Projekt gelassen:

   I_FuBand_dnPosAct_p1                     AT%IW234   :   WORD;   (*    Aktuelle Position der Motorwelle in [Inkrementen] LowWord*)
   I_FuBand_dnPosAct_p2                     AT%IW236   :   WORD;   (*    Aktuelle Position der Motorwelle in [Inkrementen] HighWord*)

diFuBand_AktPos                  := WORD_TO_DINT(I_FuBand_dnPosAct_p2); (* erst umwandeln *)
diFuBand_AktPos                  := SHL(diFuBand_AktPos,16); (* die länge des Words nach links verschieben *)
diFuBand_AktPos                  := diFuBand_AktPos + I_FuBand_dnPosAct_p1; (* Das Word dazu addieren *)

peewit

hallo

du kannst auch den oscat_basic baustein "DWORD_OF_WORD" verwenden