Division durch Null (TIME/UDINT) Problem

blimaa

Level-2
Beiträge
964
Reaktionspunkte
105
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi
Das eine SPS in den Stop geht wenn eine Division durch Null passiert ist mir klar. ABER wiso geht meine SPS in den Stop bei diesem Code? Fehler "Division by Zero".



Code:
var
tonZykluszeitMessen: TON;
ZyklMessTeilezahl: UDINT;
Zykluszeit: TIME;
end_var



//Zykluszeit berechnen
IF NOT (tonZykluszeitMessen.ET = T#0MS) THEN      //Sollte eigentlich Division durch Null verhindern
Zykluszeit:=  tonZykluszeitMessen.ET / ZyklMessTeilezahl;
END_IF  //Ergibt Division by Zero


Hintergrund zum Code: Ich muss die Zykluszeit einer Maschine errechnen, indem ich eine gewisse Zeit alle Teile zähle und ständig Zeit durch Teile rechnen.


Gruss blimaa
 
Vielleicht weil ZyklMessTeilezahl = 0 ist?
Schließlich wird ZyklMessTeilezahl nie ein Wert zugewiesen - oder zeige mal den ganzen Code.

Du könntest ZyklMessTeilezahl bei der Deklaration einen Anfangswert geben:
Code:
ZyklMessTeilezahl: UDINT := 1 ;

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hintergrund zum Code: Ich muss die Zykluszeit einer Maschine errechnen, indem ich eine gewisse Zeit alle Teile zähle und ständig Zeit durch Teile rechnen.
Jetzt erst gelesen...

Du müsstest mal festlegen was für ein Wert als Zykluszeit ausgegeben werden soll, wenn im Messzeitraum 0 Teile gezählt wurden.
Dann den Fall ZyklMessTeilezahl = 0 abfangen und statt der Berechnung den festgelegten Wert für Zykluszeit ausgeben.

Nachtrag: z.B. so
Code:
var
  tonZykluszeitMessen: TON;
  ZyklMessTeilezahl: UDINT;
  Zykluszeit: TIME;
end_var


//Zykluszeit berechnen
IF ZyklMessTeilezahl = 0 THEN
  Zykluszeit:= 0;   // Ersatzwert, wenn keine Teile gezählt wurden
ELSE
  Zykluszeit:= tonZykluszeitMessen.ET / ZyklMessTeilezahl;
END_IF

PS:
Division durch 0 entsteht, wenn durch 0 dividiert wird, aber nicht dadurch wenn der Divident über dem Bruchstrich 0 ist.

Harald
 
Zuletzt bearbeitet:
aaaaaaaaaaaaaa da stand ich ja voll auf dem Schlauch :oops:

Ich muss ja nicht die Zeit (Dividend) auf Null überprüfen sondern die Teileanzahlt (Divisor) bevor ich die Rechnung ausführe :)

Vielen Dank

Gruss blimaa
 
Zurück
Oben