OSCAT Forum
oscat.lib => Bestehende Module / Existing Modules => Thema gestartet von: Tom am 26. Oktober 2007, 17:52:24
-
Hallo,
ich schon wieder. Der PID-Regler lässt bei mir die PLC auf stop gehen, Fehlermeldung "Division durch 0!". Das Problem scheint im "FT-deriv" zu liegen. Beim ersten Aufruf wird last=tx gesetzt, in der Formel
out := (in - old) / DWORD_TO_REAL(tx - last) * 1000000.0 * K;
ensteht dann durch tx-last eine Division durch 0. Eventuell mit
IF run AND NOT init THEN
die Berechnung beim ersten Aufruf nicht durchführen?
Gruß,
Tom
-
hmm werden wir die nächsten tage ansehen
-
und schon wieder hast du recht.
das problem tritt auch dann auf wenn ein system zykluszeiten < 1ms hat.
es wird selbstverständlich in rev 2.3 korrigiert sein.
-
das problem tritt auch dann auf wenn ein system zykluszeiten < 1ms hat.
Wegen T_PLC_US, da ja im Prinzip 1ms die kleinste Auflösung ist,oder?
Da ist noch etwas: Hab mal bissel mit dem Regler rumgespielt. Ich brauche ein Ausgangssignal mit unterem Limit von 0. Feine Sache, dachte ich, nimmste limit_L, dann brauchste keine externe Beschaltung. Funktioniert leider nicht, da dann bei einem Istwert außerhalb von int_band der Ausgang generell auf 0 geht. Das Problem ist, dass der Integrator korrekt auf 0 gesetzt ist, die Zusammenrechnung der PID-Teile in der ELSE-Verzweigung dadurch aber nicht mehr bearbeitet wird (integ.Out = limit_L).
IF integ.Out >= (limit_H - Offset) / KP THEN
Y := limit_H;
overflow := TRUE;
ELSIF integ.Out <= (limit_L - offset) / KP THEN
Y := limit_L;
overflow := TRUE;
ELSE
Y := KP * (integ.Out + deriv.out + diff) + offset;
overflow := FALSE;
END_IF;
Vielleicht sollte bei IF und ENDIF auch noch int_band abgefragt werden.
Und dann wäre noch persönlicher Wunsch. Betrifft den Baustein "blind_control": Der "blind_actuator" wird ja nicht mehr gebraucht, da vom "blind_control" direkt aufgerufen. Das Problem ist, dass ich die Lockout-Zeit nicht mehr verändern kann. Meine Antriebe sind mit 500ms angegeben. Wäre nicht schlecht, wenn man den Wert im "blind_control" ändern könnte.
Gruß
Tom
-
das mit dem pid regler muss ich mir in aller ruhe ansehen.
der blind control wird die setup variable t_lockout natürlich bekommen.
das mit dem div0 im pid haben wir schon behoben
-
das mit dem pid regler muss ich mir in aller ruhe ansehen.
Nur keine Hektik. Ich frag mich sowieso, wo du die Zeit für so ein Projekt hernimmst.
-
alle sagen immer die zeit ist das problem, ich sage das wollen ist das problem