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