Hilfe zu Division im FB bei Codesys

nameunbekannt

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

Ich habe einen Funktionsbaustein "Motor" erstellt. Dieser enthält die Berechnung
N:= 5000.0 / Ue... DSC_1765.JPG

Der Motor soll von einem P-Regler gesteuert werden.

Einzeln funktioniert alles. Also der Funktionsbaustein und der P-Regler. Aber sobald ich den Motor in dem PLC Programm an den P- Regler anbinden möchte, kommt eine fehlerfreie Übersetzung aber beim Testen kommt immer Ausnahmezustand und nichts funktioniert. Die Berechnungsformel wird gelb hinterlegt und in der Log File steht dass nicht mit 0 dividiert werden kann.

Nun hab ich mich die ganze Nacht belesen in einigen Threads und im Handbuch von Codesys, hab die Funktion mit Checkdivreal ausprobiert aber immer wieder das Gleiche Ergebnis. Ist der Motor nicht angebunden funktioniert es, sobald ich nur eine Verbindung zum P-Regler ziehe geht nichts mehr.

Ich habe ein ähnliches Projekt mit einem Wärmetauscher ohne jegliche Probleme erstellt und auch dieses Projekt nochmal ganz von vorn angefangen. Ich weiß einfach nicht mehr weiter und hoffe auf Unterstützung.

Liebe Grüße Sindy
 
Hi,
du teilst durch Null.
Die Abfrage Divisor = 0 muss vor der Rechnung stattfinden.
Falls der Divisor = 0 ist darfst du nicht rechnen.
Um Ausnahmefehler in der Applikation ausfindig zu machen sind Implizite Prüfungen
hilfreich.

Gruß Rob
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Tipp: Anstatt
Code:
IF n < 0.0 THEN n := 0.0; END_IF;
IF n > 100.0 THEN n := 100.0; END_IF;
kann man die LIMIT-Funktion verwenden, das ist viel übersichtlicher und man kann sich weniger vertippen:
n := LIMIT(0.0, n, 100.0);

Harald
 
Erstmal danke für die Antworten, dass ich nicht durch 0 teilen kann hab ich auch herausgefunden. Ich hatte dann Ue einen festen Wert zugeteilt. Dann zeigt das Programm zwar keinen Ausnahmefehler mehr an, aber er zeigt kein Ergebnis am Ausgang n an.

Bei anderen Versuchen schreibt das Programm keinen Wert für Ue, selbst wenn man ihn in der Variablenliste fest zuweist.

Sollte ich vielleicht irgendwo was bereinigen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe das Programm für den P-Regler nochmal neu geschrieben und siehe da, es funktioniert auch ohne Checkdivreal. Keine Ahnung wo der Fehler lag. Trotzdem vielen Dank für die schnellen Antworten. 😊
 
Ich meinte z.B.

Code:
IF Ue <> 0.0 THEN
    n1 := 5000.0 / Ue - 1082.0 * ML / (Ue * Ue);
END_IF
 
Zuletzt bearbeitet:
Zurück
Oben