Abfangen von Fehlern ?

Begonnen von klaus313, 01. Oktober 2007, 08:31:47

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

klaus313

Hi Tobias, Hi Hugo,

ich habe das Problem, dass bei mir TWINCAT mehrmals schon den Dienst versagt hat (meistenes mitten in der Nacht). Aufgrund der Zeit
hatte ich nie die Möglichkeit dies genau zu Untersuchen. Nun hab ich festgestellt das TWINCAT einen FPU error angezeigt hat. (leider konnt ich keinen Screenshoot machen). Habt ihr bedacht das z.B im Fehlerfall eine DIV durch Null abgefangen wird ?
Der Fehler trat in der Funktion day_of_month() bei "IF yr MOD 4 = 0 THEN" auf. Zumindest war diese Zeile rot unterlegt.

habt ihr eine Idee ?

Danke
Klaus

hugo

nun den div by 0 koennen wir uns nicht erklären bei einem gültigen datum am eingang dürfte das nicht vorkommen.
jedoch haben wir bei unseren tests heute einen fehler gefunden. bei einigen jahren hat die funktion eine 0 geliefert obwohl schon der 1.1.1982 war.
wir haben dies bereits korrigiert und die funktion nauch so umgeschrieben das ein div by 0 gar nicht mehr vorkommen kann.
die 2.1 wird die korrigierte version enthaltten.

klaus313

hab den Fehler heute wieder gehabt. TWINCAT Error: "FPU DIV by NULL" !! . Leider weiss ich nicht was ich mit den sonstigen Daten im Logfile anfangen kann. Hab dann mal alle Module, die ich verwende, durchgeschaut. In die Beckhoff FB hab ich leider keinen Einblick. DIV durch eine Variable kommt eigentlich nur bei der Sonnenstandsberechnung und bei ModR vor.
Nun hab ich mal alle Divisionen abgefangen und will mal schauen, ob der Fehler wieder auftritt
Desweiteren ist mir aufgefallen, dass beim Modul "modR" auf "=0" abgefragt wird, was eigenlich bei "REAL" nicht gemacht werden sollte, oder? hab ich mal so gelernt ...?

hugo

nach wie vor kann bei modr ein div0 fehler gar nicht vorkommen weil genau dies abgefangen wird durch das statement if divi = 0 .... !
natuerlich kann man auch bei real auf null abfragen, genau dasd tun wir um eine division durch null zu vermeiden.
divide by 0 error kannst du in jedem standard baustein wie div und vielen anderen bekommen. grundsätzlich werden solche mathematische errors nicht abgefangen, der anwender muss sicherstellen das er eben nicht durch null tielt. das kann also schon in einigen bausteinen sein z.b. sollten time inputs niemals null sein.

z.b. kann year mod 4 niemals einen div 0 fehler liefern, denn das ergebniss einer beliebigen dicision / 4 also auch x mod 4 ist für alle x definiert.

dein fehler liegt also wahrscheinlich ganz wo anders.

kannst du dein projekt posten dann koennen wir es mal ansehen