Hallo geschätzte Roboter-Enthusiasten
Ich erhalte bei meiner Berechnung von REAL Werten ein (falsches) Ergebnis mit vielen Nachkommastellen, das dem erwarteten (richtigen) Ergebnis sehr nahe kommt aber eben nicht 100% richtig ist. Hier mal der Code:
SIGNAL giTcpTorsion $IN[2305] TO $IN[2320]
SIGNAL goTcpTorsion $OUT[2305] TO $OUT[2320]
REAL ANGLE = 0.0
ANGLE=giTcpTorsion ;Wert von SPS liegt immer zwischen 0 und 1799
goTcpTorsion=ANGLE ;Wert wird zurueck gespiegelt
ANGLE=ANGLE/10.0 ;Wert wird durch 10 dividiert um Werte zwischen 0 und 179.9 zu erhalten
if ANGLE > 90 THEN ;falls Wert größer 90
ANGLE=ANGLE-180.0 ;subtrahiere 180 um immer im Wertebereich -90 bis +90 (Grad) zu liegen
endif
Alles anzeigen
Sinn des Ganzen ist, anhand eines von der SPS übergebenen Winkels meinen TCP zu rotieren, und zwar entweder um bis zu +90° oder eben in die andere Richtung.
Ich erhalte nun in der Variablen "ANGLE" seltsame Ergebnisse wie z.B. -0.399993896
Vollständiges Beispiel:
giTcpTorsion zB. = > 1796
ANGLE = 1796
1796 / 10 = 179,6
179,6 - 180.0 = -0,4
In der REAL Variablen steht aber stattdessen -0.399993896
Ebenso charakteristisch für diesen Fehler ist, dass sich die Werte bis auf die neunte Nachkommastelle wiederholen, also bei gleichem Eingangswert das gleiche (falsche) Ergebnis liefern. Weitere Ergebnisse (abhängig vom Wert auf der Schnittstelle) sind z.B.:
-0.500000
-0.100006104
-0.300003052
0.300000
0.600000
-0.800003052
-0.600006104
-0.399993896
-0.699996948
Die negativen Ergebnisse liegen also meistens sehr nah an den richtigen, sind aber eben doch nicht immer ganz korrekt. Die positiven Ergebnisse scheinen immer zu passen...
Das Ganze riecht mir irgendwie nach REAL - INTEGER Konflikt bzw. Rundungsfehler, aber ich verstehe nicht was ich falsch mache...
Kann mir das bitte mal jemand erklären?