String_to_real, Ergebnis geteilt durch 100 (in ein Byte) schreiben, Byte mal 100 vom Ergebnis wieder abziehen, Rest in nächstes Byte, dieses plus 100 mal erstes Byte vom ersten Ergebnis abzeiehen , usw. usw.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ich stimme dir zu, der Ansatz on Oberchefe ist etwas gewöhnungsbedürftig
und erreicht am Ende sicherlich nicht dein Ziel.
Aber die Wandlung von String in Real kann man gefahrlos von Oberchefe übernehmen.
rVar := STRING_TO_REAL(MeinString)
Zum zerlegen in einzelne Bytes ist sicherlich der Weg von H. Schohaus der
bessere Weg.
Man könnte das aber auch über einen Pointer erreichen
z.B.
VAR ptByte     :POINTERTOARRAY[0..3]OFBYTE; rVar      :REAL; Byte_1    :BYTE; Byte_2    :BYTE; Byte_3    :BYTE; Byte_4    :BYTE;END_VAR ptByte:=ADR(rVar); Byte_1:=ptByte^[0]; Byte_2:=ptByte^[1]; Byte_3:=ptByte^[2]; Byte_4:=ptByte^[3];
Realzahlen sind als 32-Bit-Gleitkommazahlen mit single precision nach IEEE 754 codiert.
Zitat:
der Ansatz on Oberchefe ist etwas gewöhnungsbedürftig
ich hatte das auch so verstanden daß immer zwei Ziffern in einem Byte landen sollen, würde dann ja auch nur funktionieren wenn es jeweils maximal 4 Stellen vor und 4 Stellen nach dem Komma sind.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo
ich möchte einen String (eine zahl z.b 2765.678)
in eine Real wandeln und diese dann verunden mit 16#000000FF
um das erste Byte zuhaben und dieses dann in einem Array als Byte abspeichern.das ganze viermal sodass ich die RealZahl komplett in Bytes
gespeichert habe denn ich kann nur Byteweise Messwerte übertragen.
Hat vielleicht jemand eine Ahnung
wäre echt nett
Mit ferundlichem Gruß
Nyquist
String_to_real, Ergebnis geteilt durch 100 (in ein Byte) schreiben, Byte mal 100 vom Ergebnis wieder abziehen, Rest in nächstes Byte, dieses plus 100 mal erstes Byte vom ersten Ergebnis abzeiehen , usw. usw.
was????
tut mir Leid aber das kapier ich auf keinem Auge
könntest bitte mal ein Beispiel schreiben bei mir kommt nämlich nur müll raus
bzw. Ich hab die Zahl schon in 4 Bytes zerlegt nur wie bekomme ich Sie ohne
REAL TO String wieder zurück. WIe ist eine Real zahl in 32 Bit aufgeteilt. Das sollte ich wissen.
Vielen Dank schonmal für deine Bemühungen
MFG
sowas in der Richtung:
Eine echte Zerlegung einer variable läst sich recht schnell durch Doppeldeklaration von Speierbereiche erledigen
z.B.
Es ist nichts extra zu Programmieren da der Inhalt vom real auch gleichzeitig als Inhalt im bereich von den Byts ist.
Ich weis es ist nicht ganz elegant aber es funktioniert und ist einfach!
mfG Jochen Schohaus
Hallo Nyquist,
ich stimme dir zu, der Ansatz on Oberchefe ist etwas gewöhnungsbedürftig
und erreicht am Ende sicherlich nicht dein Ziel.
Aber die Wandlung von String in Real kann man gefahrlos von Oberchefe übernehmen.
rVar := STRING_TO_REAL(MeinString)
Zum zerlegen in einzelne Bytes ist sicherlich der Weg von H. Schohaus der
bessere Weg.
Man könnte das aber auch über einen Pointer erreichen
z.B.
Realzahlen sind als 32-Bit-Gleitkommazahlen mit single precision nach IEEE 754 codiert.
D.h. 24 Bit Mantisse und 8 Bit Exponent.
http://de.wikipedia.org/wiki/IEEE_754
Du willst diese Werte ja, wenn ich das richtig verstanden habe, auf ein anderes System übertragen.
Dort must du schauen welcher Datentyp dem REAL entspricht.
Z.B. im Visual Basic gibt es den Datentyp SINGLE der dem Datentyp REAL
entspricht und diesselbe Codierung aufweist (lediglich die Byteorder ist evtl. eine Andere).
Gruß
Uwe
Hallo Uwe,
ich muss sagen deine Antwort ist die sinnvollste.
ich hab mir ein Array aus Real gebastelt und dort meine Messwerte reingelegt.
von der Anfangsadresse aus bin ich dann mit einem POINTER OF BYTE
durch dieses Array gegangen. Funktioniert einwandfrei
Vielen Dank
Herzliche Grüße Nyquist
ich hatte das auch so verstanden daß immer zwei Ziffern in einem Byte landen sollen, würde dann ja auch nur funktionieren wenn es jeweils maximal 4 Stellen vor und 4 Stellen nach dem Komma sind.