Umwnadeln von ASCII-Zeichen in REAL

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe eine Kommunikation mit einem Keyence TM3000 Messystem.

Dieses sendet mir Daten via RS232. Gesendet werden ASCIIzeichen
Die Daten stehen nun wie folgt in meinem CP Lesepuffer:

Lesebyte[1] = '+'
Lesebyte[2] = '0'
Lesebyte[3] = '0'
Lesebyte[4] = '5'
Lesebyte[5] = '.'
Lesebyte[6] = '9'
Lesebyte[7] = '0'
Lesebyte[8] = '9'
Lesebyte[9] = ',' // Trennzeichen für den nächsten Wert

Wie mache ich nun daraus einen Realwert?
Gibts da Bausteine für, oder hat jemand schon mal soetwas gemacht?
 
Habe gerade gelesen es gibt ein String to REAL?
Aber leider geht dort nur eine Vorkommastelle.
Gibts noch irgendwie was Ähnliches?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Benson,

da wirst du dir wohl (oder übel) etwas selber bauen müssen.
Zunächst würde ich mir das Byte-Array in seine Einzel-Teile zerlegen - also für jedes Element, das durch Semikolon getrennt ist einen eigenen String bauen und den dann mit einer eigenen Wandlungsroutine zu einer REAL-Zahl umbauen.
Ich kann mich aber auch erinnern, dass wir so etwas ähnliches vor einiger Zeit hier schon mal hatten ... 8)

Gruß
Larry
 
Hmm, schon mal in die String Funktionen von der OSCAT.de Lib geguckt:
[url]http://www.oscat.de/


D[/URL]a wäre, zitat aus der OSCAT.de Doku:
13.31. FLOAT_TO_REAL
Type Funktion : REAL
Input FLT : STRING(20) (Gleitkommazahl)
Output REAL (REAL Wert der Gleitkommazahl)

FLOAT_TO_REAL wandelt eine als STRING vorliegende Gleitpunktzahl in einen Datentyp REAL um. Bei Der Umwandlung werden '.' oder ',' als Kom-
ma interpretiert und 'E' oder 'e' als Trennzeichen des Exponenten. Die Zeichen '-0123456789' werden Ausgewertet und alle anderen in FLT vorkommenden Zeichen werden ignoriert.

Gruß
Euer Schatten
 
Ja das war ich ;)

Ich hab es mit zwei DINT gelöst, einen für Vorkomma, einen für Nachkomma.
Du könntest die noch verrechnen und dann entsprechend zusammenbauen, die Siemensbausteine sind aber sehr wählerisch mit dem Format der Eingangsparameter.

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe es anderst gelöst

Hi Leute, hatbe es etwas anderst gelöst, habe mir einen Baustein geschrieben, welcher das ASCII ARRAY in ein REAL ARRAY umwandelt.

Dies passiert folgendermaßen.
Wenn eine Zahl zwischen 0 und 9 erkannt wird dann wird dieser wert mit dem vorherigen wert addiert.
Wird nun das dezimaltrennzeichen "." erkannt, so wird der Teiler /10.0 dividiert.
Die nächste zahl wird nun auch wieder addiert allerdings mit dem Faktor 1/Teiler, also 1/10.0.
Da nun der Teiler schon ungleich 1.0 ist, wir er bei jeder erkannten Zahl wiederum mit 1/10.0 multipliziert.
somit ergibt sich bei der nächsten addition ein Faktor von 1/100.0.
wird ein "," erkannt, so ist deklariert, dass eine neu zahl beginnt die bis jetzt bestehende Zahl wird gespeichert und der speicherindex wird erhöht.
 
Zurück
Oben