Warum treten im generierten TwinCAT-Modul zur Laufzeit FPU/SSE exceptions auf, aber nicht im Simulink-Modell?

Simulink behandelt in den Standardeinstellungen floating point exceptions ggf. anders als TwinCAT 3.

Um das Verhalten bei floating point exceptions zwischen Simulink und TwinCAT anzugleichen, können Sie unter Model Configuration Parameters in Simulink im Abschnitt Diagnostics >Data Validity in der Box Signals wählen:

Um eine SSE exception in TwinCAT zu debuggen nutzen Sie bitte den C++ debugger, siehe dazu den Bereich Debuggen in der TE1400 Dokumentation. Unter der Voraussetzung, dass Sie ihr Modell als „debug“ Modul gebaut haben und bei aktivierterm C++ debugger, genügt es auch sich nach dem Start von TwinCAT zum Prozess zu attachen, falls bereits in den ersten Zyklen die Exception auftritt. Häufig tritt die SSE exception direkt im ersten Zyklus auf. Hier kommt es schnell zu einer Division durch Null, wenn bestimmte Signale mit Null initialisiert werden.
Eine weitere Möglichkeit den SSE exceptions zu begegnen ist das Deaktivieren von floating point exceptions. Diese können im System Manager unter Tasks ausgeschaltet werden (Deaktivierung der Checkbox floating point exceptions). Entsprechend gilt diese Einstellung dann für alle Module, die durch diese Task angesprochen werden. Bei Auftreten einer exception wird dann ein NaN erzeugt und kein Fehler ausgegeben.

Hinweis

Deaktivierung von floating point excpetions

NaN-Werte dürfen in anderen SPS-Bibliotheken, insbesondere als Stellwerte in Funktionen für Motion Control und zur Antriebssteuerung, nur verwendet werden, wenn sie ausdrücklich zugelassen sind! Anderenfalls können NaN-Werte zu potenziell gefährlichen Fehlfunktionen führen!