# HEX Konvertierung?



## Codesys_123 (9 Juni 2009)

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


----------



## Codesys_123 (9 Juni 2009)

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?!


----------



## DirkS1017 (9 Juni 2009)

Mh, bei mir klappts.


```
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.


----------



## DirkS1017 (9 Juni 2009)

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


----------



## Codesys_123 (9 Juni 2009)

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...


----------



## DirkS1017 (9 Juni 2009)

Dann klick mal in der Onlineansicht oben im Deklarationsteil mit der rechten Maustaste und wähle Dezimal aus. Dann solltest du es als Dezimalzahl sehen können?!


----------



## Codesys_123 (9 Juni 2009)

...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!


----------



## DirkS1017 (9 Juni 2009)

NP. Dafür ist das Forum da. 

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.


----------



## RobiHerb (9 Juni 2009)

*String*



DirkS1017 schrieb:


> 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.


----------

