Dumme Frage zu Zykluszeit

Für alles ab Codesys 2.x ist das was du geschrieben hast falsch.
OK, habe dieses Beispiel nicht selber ausprobiert sorry. Es ging mir eher darum auf zu zeigen, was beim Rechnen intern passieren (kann)...

Aber hier ein Beispiel wo es eben nicht klappt, und dass sind dann die richtig miesen Fehler zum suchen: (TwinCAT 2.11)
Code:
rResultat := 1/10;   -> Resultat in der REAL-Variable 'rResultat' ist 0.0
rResultat := 1/10.0  -> Resultat in der REAL-Varibale 'rResultat' ist 0.1

Ich persönlich finde, es gehört zum guten Stil eines Programmieres, die Typen immer selber zu casten...
-> Dann überlegt Mann/Frau sich nämlich, was genau passiert!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OK, habe dieses Beispiel nicht selber ausprobiert sorry. Es ging mir eher darum auf zu zeigen, was beim Rechnen intern passieren (kann)...

Aber hier ein Beispiel wo es eben nicht klappt, und dass sind dann die richtig miesen Fehler zum suchen: (TwinCAT 2.11)
Code:
rResultat := 1/10;   -> Resultat in der REAL-Variable 'rResultat' ist 0.0
rResultat := 1/10.0  -> Resultat in der REAL-Varibale 'rResultat' ist 0.1

Ich persönlich finde, es gehört zum guten Stil eines Programmieres, die Typen immer selber zu casten...
-> Dann überlegt Mann/Frau sich nämlich, was genau passiert!

Was überrascht dich denn an dem Ergebnis?
1 ist eine Ganzzahlkonstante, und 10 ebenfalls. D.h. die Division wird auch auf Ganzzahlen durchgeführt.
Danach erfolgt die Zuweisung auf eine Gleitkommazahl, und genau an diesem Punkt passen die Datentypen nicht mehr zusammen. Dass das Ergebnis automatisch in den anderen Datentyp konvertiert wird ist eine Codesys-Entscheidung, die IEC Norm sieht das überhaupt nicht vor. Ohne diese Konvertierung wäre ein "rResultat := 1;" schon ein Fehler, wenn rResultat vom Datentyp REAL ist.

Guter Stil sind keine sinnlosen Typcasts, sondern gleich die passenden Literale zu verwenden. In deinem zweiten Beispiel: 1.0 / 10.0
 
Zurück
Oben