Umwandeln Hex in Dez mit S7-300

hubert

Level-2
Beiträge
405
Reaktionspunkte
26
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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 :D
 
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.
 
... 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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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!
 
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!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
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?
 
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...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.)
 
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.

Genau diesen Fall habe ich auch gerade?? Hast du eine Lösung gefunden??
 
Zurück
Oben