DINT TO DWORD klappt nicht

Carsten77

Level-1
Beiträge
78
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe ein Textdisplay auf dem ich eine Variable des Formates DWORD deklariert habe. Desweiteren habe ich einen DB mit einer Variablen des Formats DINT. Das ist einfach ein Teile Zähler. Nun muss ich mein DINT Variable in DWORD wandeln..

"DB_TD03".DBD46 := DINT_TO_DWORD ("DB_VARIABLEN".M_IO);

Hab ich so gemacht. Meckert auch nicht...scheint also zu funktionieren.
Aber meine angezeigte Zahl stimmt hinten und vorne nicht.

Was mache ich falsch? :confused:

Danke jetzt schon.
Carsten
 
Hallo zusammen,

ich habe ein Textdisplay auf dem ich eine Variable des Formates DWORD deklariert habe. Desweiteren habe ich einen DB mit einer Variablen des Formats DINT. Das ist einfach ein Teile Zähler. Nun muss ich mein DINT Variable in DWORD wandeln..

"DB_TD03".DBD46 := DINT_TO_DWORD ("DB_VARIABLEN".M_IO);

Hab ich so gemacht. Meckert auch nicht...scheint also zu funktionieren.
Aber meine angezeigte Zahl stimmt hinten und vorne nicht.

Was mache ich falsch? :confused:

Danke jetzt schon.
Carsten

Wie hast du im Display die Anzeige definiert?
Wenn Char musst die Zahl nach Char wandeln.
Wenn als String, dann geht das so nicht, da bei String am Anfang noch zwei Byte mit definierter und tatsächlicher Länge sind


bike
 
Ich hatte erst Signed und dann REAL probiert.
Meine Variable DB_VARIABLEN.M_IO zählt schön immer um 1 hoch. Aber auf dem Textdisplay, also wohl auch im DB in den ich den gewandelten Wert schreibe steigt die Zahl immer gleich um mehrere tausend...
 
Versuche er die richtige Byte-Reihenfolge ...

Am Beispiel MD0
Siemens:
MB0 MB1 MB2 MB3
High ... LOW

Deine Anzeige (vermutlich):
MB3 MB2 MB1 MB0
High ... Low

Das heißt +1 = Bit 0 im Byte 3 ändert sich:
Bei Siemens also um 1, bei falsch um ~1670000

Mfg
Manuel
 
Aber bei Signed hätte es eigentlich funktionieren müssen ... wenn das das einzige Problem wäre.

Wenn ich mich jetzt nicht böse täusche ist DINT_TO_DWORD ohnehin ein Nullbefehl,
also nur eine für den Compiler notwendige formale konvertierung, keine echte funktion.

Mfg
Manuel
 
Hab mich auch zu früh gefreut. Das geht immer noch nicht.
Irgendwie schreibe ich da in die falschen Bereiche... :confused:

Aber ich hab irgendwie alles richtig angegeben, anscheinend ist da aber in einem DB was verrutscht. MIST!

Das sieht so aus:

"DB_TD03".DBD46 := DINT_TO_DWORD ("DB_VARIABLEN".M_IO);
"DB_TD03".DBD66 := DINT_TO_DWORD ("DB_VARIABLEN".M_NIO);

und egal welche Variable ich hochzähle, IO oder NIO schreibt es in den Bereich DBD46
 
Zuletzt bearbeitet:
Zurück
Oben