Supportforum von www.raeppel.de
http://www.raeppel.de/phpBB3/

seriell empfangene CHAR -> REAL
http://www.raeppel.de/phpBB3/viewtopic.php?f=12&t=215
Seite 1 von 1

Autor:  nils [ 05.06.2008, 19:15 ]
Betreff des Beitrags:  seriell empfangene CHAR -> REAL

Schönen guten Abend!

Ich empfange per seriellem CP eine CHAR-Kette und muss diese in eine REAL wandeln und weiterverarbeiten. Wie geht man da vor?

Nils

Autor:  easytex [ 06.06.2008, 08:28 ]
Betreff des Beitrags: 

Hallo nils,

zunächst muss man erstmal folgendes wissen:
Zitat:
char '0' entspricht Hexadezimal 30
char '1' entspricht Hexadezimal 31
...
...
char '9' entspricht Hexadezimal 39

Daraus ergibt sich in etwa folgende Herangehensweise:

In diesem Beispiel gehe ich von einer 4 Stelligen Zeichenkette aus, kann man ja beliebig erweitern wenn man mehr braucht. :)

Code:
//erste Stelle von links wandeln

 
L #char1
BTI            //in Integer wandeln
L 30           //30 subtrahieren um die korrekte Ziffer als Int zu erhalten
-I
L 1000         //multiplizere mit 1000
*I
T #tausender   //Zwischenergebnis (Word)


//zweite Stelle von links wandeln

L #char2
BTI            //in Integer wandeln
L 30           //30 subtrahieren um die korrekte Ziffer als Int zu erhalten
-I
L 100         //multiplizere mit 100
*I
T #hunderter   //Zwischenergebnis (Word)

//dritte Stelle von links wandeln

L #char3
BTI            //in Integer wandeln
L 30           //30 subtrahieren um die korrekte Ziffer als Int zu erhalten
-I
L 10          //multiplizere mit 10
*I
T #zehner     //Zwischenergebnis (Word)

//vierte Stelle von links wandeln

L #char4
BTI            //in Integer wandeln
L 30           //30 subtrahieren um die korrekte Ziffer als Int zu erhalten
-I
T #einer      //Zwischenergebnis (Word)


//das Ganze zusammenrechnen

L #tausender
L #hunderter
+I
L #zehner
+I
L #einer
+I
T #int_zahl   //Die Zeichenkette als Integerzahl

//Dieses nun in Real wandeln

L #int_zahl
ITD
DTR
T #real_zahl  //Das Endergebnis als Gleitkommazahl

.



.

Autor:  smart_chris [ 08.06.2008, 11:53 ]
Betreff des Beitrags: 

besser kann man es nicht erklären!

Ich bin aber der Meinung das man auch den Wert von Null einfach mit '0' laden kann und abziehen kann. Wer das ganze auch noch mit Dez Zahlen machen will dem sei gesgat das die '0' = dez 48 entspricht.


MFG

Chris

Autor:  ARaeppel [ 08.06.2008, 15:23 ]
Betreff des Beitrags:  Wandlung

Hallo,

strukturell find ichs ok. Aber wieso das BTI für die Zeichen? Es sind doch noch gar keine Zahlen. Wie schon Chris geschrieben hat:

L #char_x
L W#16#30 // '0' subtrahieren um die korrekte Ziffer als Int zu erhalten
-I

André

Autor:  easytex [ 09.06.2008, 11:12 ]
Betreff des Beitrags:  Stimmt

Hallo,
Ihr habt recht!
Das 'BTI' ist überflüssig. :)

Gruß easytex

Autor:  Stefan4u2 [ 31.07.2008, 08:56 ]
Betreff des Beitrags:  Re: seriell empfangene CHAR -> REAL

Hallo, bin evtl. ein bisschen spät dran, aber ich habe eine Funktion, die aus einem 10-stelligen char-array in eine Gleitkommazahl wandelt, wobei egal ist, wo der Dezimalpunkt steht.

Code:
FUNCTION "CHARtoREAL" : REAL
TITLE =
AUTHOR : SKSE
FAMILY : convert
NAME : CHTORE
VERSION : 0.2


VAR_INPUT
  str : ARRAY  [1 .. 10 ] OF CHAR ;   
END_VAR
VAR_TEMP
  tstr : STRING  [10 ];   
  Multiplikator : REAL ;   
  Divisor : REAL ;   
  Realausgabe : REAL ;   
  RetVal : INT ;   
END_VAR


Bei interesse, schicke ich euch die AWL-Quelle

Gruß
Stefan

Autor:  ARaeppel [ 02.08.2008, 10:07 ]
Betreff des Beitrags:  Re: seriell empfangene CHAR -> REAL

Hallo Stefan,

stells doch in Downloadbereich.

André

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/