HEX Konvertierung?

Codesys_123

Level-2
Beiträge
37
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo!

Habe mal wieder ein (hoffentlich) kleines Problemchen! Ich habe einen HEX Wert, den ich gerne umwandeln würde in beispielsweise INT. Gibts da n Befehl für in TWIN CAT oder muss ich mir das selber zusammenrechnen?
Für BOOL Werte zu INT gibts ja BOOL_TO_INT... Habe im Infosys von Beckhoff und in einigen Dokus gestöbert und nix gefunden, vielleicht kann mir ja hier mal wieder jemand aus der Patsche helfen ;)
 
Ich muss mich ein wenig berichtigen, bzw ergänzen:

Ich habe eine SYSTEMTIME die als TIMESTRUCT vorliegt. Ich möchte jetzt z.B. den Wert "systime.wHour", also den Wert für die Stunden, als INT Wert haben, bzw nich als HEX Wert. Im TIMESTRUCT sind die ganzen Werte aber Wörter (WORD). Wie bekomme ich da ne Umwandlung hin?!

WORD_TO_INT geht komischerweise nich oO

Habe das so geschrieben:

"VAR
timehour_int:INT;
END_VAR"

PROGRAM time
"timerhour_int := WORD_TO_INT(systime.wHour);"

Bekomme auch ne Warnung
"Typ 'INT' des Operanden ist nicht gleich Typ 'WORD' der Konvertierung! Für die Konvertierung wird INT verwendet.

Mache ich was falsch?!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mh, bei mir klappts.

Code:
PROGRAM MAIN
VAR
    bStart            :    BOOL;
    timehour_int    :    INT;
    fbGetTime       :    NT_GetTime;
END_VAR

fbGetTime(
    NETID        := '',
    START       := bStart,
    TMOUT      := DEFAULT_ADS_TIMEOUT,
    BUSY         => ,
    ERR           => ,
    ERRID        => ,
    TIMESTR    => );

timehour_int := WORD_TO_INT(fbGetTime.TIMESTR.wHour);

Hatte erst die Konvertierung falsch herum, INT_TO_WORD. Da bekam ich auch die gleiche Meldung.

Ansonsten gibt es außer den Typenkonvertierungen eigentlich auch keine direkte Konvertierung zwischen hex und dezimal, oder?! Wenn man mit 16# eine Zahl vorgibt, wird sie hexadezimal ausgewertet, 2# binär und ohne dezimal.
 
Ne, meine Fehlermeldung war doch anders, genau andersherum.

Typ Word des Operanden ist nicht gleich Typ int der Konvertierung...

Sorry, dann weiß ich auch nicht
 
Schade, schade :)

hatte dein Programm auch gerade mal testweise ausprobiert.
Bekomme zwar keine Fehlermeldung, aber der Wert bleibt trotzdem HEX... sprich "16#0000" anstatt "0" wenn ich mir das im online-modus anschaue...
 
...hatte ich erwähnt das ich noch nich so lange mit TWIN CAT arbeite? ;)

Also das klappt ja ;) Wenn ich das weiter verarbeiten möchte, ist das aber dann auch INT? Werds auf jeden Fall mal probieren! Schönen Dank nochmal!

Wenn ich nich weiterkomme schreib ich nochmal kurz!
 
NP. Dafür ist das Forum da. :cool:

Die Interpretation hängt vom Variablentyp ab. Bei einem INT z.B. geht der Wertebereich von 32767 bis -32768. Die Negativ-Zahlen fang ab 16#8000 (-32768 ) an und gehen dann bis 16#FFFF (-1). Was also z.B -32760 bei INT, ist bei WORD 32776. Binär steht aber bei beiden das Gleiche, wird nur unterschiedlich ausgewertet.

Und da kommen dann die Konvertierungen ins Spiel, wenn man sich mit den Bereichsüberschreitungen nicht so detailiert befassen möchte.

Die Onlineanzeige ist davon nochmal losgelöst. Dort kannst Du dir dann auch bei einem INT-Wert immer den dazugehörigen HEX-Wert anzeigen lassen, also den Speicherinhalt quasi.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
String

NP. ...

Die Onlineanzeige ist davon nochmal losgelöst. Dort kannst Du dir dann auch bei einem INT-Wert immer den dazugehörigen HEX-Wert anzeigen lassen, also den Speicherinhalt quasi.

Genau genommen hast Du ein gewisses Bitmuster an einer Speicherstelle. Das wird dann gemäss des Datentyps in den Operationen nach mathematischen Regeln durch das Programm ausgewertet. Das macht der Computer, ohne dass Du was siehst.

Wenn Du dann wissen willst, was das Bitmuster nun eigentlich darstellt, welchen Wert es repräsentiert, wandelt das CoDeSys in einen String, der auf dem Display angezeigt wird.
 
Zurück
Oben