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.
Zitat von: hugo in 29. Oktober 2007, 13:04:58
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
Zitat von: hugo in 30. Oktober 2007, 18:08:45
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