# Umwandeln Hex in Dez mit S7-300



## hubert (5 Mai 2005)

Hallo SPS Freunde.

Habe ein kleines Problem. Wie kann ich eine Hexadezimale Zahl (0123..ABCDEF) in eine Dezimale Zahl umwandeln. Bekomme diesen Wert von einem FU und soll nun die Stromaufnahme des FU an einem Leistsystem anzeigen. Das Leitsystem kann aber keinen Hexwert in eine Dezimalnzahl umwandeln. In Step 7 habe ich keinen Befehl gefunden der mir das macht. Vieleicht habt ihr eine paar Tipps wie ich das in der
S7-300 relativ einfach lösen kann.


----------



## lorenz2512 (5 Mai 2005)

Hallo,
http://www.sps-forum.de/phpBB2/viewtopic.php?t=3222&highlight=hex
mfg
dietmar


----------



## Rayk (5 Mai 2005)

Hallo,
wenn es sich wirklich um Heaxadezimalzahlen handelt, dann ist es eine reine Frage der Interpretation des Bitmusters und die Zahl muss nicht umgewandelt werden. 

Bsp.: im MB 10 steht die Dualzahl 0010 1010  --> Hexadezimal 16#2A =                                                                        Dezimalzahl 42 
ganz einfach kannst du dieses testen indem du in der Variablentabelle das MB 10 als Hexadezimalzahl (Anzeigeformat HEX) und als Dezimalzahl (Anzeigeformat DEZ) betrachtetst, 

Zur Darstellung im Leitsystem einfach das Anzeigeformat auf "Dezimal" einstellen und der Wert vom FU wird richtig dargestellt.

Gruß, Rayk


----------



## ChristianBaumgartner (8 Oktober 2009)

*In die andere Richtung*

Hallo.Wie mache ich das selbe in die andere Richtung. Ich will auf der Visu Wert 31 eingeben und diesen muss ich dann als 1F weitergeben an einen Motorenbaustein.
Sprich ich muss die 31 dezimal in 1F hexadezimal umwandeln.


----------



## Larry Laffer (8 Oktober 2009)

... wie es Rayk schon erklärt hat ... Hex 1F und Dez 31 sind absolut dasselbe - die Zahl wird von der Anzeige einfach nur anders dargestellt - der Inhalt ändert sich nicht.

Gruß
LL


----------



## maweri (8 Oktober 2009)

Hallo Christian,

die "Umwandlung" läuft in beide Richtungen. Um genau zu sein ist es gar keine Umwandlung, sondern nur die Darstellung *eines *Wertes in verschiedenen Zahlensystemen.
Die Information im Byte ist immer dieselbe. Egal wie die Darstellung aussieht.

Gruß
maweri


----------



## thomas_1975 (9 Oktober 2009)

Hallo,
ich denke das geschilderte Problem bezieht sich darauf,
das in der Visu der wert 31 ( Dezimal ) eingegeben wird,
und dieser in der Steuerung als Hex Wert übergeben wird, 
sprich  Hex 31 => 49 dezimal.
würde mich auch mal interessieren.
gruß thomas


----------



## maweri (9 Oktober 2009)

Das funktioniert so aber nicht.
Wenn in der Visu 31(dez) steht, dann ist *dieser* Wert auch im Byte hinterlegt.
dez: 31
hex: 1F
bin: 0001 1111
Selbst wenn der FU, die Steuerung oder was auch immer den Wert als hex interpretiert, so liest er 1F(hex) und nicht 31(hex).

Schwieriger wird's wenn man z.B. eine Seriennummer (16stellig) in 8 Byte hexdezimal hinterlegt hat:
1.Byte 23(hex)
2.Byte 45(hex)
3.Byte 67(hex)
...
und rauskommen soll:
234567...(dez)
Und dann noch jede Stelle als CHAR weitergeben. (Den Fall habe ich nämlich gerade) Dann geht das Rechnen los.

Das ist aber für gewöhnlich bei Parameterübergaben nicht der Fall.


----------



## ChristianBaumgartner (10 Oktober 2009)

ok,wenn dass so ist, sollte es kein Problem darstellen.ich war mir nur nicht sicher, ob wenn ich 31 dez ins byte schreibe und dort 31 als dezimalzahl abgelegt wird, ob der Rollenmotor dann die 31als eine hex zahl anschaut. dann nähmlich stimmt der wert überhaupt nicht wenn er die 31 dez als 31 hex intepretiert, anstatt 1F!


----------



## EPaulo (24 Februar 2010)

*Zähler*

Hallo zusammen,

habe ein ähnliches Problem.
Wert aus der Visu ist in Hex, INT move es in WORD bleibt aber HEX.
Zähler interpretiert HEX aber als DEZ.
Wie wandle ich HEX in DEZ um? Bekomme immer Programmierfehler sobald ein Buchstabe aus dem HEX code als Wert anliegt, ansonsten keine Probleme!


----------



## Paule (24 Februar 2010)

EPaulo schrieb:


> Wie wandle ich HEX in DEZ um?


Das steht doch schon alles in dem alten Thread drin.
Es ist doch nur eine Darstellungsform.
Wenn Du aber Hexzahlen eingeben willst, dann so:

```
L W#16#1AB5 // entspricht 6837 Dez
```


----------



## EPaulo (24 Februar 2010)

Hallo,

mein Problem ist, ich gebe Dez in der VISU ein.
Dann geht das ganze in ein DB DINT.
Der Zähler braucht ein WORD als vorgabe.
Also MOVE in ein WORD. Nun steht das ergebnis 10 aus der VISU als a am Zähler. Natürlich ist es eine Darstellungsform. Abre der Zähler scheint eine DEZ zu erwarten sonst würde er mir keine Störung bringen. Und er Bringt nur STörung bei HEX Buchstaben!!!!
Also muss ich wieder Wandeln in DEZ. WIe mach ich das.
Für mich ist Die Darstellung in Egal. Aber der Baustein erwartet etwas was er nicht bekommt.


----------



## Paule (24 Februar 2010)

EPaulo schrieb:


> Der Zähler braucht ein WORD als vorgabe.
> Also MOVE in ein WORD. Nun steht das ergebnis 10 aus der VISU als a am Zähler. Natürlich ist es eine Darstellungsform. Abre der Zähler scheint eine DEZ zu erwarten sonst würde er mir keine Störung bringen.


Was ist denn das für ein Zähler?
Braucht WORD als Vorgabe aber der Wert muss Dezimal sein?


----------



## EPaulo (24 Februar 2010)

ZW	WORD	E, A, M, D, L
oder
Konstante	Zählwert eingegeben als C#<Wert> im Bereich zwischen 0 und 999


----------



## EPaulo (24 Februar 2010)

Probiers aus
er vertägt kein HEX!


----------



## Paule (24 Februar 2010)

Dann wird es BCD Codiert sein.

```
L MW x
   ITB
```


----------



## vierlagig (24 Februar 2010)

ich bin gegen die verwendung eines solchen zählers.
einfach ein (doppel)wort in- und dekrementieren ... ermöglicht zu dem das zählen über die magische grenze von 999 (hier kommt dann auch das mit dem BCD zum tragen...) hinaus...


----------



## PN/DP (24 Februar 2010)

*C# ist BCD*

Hallo EPaulo,

wenn Du einen S7-Zähler Cxx benutzt:
der braucht kein DEZ, kein INT, kein WORD und kein HEX (das sind nur verschiedene Darstellungen des selben Bitmusters)
sondern *BCD*. C# ist ein BCD im Bereich 000 bis 999, das ist tatsächlich ein anderes Zahlenformat.

Vor der Benutzung deines Wertes aus der Visu am Zähler muß der Wert mit *ITB* in BCD gewandelt werden.
Oder bastel Dir einen eigenen Zähler, so wie von vierlagig vorgeschlagen.

Tip: bei Deiner nächsten Frage verrate uns auch den genauen Störungstext (nicht nur allgemein "bringt Störungen").

Gruß
Harald
(Mist, zu lange für den Beitrag gebraucht. Paule und 4L haben schon alles gesagt.)


----------



## GFuchs84 (29 Juli 2015)

Genau diesen Fall habe ich auch gerade?? Hast du eine Lösung gefunden??


----------



## GFuchs84 (29 Juli 2015)

maweri schrieb:


> Das funktioniert so aber nicht.
> Wenn in der Visu 31(dez) steht, dann ist *dieser* Wert auch im Byte hinterlegt.
> dez: 31
> hex: 1F
> ...



Genau diesen Fall habe ich auch gerade?? Hast du eine Lösung gefunden??


----------

