Ganzzahl umwandeln

lyric

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

Ich hab mal geschwind eine Frage:D

Warum muss man eine eingelesene Ganzzahl 16 Bit erst in eine 32 Bit Ganzzahl umwandeln bevor man sie in eine Gleitpunktzahl umwandelt???

Wäre dankbar für eine unkomplizierte Antwort

Merci
Lyric
 
Hallo Lyric,
es gibt so Dinge in der Siemens-Welt über die man irgendwann stolpert. Ein vernünftige Erklärung dafür kann ich dir auch nicht bieten - ich bin darüber aber auch schon mal gestolpert.
Nett ist das dann auch in SCL. Dort gibt es einen Befehl "INT_TO_REAL". Der funktioniert aber nur mit positiven INT's. Negative werden verwurstelt.

Vielleicht solltest du mal Herrn Siemens fragen, was er sich dabei gedacht hat ...

Gruß
LL
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Achso dann ist das also sowas wie >> das Siemens nicht nur +- 27648 als Ganzzahl hat sondern halt 32 000 und ein paar zerquetschte etc?

Ich hasse Siemens:D

Gut das ich dass dann jetzt auch weiß, aber wenn wir schon beim Thema sind, eine Frage hab ich da noch!
Wenn die Zahl jetzt im Gleitpunktformat steht, sind ja die ersten 8 Bit Exponent und die nachfolgenden 23 Bit die Mantisse!!! Ausgeschrieben wird das ja dann nun genau andersherum also meinetwegen 2.7648+4 ...
Hat das was damit zu tun das bei Siemens die Bits irgendwie vertauscht werden?
Also die höherwertigen nach hinten und umgekehrt!? Hab da mal was gehört aber bin mir nicht sicher!!??

Danke für die Antwort

Merci
Lyric
 
Also der sicher Weg zur Wandlung ist natürlich über ITD, damit bist du immer auf der sicheren Seite.

Achso dann ist das also sowas wie >> das Siemens nicht nur +- 27648 als Ganzzahl hat sondern halt 32 000 und ein paar zerquetschte etc?
Was meinst du damit???

Real: Das Format ist nun mal so definiert, das hat nichts mit Siemens ansich zu tun.
 
Könnte man die Ganzzahl nicht direkt mit //DTR in eine Gleitpunktzahl umwandeln und gut ist, ich meine wenn mans weiß ist ja recht, aber hab mich halt gewundert wieso erst in 32 Bit umwandeln?!

Die 27648 sind schon festgelegt, das weiß ich ja, aber Siemens benutzt ja noch Werte darüber also bis quasi 32 768 bei Übersteuerung, das machen ja andere Systeme nicht, oder bin ich da falsch informiert?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Könnte man die Ganzzahl nicht direkt mit //DTR in eine Gleitpunktzahl umwandeln und gut ist, ich meine wenn mans weiß ist ja recht, aber hab mich halt gewundert wieso erst in 32 Bit umwandeln?!

Die 27648 sind schon festgelegt, das weiß ich ja, aber Siemens benutzt ja noch Werte darüber also bis quasi 32 768 bei Übersteuerung, das machen ja andere Systeme nicht, oder bin ich da falsch informiert?

16 Bit/ 32 Bit das hängt mit der Darstellung der negativen Zahlen zusammen. Wir hatten das erst hier im Forum, kannst ja mal suchen, da hat auch jemand ausprobiert, wann es geht und wann nicht. Da ich zu faul (oder zu dumm?) bin, mit das alles zu merken, wandel ich halt zuerst die 16 Bit in 32 Bit und dann in Real, fertig. So oft braucht man das ja dann auch nicht.

Mit 27648 meinst du die Analogwandlung? Das ist nun mal so von Siemens festgelegt worden und ich sehe da überhaupt kein Problem. Ansonsten geht in eine 16 Bit Variable nun mal nicht mehr als INT(Ganzzahl) 16Bit Dezimalzahl mit Vorzeichen -32768 bis 32767 rein.
 
Könnte man die Ganzzahl nicht direkt mit //DTR in eine Gleitpunktzahl umwandeln ?

Da ist, wie schon von Ralle erwähnt der Befehl ITD der richtige Weg. Aber wie ich schon beschrieben habe ist das nicht logisch zu begründen. Aber die "das ist nun mal so"-Geschichte haben im Grunde ja alle Systeme ...

27648 sind schon festgelegt, das weiß ich ja, aber Siemens benutzt ja noch Werte darüber also bis quasi 32 768 bei Übersteuerung, das machen ja andere Systeme nicht, oder bin ich da falsch informiert?
Wie +10 V (z.B.) von einer Analogkarte gewandelt werden ist von Siemens in einer der jeweiligen Karte zugehörigen Werte-Tabelle festgelegt. Darüber kannst du dann noch ein bißchen hinaus (siehe genannte Tabelle) - danach stellt dann ein Wert einen Fehler dar.
Andere Systeme haben da vielleicht andere Werte, aber eine Festlegung gibt es immer.
 
Ist es nicht so. dass in den oberen zwei Worten des Akku 1 irgendwas stehen kann, was mit der zu wandelnden Integerzahl nichts zu tun hat ?
z.B. nach einer vorhergehenden Berechnung
Nach dem Aufruf ITD werden diese Informationen sicher plattgemacht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist in der

Hilfe doch eigentlich ganz gut erklärt, oder?

Das Prob erwartet mich ab Dienstag. Nen festes Proggi, nen eigensinniger Kunde und ich dazwischen..

Such mal (Step7 Hilfe..) unter:
ITD DTR, bzw RTD DTI
und:
TAW und TAD

Mit denen passen wir 'die Welten' an ;)

Greetz, Tom
 
Sry,

don't drink and write...

In die Richtung 'INT kommt rein, Real will ich haben' klappt's, also ITD, DTR

von der Ganzzahl 32 bit zur Ganzzahl 16 bit funzt es über BCD- Zahlen, also DTB und BTI, Beim Wandeln von den REAL's in in die Ganzzahlen hab ich wohl bisher immer Glück gehabt. Da kommt man aber mit Runden hin.

Die 'Umwandlingsoperationen' helfen.

Was ich oft finde:

Wenn ich auf Kundendaten z.B. über nen Koppler zugreife und NUR SCHEIßE sehe, dann tausche ich die Bytes (TAD/ TAW), das hilft. Der nächste Schritt wäre, in dem Konfig DB ein Bit mit 'kommt grade rein' oder 'kommt gedreht rein' zu belegen, dann müssen net alle Transferdaten angepackt werden..

Greetz, und nochmal Sry, Tom
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Larry,

...Nett ist das dann auch in SCL. Dort gibt es einen Befehl "INT_TO_REAL". Der funktioniert aber nur mit positiven INT's. Negative werden verwurstelt...
Das musste ich jetzt einmal testen, da ich diese Funktion möglicherweise auch in meinen Bausteinen verwende. Es funktioniert auch mit negativen Zahlen, bei mir jedenfalls!

...Aber wie ich schon beschrieben habe ist das nicht logisch zu begründen...
Es sind doch nur ein paar Bits. Warum soll das nicht logisch zu begründen sein? Bei INT steht das Vorzeichenbit im Bit15, bei DINT steht es im Bit31. Bei neg. Zahlen werden durch ITD die bits 16 bis 30 wegen des Zweierkomplements zu "1".


Gruß, Onkel
 
Zurück
Oben