Changeset 909 for branches/gui/eml/controllers/PIDIncr.mso
- Timestamp:
- Feb 19, 2010, 7:08:11 PM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/gui/eml/controllers/PIDIncr.mso
r684 r909 37 37 38 38 PID_Select as Switcher (Brief="Type of PID Incremental", Valid=["Ideal","Parallel","Series","Ideal_AWBT","Parallel_AWBT","Series_AWBT","Ideal_AW","Parallel_AW","Series_AW"], Default = "Ideal"); 39 Action 40 Mode 41 Clip 42 43 alpha as positive(Brief="Derivative term filter constant", Default=1);44 beta as positive(Brief="Proportional term setPoint change filter");45 bias 46 derivTime as time_sec 47 intTime as time_sec 48 gain as positive(Brief="Controller gain", Default=0.5);49 gamma as positive 50 tau as time_sec(Brief="Input filter time constant");51 tauSet as time_sec 52 MinInput as control_signal (Default=-1000);39 Action as Switcher (Brief="Controller action", Valid=["Direct","Reverse"], Default = "Reverse"); 40 Mode as Switcher (Brief="Controller mode", Valid=["Automatic","Manual"], Default = "Automatic"); 41 Clip as Switcher (Brief="Controller mode", Valid=["Clipped","Unclipped"], Default = "Clipped"); 42 43 alpha as positive (Brief="Derivative term filter constant", Default=1); 44 beta as positive (Brief="Proportional term setPoint change filter"); 45 bias as control_signal (Brief="Previous scaled bias", Default=0.5); 46 derivTime as time_sec (Brief="Derivative time constant"); 47 intTime as time_sec (Brief="Integral time constant"); 48 gain as positive (Brief="Controller gain", Default=0.5); 49 gamma as positive (Brief="Derivative term SP change filter"); 50 tau as time_sec (Brief="Input filter time constant"); 51 tauSet as time_sec (Brief="Input filter time constant"); 52 MinInput as control_signal (Default=0); 53 53 MaxInput as control_signal (Default=1000); 54 MinOutput as control_signal (Default= -1000);55 MaxOutput as control_signal (Default=1 000);54 MinOutput as control_signal (Default=0); 55 MaxOutput as control_signal (Default=1); 56 56 57 57 VARIABLES 58 58 59 in 60 out Output as control_signal (Protected=true, PosX=0.54, PosY=1);61 SetPoint 59 in Input as control_signal (Protected=true, PosX=0, PosY=0.5); 60 out Output as control_signal (Protected=true, PosX=0.54, PosY=1); 61 SetPoint as control_signal; 62 62 63 63 #++++++++++++++++++++ PID Internal Variables ++++++++++++++++++++++++++++++++ 64 64 PID_dderivTerm as control_signal (Brief="Derivative term",Unit='1/s', Default=0, Hidden=true); 65 PID_dFilt 66 PID_error 67 PID_errorD 68 PID_errorI 69 PID_inputFilt 65 PID_dFilt as control_signal (Brief="Derivative term filtered", Default=0.5,Unit='1/s', Hidden=true); 66 PID_error as control_signal (Brief="Error definition for proportional term",Unit='1/s', Hidden=true); 67 PID_errorD as control_signal (Brief="Error definition for derivative term",Unit='1/s', Hidden=true); 68 PID_errorI as control_signal (Brief="Error definition for integral term", Hidden=true); 69 PID_inputFilt as control_signal (Brief="Filtered input", Hidden=true); 70 70 PID_dintTerm as control_signal (Brief="Integral term", Default=0,Unit='1/s', Hidden=true); 71 PID_doutp 72 PID_outps as control_signal (Brief="Variable outp scaled between -1 and 1", Hidden=true);73 PID_outp 71 PID_doutp as control_signal (Brief="Sum of proportional, integral and derivative terms",Unit='1/s', Hidden=true); 72 PID_outps as control_signal (Brief="Variable outp scaled between -1 and 1", Hidden=true, Default=0.5); 73 PID_outp as control_signal (Brief="Variable outp", Hidden=true); 74 74 PID_dpropTerm as control_signal (Brief="Proportional term", Default=0,Unit='1/s', Hidden=true); 75 75 PID_setPointFilt as control_signal (Brief="Filtered setPoint", Default=0, Hidden=true); 76 PID_input 77 PID_output 76 PID_input as control_signal (Brief="Previous scaled input signal", Default=0.5, Hidden=true); 77 PID_output as control_signal (Brief="Scaled output signal", Default=0.5, Hidden=true); 78 78 PID_setPoint as control_signal (Brief="Scaled setPoint",Default=0.5, Hidden=true); 79 PID_AWFactor as Real 80 PID_action as Real(Hidden=true);79 PID_AWFactor as Real (Brief="Integral term multiplier used in anti-reset windup", Hidden=true); 80 PID_action as Real (Hidden=true); 81 81 #++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++ 82 82 … … 87 87 88 88 "Output " 89 Output = PID_output*(MaxOutput -MinOutput) +MinOutput;89 Output = PID_output*(MaxOutput - MinOutput) + MinOutput; 90 90 91 91 "Set Point " 92 92 PID_setPoint*(MaxInput - MinInput) = SetPoint - MinInput; 93 93 94 if (tau < 1e- 6) then94 if (tau < 1e-3*'s') then 95 95 "Input first order filter" 96 96 (tau + 1e-3*'s')*diff(PID_inputFilt)= PID_input - PID_inputFilt; … … 100 100 end 101 101 102 if (tauSet < 1e- 6) then102 if (tauSet < 1e-3*'s') then 103 103 "setPoint first order filter" 104 104 (tauSet + 1e-3*'s')*diff(PID_setPointFilt)= PID_setPoint - PID_setPointFilt; … … 128 128 PID_dpropTerm=PID_error; 129 129 130 if (derivTime equal 0) then130 if (derivTime < 1e-3*'s') then 131 131 "Derivative term filter" 132 132 alpha*(derivTime + 1e-3*'s')*diff(PID_dFilt) = PID_errorD - PID_dFilt; … … 147 147 switch Clip 148 148 case "Clipped": 149 #if abs(PID_outps)>1 then150 # "Calculate clipped output when it'ssaturated"151 # Ports.output=(sign(PID_outps)*1+1)/2;152 #else153 # "Calculate clipped output when it'snot saturated"154 # Ports.output=PID_outps;155 #end156 PID_output = max([0, PID_outp]);149 if abs(PID_outps)>1 then 150 "Calculate clipped output when saturated" 151 PID_output=(sign(PID_outps)+1)/2; 152 else 153 "Calculate clipped output when not saturated" 154 PID_output=PID_outp; 155 end 156 #PID_output = max([0, PID_outp]); 157 157 case "Unclipped": 158 158 "Calculate unclipped output"
Note: See TracChangeset
for help on using the changeset viewer.