Umwandlung Word in Real

Eddie

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
ich hatte ein Problem bei der Umwandlung von Ganzzahlen im Word-Format in Gleitpunktzahlen.
die Umwandlung erfolgte so:

L MW...(als Word)
ITD
DTR
T MD...(als Real)

Wenn die Ganzzahl aber mehr als 32768 betrug, bekam die Gleitpunktzahl negative Werte.
Das lag daran, dass durch ITD die vorderen 16bit mit Einsen aufgefüllt wurde.

Nach langem hin und her hab ich dann das ITD einfach weggelassen und alles hat funktioniert.

In der Beschreibung zum Befehl DTR heißt es aber:Umwandlung einer Ganzzahl, 32 Bit, in eine Gleitpunktzahl, 32 Bit.

Wieso geht das dann aber nur richtig mir einer 16bit Zahl und nicht mit einer 32 bit Zahl?
Ich bin ja froh dass jetzt alles funktioniert, wollte aber wissen ob man das wirklich so macht, oder ob das bei mit jetzt Zufall ist dass es funktioniert.
Und wenn ja, wie das richtig gemacht wird.

Ich hoffe ihr könnt mir helfen.

Grüße Eddie
 
Dann schau Dir mal genau ein INT an
+- 32768
Das Heisst nach +32768 wird das oberste Bit gesetzt und es geht ins Minus. Das oberste Bit ist das Vorzeichen. Also sind dies 15 Bit plus Vorzeichen. Mann kann keine Dezimal Zahl größer als 32768 mit einem INT (Word) darstellen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wenn du nur positive zahlen verwendest, dann kannst du mit nur DTR auskommen ...siehe jabba

du schreibst, du möchtest ein wort wandeln, wenn dieses unsigned ist, was es ja zwangsläufig sein muß, da du werte größer 32767 bekommen kannst, mußt du sogar mit DTR arbeiten ...

das DTR interpriert dann die 16 bit zahl als 32 bit zahl ... da diese zuvor in den akku geladen wird, ist da der L-teil mit deiner zahl beladen, der H-teil wird genullt ... deswegen funktionierts halt, aber wie gesagt, nur mit positiven zahlen :rolleyes:

@jabba: war es nicht -32768 bis +32767 wegen 0?
 
nochmals zur Verdeutlichung:

Dein MW, das Du als Word interpretierst (Wertebereich 0..65535) wird vom ITD-Befehl als Integer (-32768..+32767) interpretiert und daher erweitert ITD das Vorzeichen der Integerzahl auf eine im DINT-Format.

sprich:
8000h entspricht als Word 32768.
als Integer -32767.
als Doubleinteger wieder 32768.
und ITD macht aus Integer -32768 einen DINT mit -32768, der mit FFFF8000h codiert ist.
 
Zuletzt bearbeitet:
Vielen Dank für die vor allem schnellen Antworten.
Sowas in der Art hab ich mir gedacht, nur so ganz genau bin ich nicht durchgestiegen. aber jetzt ists klar.
und da ich nur positive zahlen verwende funktioniert auch alles.
Also nochmal vielen Dank
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... wenn du das so richtig "schick" machen möchtest um damit zu verhindern, dass dir ggf ein Vorgängerwert, der noch im High-Wort des Akku herumspukt, in die Suppe spuckt, dann könntest du es so machen :
Code:
L#0
L MW...(als Word)
DTR
T MD...(als Real)
Gruß
LL
 
... wenn das bei Siemens so steht ...
Allerdings frage ich mich dann, wozu die den Befehl ITD gemacht haben ... hast du mal nachgesehen, was der Befehl mit den Akku's macht ...?
 
... oder benutzt Du ACCON-PG?

hier die Siemens-Hilfe zu ITD:
ITD (Umwandlung einer Ganzzahl, 16 Bit, in eine Ganzzahl, 32 Bit) wertet den Inhalt von AKKU1-L als Ganzzahl (16 Bit) aus und wandelt diese in eine Ganzzahl (32 Bit) um. Das Ergebnis wird in AKKU 1 gespeichert. AKKU 2 wird nicht verändert.
 
Zurück
Oben