integer 32Bit in integer 16 Bit wandeln

slk230-power

Level-1
Beiträge
49
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Siemens Freaks,

kennt von euch einer einen Befehl um eine Realzahl 32 Bit in eine 16 Bit integer zu wandeln. Den Befehl von Real auf Integer 32 kenn ich, aber jetzt muß ich noch auf 16 Bit runter kommen. Die Zahlenwerte selbst sind nicht so groß, dass es Probleme mit der Umwandlung gäbe, aber mal positiv und mal negativ vom Vorzeichen.

Danke für eure Hilfe
 
Es gibt keinen Befehl zur Wandlung von DInt nach Int.
Man braucht ihn auch nicht,zwischen den Zahlenwerten -32768 bis 32767
ist die Darstellung der Zahlenformate kompatibel.Ausserhalb der Grenzen
kann es keine 16 Bit Integer Zahlen geben.

Viel Grüße Bernard
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Siemens Freaks,

kennt von euch einer einen Befehl um eine Realzahl 32 Bit in eine 16 Bit integer zu wandeln. Den Befehl von Real auf Integer 32 kenn ich, aber jetzt muß ich noch auf 16 Bit runter kommen. Die Zahlenwerte selbst sind nicht so groß, dass es Probleme mit der Umwandlung gäbe, aber mal positiv und mal negativ vom Vorzeichen.

Danke für eure Hilfe


Hallo

hast du es schon mit dem Verschieben mit Move versucht.
 
mit mov wird es nicht gehen, da mir ja das Vorzeichen fehlt, und bei negativen Zahlen wird ja das 2er Komplement gebildet.

Wer weiß noch was??
 
Ich habe gerade keine Sepp7 Kiste am laufen aber bietet SCL nicht von Haus aus ein "REAL_TO_INT" an?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
kennt von euch einer einen Befehl um eine Realzahl 32 Bit in eine 16 Bit intege

Hier mal ein Beispiel:

Code:
L 32.9       // Realzahl
RND          // Zahl 32 Bit Dint
T MW100   // da die Zahl zwischen -32768 bis 32767 liegt
               // kann man sie einfach an ein Merkerword übergeben
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
ich hab mir nen Baustein gebastelt,
der die Zahl überprüft,
ob zu groß oder zu klein.
ist das der Fall, wird der Ausgang ENO=0
Liegt kein Fehler vor,
wird der DINT am Eingang
dem Ausgang als INT zugewiesen
 
Hallo,
Du brauscht keinen extra Befehl.

L MD200
T MW 210

und gut ist...

Begründung
Da MD200 wird im 2er Kompliment dargestellt, d.h. das Vorzeichen steht im höchsten Bit. Beim Wert von -1 sind alle Bits gesetzt. bei -2 Alle bis auf das 1.Bit usw. Sofern Du im Zahlenbereich bleibst -32768 da ist im Int nur das Vorzeichenbit gesetzt und im DINT die obersten 17 Bit gesetzt.

Beispiel

Zahl -1
INT 1111 1111 1111 1111
DINT 1111 1111 1111 1111 1111 1111 1111 1111

Zahl -32768
INT 1000 0000 0000 0000
DINT 1111 1111 1111 1111 1000 0000 0000 0000

ACHTUNG
Daher kann man bei negativen Zahlen nicht einfach aus dem INT ein DINT machen!!!!
 
Zurück
Oben