Fehler: Laufzeit-Ausnahmefehler! Division durch Null

ymani

Level-1
Beiträge
99
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich hab ein mal das Projekt geladen an der Steuerung ILC 151 ETH, und ging alles gut

aber irgendwie zeigt mir jetzt ein Fehler ( Fehler: Laufzeit-Ausnahmefehler! Division durch Null ) beim Senden und wird immer die Steuerung jetzt auf Stop gezeigt.

könnte mir jemand bitte Sagen was dieser Fehler ist und wie man beheben kann ??


Danke
 
Moin Aiman,

das kann ja nur passieren, wenn man eine Division hat, bei der der Divisor 0 ist. Da man das ja so eigentlich nicht mit einer festen 0 programmiert :)cool:), ist von einer Variablen auszugehen, die den Wert 0 annehmen kann. Man muss abfangen, das der Wert der Variablen 0 ist, wenn die Division durchgeführt werden soll.
Durchsuch mal Dein Programm nach allen Stellen, wo dividiert wird. Dann jeweils prüfen, ob die Möglichkeit besteht, dass der Divisor 0 sein kann.

VG

MFreiberger
 
Gehe zu der Programmstelle wo der Fehler auftritt, und sorge dafür daß der Divisor nicht mehr 0 ist, besser: nie mehr 0 werden kann.
Vermutlich ist an der Stelle eine Variable (z.B. Einstellwert) verwendet, deren Wert durch das Programm laden mit 0 initialisiert wurde.

Wenn Du magst dann zeige uns mal die Programmstelle.

Harald
 
Das erste und dritte Bild sind jeweils unkritisch.

Das zweite Bild: wenn ME = MA dann kommt es zur Division durch 0 !

Möglicherweise kann man die Formel auch so umformen, daß sie ohne Division auskommt?

Harald
 
danke dir Harald für deine Hilfe

ich weiß nicht ob man umformen kann

also davor gibt es ein Real-Max baustein und sie nimmt die maxmale werte ( im Breich von 30 bis 100) siehe bild bitteaaaaa.PNG
 
Ich kenne die ILC 151 ETH nicht - sagt die nicht genauer, wo der Fehler "Division durch 0" passiert? Kann man nicht zur Fehlerstelle springen?
Wird der AOUT0_20 Baustein mehrmals aufgerufen? Ist bei einem Aufruf ME oder MA mit einer Variable beschaltet?

Harald
 
Ich kenne die ILC 151 ETH nicht - sagt die nicht genauer, wo der Fehler "Division durch 0" passiert? Kann man nicht zur Fehlerstelle springen?
Wird der AOUT0_20 Baustein mehrmals aufgerufen? Ist bei einem Aufruf ME oder MA mit einer Variable beschaltet?

Harald

Nicht unbedingt. Ich habe mal erlebt, wie sich ein Programmierer einen Wolf gesucht hat mit diesem Fehler ( TwinCat 2 mit Visu ).
Ständig kam an der Visu die Meldung "ausgeloggt" SPS-Programm war in Stop und es gab keinen Hinweis wo die Division /0 aufgetreten ist.

Evtl. geht es mit TC3
 
Hallo Harald,

sagt die nicht genauer, wo der Fehler "Division durch 0" passiert?
leider nicht

Kann man nicht zur Fehlerstelle springen?
kann die Steuerung starten nur wenn der Fehler behoben wurde

Wird der AOUT0_20 Baustein mehrmals aufgerufen?
Ja wird schon

Ist bei einem Aufruf ME oder MA mit einer Variable beschaltet?
Ja einmal den Druck und ein Mal den Drehzahl, siehe bild
aa1.png
 
Ist bei einem Aufruf ME oder MA mit einer Variable beschaltet?
Ja einmal den Druck und ein Mal den Drehzahl, siehe bild
[/COLOR]Anhang anzeigen 48527
Schau mal beim oberen Aufruf wie der Wert von mScal_Drehzahl gebildet wird, und sorge dafür daß der nicht 0.0 sein kann. Ist der Wert gerade 0.0? Warum?
Besser wäre noch, wenn in dem Baustein AOUT0_20 generell eine Reaktion programmiert wäre für den Fall daß ME = MA bzw. daß (ME-MA) = 0 ergibt.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Besser wäre noch, wenn in dem Baustein AOUT0_20 generell eine Reaktion programmiert wäre für den Fall daß ME = MA bzw. daß (ME-MA) = 0 ergibt.
Ändere mal in AOUT0_20 die letzte Zeile 7 wie nachfolgend - verschwindet der "Division durch 0"-Fehler dann?
Code:
IF (ME-MA) = 0.0 THEN
   AOUT := 0; 
ELSE 
   AOUT := REAL_TO_WORD(LIMIT_REAL(0.0, ((INP-MA)*AUFL)/(ME-MA) ,AUFL));
END_IF;

Wo ich gerade beim Programmverbessern dabei bin: die Werte für die Auflösung des Analogausgangs sind für mich ziemlich ungewöhnlich - Sind das schnell hingetippselte Ungefähr-Werte oder sind die korrekt so? Welche Werte stehen im Gerätehandbuch der Analogausgangs-Hardware?
Code:
IF IL THEN
   AUFL := [COLOR="#FF0000"]65520.0[/COLOR];
   ELSE
   AUFL := [COLOR="#FF0000"]32760.0[/COLOR];
END_IF;

Harald
 
Hallo Harald,

die werte ja sind für Skalierung korrekt, und ich hab das Programmcode wie du beschrieben hast aber leider immer das gleiche Fehler

Danke danke für deine Hilfe
 
Dann suche weiter nach weiteren Stellen wo dividiert wird.
Vielleicht kann auch der Support von Phoenix Contact helfen bzw. Tipps geben, wie man die Fehlerstelle findet. Ruf da mal an:

PHOENIX CONTACT Deutschland GmbH
Hotline: 05281-946-2888
automation-service@phoenixcontact.com
www.phoenixcontact.de

Harald
 
Zuletzt bearbeitet:
Zurück
Oben