C Control I Unit-M 2.0 BASIC 5 Vdc Inputs / outputs 16 x digital I/Os/8 x analog or digital I/Os/2 x analogue outputs (s 198822 Datenbogen
Produktcode
198822
FLOAT
Wandlung eines Term oder einer Variablen von INTERGER zu FLOAT
Hier sind nahezu alle möglichen Terme zulässig solange man keine Datentypen mischt.
Hier sind nahezu alle möglichen Terme zulässig solange man keine Datentypen mischt.
NICHT ZULÄSSIG (Mischung von Datentypen) Z.B.
MyFloat = MyFloat*FLOAT(MyWord)*MyWord
Führt hier zu falschen Ergebnissen
Führt hier zu falschen Ergebnissen
MyFloat = MyWord
Führt hier zu Stackfehlern und damit zu unvorhersehbarem Verhalten des Programms
Führt hier zu Stackfehlern und damit zu unvorhersehbarem Verhalten des Programms
INTEGER
Wandlung einer Variablen von FlOAT nach INTEGER
Anders ist das bei der Konvertierung von FLOAT nach INTEGER. Hier kann nur eine Variable gewandelt
werden und kein Term.
Anders ist das bei der Konvertierung von FLOAT nach INTEGER. Hier kann nur eine Variable gewandelt
werden und kein Term.
NICHT ZULÄSSIG (Konvertierung eines Terms) Z.B.
MyWord=INT(MyFloat/MyFloat)
MyWord=INT(MyFloat/MyFloat)
FALLEN BEI DER UMWANDLUNG:
Grundsätzlich muss unbedingt darauf geachtet werden, dass der Zahlenbereich der mit einem Wort (oder
Byte) dargestellt werden kann nie überschritten wird. Sehen Sie dazu die Beispiele:
Grundsätzlich muss unbedingt darauf geachtet werden, dass der Zahlenbereich der mit einem Wort (oder
Byte) dargestellt werden kann nie überschritten wird. Sehen Sie dazu die Beispiele:
Variablen:
MyFloat1=50000
MyFloat2=30000
MyWord=1000
MyFloat1=50000
MyFloat2=30000
MyWord=1000
FALL1:
INT_RESULT=INT(MyFloat)
Hier wird einfach nur der Wertebereich eines WORD überschritten
INT_RESULT=INT(MyFloat)
Hier wird einfach nur der Wertebereich eines WORD überschritten
FALL2:
INT_RESULT=INT(MyFloat)/MyWord
Obwohl das Ergebnis (5000) eigentlich nicht zu groß für ein WORD ist, wird der Wertebereich bereits bei der
Umwandlung (noch vor der Division)überschritten
INT_RESULT=INT(MyFloat)/MyWord
Obwohl das Ergebnis (5000) eigentlich nicht zu groß für ein WORD ist, wird der Wertebereich bereits bei der
Umwandlung (noch vor der Division)überschritten
FALL 3:
INT_RESULT=10*INT(MyFloat2)/MyWord
Auch hier würde das Ergebnis in ein Word passen, auch 30000 lässt sich ohne Überlauf in ein WORD
verwandeln. Hier passiert der Überlauf bei der Multiplikation 10*INT(30000) deren Ergebnis zu groß für ein
Word ist.
INT_RESULT=INT(MyFloat2)/MyWord*10 liefert dagegen ein richtiges Ergebnis
INT_RESULT=10*INT(MyFloat2)/MyWord
Auch hier würde das Ergebnis in ein Word passen, auch 30000 lässt sich ohne Überlauf in ein WORD
verwandeln. Hier passiert der Überlauf bei der Multiplikation 10*INT(30000) deren Ergebnis zu groß für ein
Word ist.
INT_RESULT=INT(MyFloat2)/MyWord*10 liefert dagegen ein richtiges Ergebnis
4
MyFloat = FLOAT(MyWord)
MyFloat = MyFloat*FLOAT(MyWord)
MyFloat = MyFloat*FLOAT(MyWord*MyWord)
MyFloat = MyFloat*FLOAT(MyWord*MyByte)
MyFloat = MyFloat*FLOAT(MyWord)
MyFloat = MyFloat*FLOAT(MyWord*MyWord)
MyFloat = MyFloat*FLOAT(MyWord*MyByte)
MyWord = INT(MyFloat)
MyWord = 3*INT(MyFloat)/MyWord
MyByte = 3*INT(MyFloat)/MyWord
MyWord = 3*INT(MyFloat)/MyWord
MyByte = 3*INT(MyFloat)/MyWord