4/30/2012 4:18 PM | |
Joined: 1/28/2009 Last visit: 8/31/2025 Posts: 6874 Rating:
|
Dear metwally mustafa, What do you mean by "bumpless transfer of the PID controller", Please, explain it a bit more or provide trends or figures. About the reset windup, as far as I know,This problem is solved by PID block developer (for example FB41) and you do not need to worry about.But to know the concept, I recommend reading the following academic book: http://www.amazon.com/PID-Controllers-Theory-Design-Tuning/dp/1556175167 Best regards, Hamid Hosseini |
4/30/2012 5:53 PM | |
Joined: 10/10/2010 Last visit: 7/5/2025 Posts: 309 Rating:
|
thank you i mean the bubmpless transfer from manual to automatic mode
|
4/30/2012 6:10 PM | |
Posts: 559 Rating:
|
Dear metwally mustafa, You have to write your own logic for the bump less transfer. I will give some hints as below: First of all u have to detect signal change at LMNS_ON "Means If this becomes ON then At positive edge u have to transfer LMN value to MAN so the output becomes unchanged." |
4/30/2012 11:29 PM | |
Joined: 4/20/2007 Last visit: 9/1/2025 Posts: 731 Rating:
|
When in AUTO (MAN_ON = 0), transfer LMN output to MAN input. That does the trick :-)
|
5/1/2012 3:51 PM | |
Joined: 1/28/2009 Last visit: 8/31/2025 Posts: 6874 Rating:
|
Dear metwally mustafa, Generally there are some cases that may cause jumps in the LMN of a PID controller.Some of them considered internally but to be sure about all cases, simply use a "Rate Limiter" in the output of the controller. You can search modular PID control package for FB22 (ROCLIM). Check the following thread for more practical notes. Bumpless PID This is my simple solution with limitations discussed in the above mentioned link: FUNCTION_BLOCK FB67 TITLE ='rate limiter' AUTHOR : hdhosseini VERSION : '1.0' // Block Parameters VAR_INPUT // Input Parameters input:REAL; rst:BOOL:=false; step:REAL:=0.1; //100ms call factor:REAL:=1.0; high:REAL:=100; low:REAL:=0; END_VAR VAR_IN_OUT // I/O Parameters first:BOOL:=true; END_VAR VAR_OUTPUT // Output Parameters out:REAL; END_VAR VAR_TEMP // Temporary Variables END_VAR VAR // Static Variables buffer:REAL:=0; in:REAL; END_VAR // Statement Section IF rst=true THEN buffer:=0; //first:=true; out:=0; in:=0; ; ELSE IF first= true THEN buffer:=in; first:=false; END_IF; IF input >= high THEN in:=high; END_IF; IF input <= low THEN in:=low; END_IF; IF (input > low) AND (input<high) THEN in:=input; END_IF; IF in > (buffer+step) THEN buffer:= (buffer+(step* factor)); END_IF; IF in < (buffer-step) THEN buffer:= (buffer-(step*factor)); END_IF; IF in = buffer THEN buffer:=in; END_IF; ; out:= buffer; END_IF; ; END_FUNCTION_BLOCK Hope this helps a bit Hamid Hosseini |
5/1/2012 9:25 PM | |
Joined: 10/10/2010 Last visit: 7/5/2025 Posts: 309 Rating:
|
thank you very much for your time and your effort |
This contribution was helpful to
1 thankful Users |
Follow us on