Real_to_word

RobiHerb

Level-2
Beiträge
679
Reaktionspunkte
113
Zuviel Werbung?
-> Hier kostenlos registrieren
CoDeSys 2.x:

Ich habe den Verdacht, REAL_TO_WORD für negative Werte führt zur Katastrophe = PLC Crash.

Habt Ihr das auch schon erlebt?

Natürlich sollte es nicht vorkommen aber shit happens: Bei mir scheint ein Neigungssensor zu spinnen, über den Winkel wird ein COS berechnet, der plötzlich (eigentlich von der Mechanik unmöglich) dann jenseits 90° negativ wird.
 
Hallo,hab´s gerade mal getestet (IndraWorks-ist ja auch Codesys), da funktioniert es.
kein Crash.
Frag doch den Real-Wert auf kleiner 0 / Negativ ab, so dass bei Negativ nur 0 auf das Word geschrieben wird!?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke,

gibt es noch weitere Leute, die das mal testen an anderer Hardware. Das Problem tritt nicht auf dem PC in der Simulation auf.

Ich habe es jetzt real auf der Hardware getestet, der Typecast liefert einen Crash, dann springt der Watchdog an etc.
 
so etwas zum Beispiel: #81: Access violation in "Access violation Task=PLC_PRG_TASK".
Zum Beispiel. Access Violation hört sich aber eher nach einem wildgewordenen Zeiger an.
"Crash" kann ja alles mögliche sein, darum würde mich die konkrete Fehlermeldung inetressieren.
Dass bei der Konvertierung von einem größeren vorzeichenbehafteten Datentyp in einen kleineren ohne VZ allerhand schiefgehen klar ist einleuchtend. Die Frage ist nur in wieweit das Betriebssystem der SPS sowas abfängt.
Bei Aufruf von real-to-word mit einem negativen Wert einfach so mit dem Programm fortzusetzen wäre genauso falsch wie ein CPU-Stop. Wegen solchen Fehlern sind schon Raketen abgestürzt.
 
Welche Hardware

bei mir geht es wunderbar....;)

MfG CAS

Interessant wäre, welche Hardware, welch CoDeSys Version. Es passiert bei mir nur auf der realen Hardware, nicht in der Simulation.

Was ist der Crash hier? CAN Bus Kommunikation reisst offentsichtlich ab und es findet ein Hardware Reset über das Nodeguarding statt.

Es scheint, dass das Programm total in den Wald geht.
 
bei mir geht es wunderbar....;)
Wie geht es denn??
Ich bin gespannt was deiner Meinung nach der richtige Wert in der Word-Variable ist, wenn der Real-Wert z.B. -1.0 beträgt

Siemens ist in seiner SCL Beschreibung genauer, und schreibt dass bei Wertüberschreitung das Ergebnis der Funktionen undefiniert ist. Beckhoff schreibt bei Twincat lieber garkeine Details. Vielleicht sollte man die Frage mal im Codesys Forum stellen um zu sehen welches Verhalten sich die Entwickler dabei gedacht haben.
 
REAL_TO_WORD(-1.0) ergibt bei TwinCat auf einem x86 65535, das passt schon. Über Sinn und Unsinn mancher möglichen Umwandlungen kann man sich aber schon streiten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
REAL_TO_WORD(-1.0) ergibt bei TwinCat auf einem x86 65535, das passt schon. Über Sinn und Unsinn mancher möglichen Umwandlungen kann man sich aber schon streiten.

Also 'passt schon' würde ich das nicht nennen. Mal angenommen man hat einen FU welcher als Drehzahlsollwert einen WORD-Wert von 0..65535 für Stillstand bis Max-Frequenz annimmt. Jetzt wird vorher eine Stellgröße in Real-Format berechnet, und dieser Motor soll quasi 'mehr als stehen' und darum kommt aus irgendeinem Grund -1 heraus. Wegen der Konvertierung gibt der Motor aber Vollgas - passt schon?

Ist zwar konstruiert, aber 65535 passt genauso wie 4711 oder 42, es ist einfach alles falsch.
 
also mein funktioniert beruht sich darauf, das der Rechner nicht abkac...

Die Wert sind so wie oben beschrieben.

MfG CAS
 
REAL_TO_WORD(-1.0) ergibt bei TwinCat auf einem x86 65535, das passt schon. Über Sinn und Unsinn mancher möglichen Umwandlungen kann man sich aber schon streiten.

Das ist aber in gewisser Weise konsequent. Man sollte schon wissen was man macht. Der Real-Wert wird in einen Integer konvertiert und dabei wird das 2er Komplement angwendet. Weil aber Word unsigned ist, wird der vorzeichenbehaftete Integerwert als -(2^16-1) gesehen.

Wer also eine vorzeichenbehaftete Grösse in eine solche Funktion gibt, sollte vorher nachdenken.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das ist aber in gewisser Weise konsequent. Man sollte schon wissen was man macht. Der Real-Wert wird in einen Integer konvertiert und dabei wird das 2er Komplement angwendet. Weil aber Word unsigned ist, wird der vorzeichenbehaftete Integerwert als -(2^16-1) gesehen.

Wer also eine vorzeichenbehaftete Grösse in eine solche Funktion gibt, sollte vorher nachdenken.

Genau das meinte ich mit "passt schon". Etwas Sinnvolles kann nun mal nicht dabei herauskommen.
 
Zurück
Oben