Collection of models that validate the blocks for autotuning PID controllers
Information
This package contains models that validate the blocks in Buildings.Controls.OBC.Utilities.PIDWIthAutotuning.
Package Content
Name |
Description |
DirectActingPIDWithFirstOrderAMIGO
|
Test model for an autotuning direct-acting PID controller |
DirectActingPIWithFirstOrderAMIGO
|
Test model for an autotuning direct-acting PI controller |
ReverseActingPIDWithFirstOrderAMIGO
|
Test model for an autotuning reverse-acting PID controller |
ReverseActingPIWithFirstOrderAMIGO
|
Test model for an autotuning reverse-acting PI controller |
Test model for an autotuning direct-acting PID controller
Information
Validation test for the block
Buildings.Controls.OBC.Utilities.PIDWithAutotuning.FirstOrderAMIGO.
This example is similar as
Buildings.Controls.OBC.Utilities.PIDWithAutotuning.Validation.ReverseActingPIDWithFirstOrderAMIGO.
However, direct-acting PID controllers are considered.
Modelica definition
model DirectActingPIDWithFirstOrderAMIGO
Buildings.Controls.OBC.CDL.Reals.Sources.Constant SetPoint(k=0.8)
;
Buildings.Controls.OBC.Utilities.PIDWithAutotuning.FirstOrderAMIGO PIDWitTun(
controllerType=Buildings.Controls.OBC.Utilities.PIDWithAutotuning.Types.SimpleController.PID,
yHig=1,
yLow=0,
deaBan=0.1,
yRef=0.8,
reverseActing=false)
;
Buildings.Controls.OBC.CDL.Reals.PIDWithReset PID(
controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID,
k=1,
Ti=0.5,
Td=0.1,
reverseActing=false)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant resSig(k=false)
;
Buildings.Controls.OBC.CDL.Discrete.UnitDelay uniDel2(samplePeriod=240)
;
Buildings.Controls.OBC.CDL.Discrete.UnitDelay uniDel1(samplePeriod=240)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant k(k=10)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T(k=10)
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub1
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub2
;
Buildings.Controls.OBC.CDL.Reals.Derivative derivative1
;
Buildings.Controls.OBC.CDL.Reals.Derivative derivative2
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse autTunSig(
width=0.9,
period=6000,
shift=500)
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub3
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(k=1)
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub4
;
equation
connect(resSig.y, PID.trigger);
connect(SetPoint.y, PID.u_s);
connect(uniDel1.y, sub1.u1);
connect(k.y, derivative1.k);
connect(derivative1.T, T.y);
connect(derivative1.y, sub1.u2);
connect(sub1.y, PID.u_m);
connect(sub2.u1, uniDel2.y);
connect(derivative2.y,sub2. u2);
connect(sub2.y, PIDWitTun.u_m);
connect(derivative2.T, T.y);
connect(derivative1.u, sub1.u1);
connect(derivative2.u, uniDel2.y);
connect(autTunSig.y, PIDWitTun.triTun);
connect(k.y, derivative2.k);
connect(const.y, sub3.u1);
connect(PID.y, sub3.u2);
connect(sub3.y, uniDel1.u);
connect(PIDWitTun.y, sub4.u2);
connect(uniDel2.u, sub4.y);
connect(sub4.u1, const.y);
connect(resSig.y, PIDWitTun.triRes);
connect(SetPoint.y, PIDWitTun.u_s);
end DirectActingPIDWithFirstOrderAMIGO;
Test model for an autotuning direct-acting PI controller
Information
Validation test for the block
Buildings.Controls.OBC.Utilities.PIDWithAutotuning.FirstOrderAMIGO.
This example is similar as
Buildings.Controls.OBC.Utilities.PIDWithAutotuning.Validation.ReverseActingPIWithFirstOrderAMIGO.
However, direct-acting PI controllers are considered.
Modelica definition
model DirectActingPIWithFirstOrderAMIGO
Buildings.Controls.OBC.CDL.Reals.Sources.Constant SetPoint(k=0.8)
;
Buildings.Controls.OBC.Utilities.PIDWithAutotuning.FirstOrderAMIGO PIWitTun(
controllerType=Buildings.Controls.OBC.Utilities.PIDWithAutotuning.Types.SimpleController.PI,
yHig=1,
yLow=0,
deaBan=0.1,
yRef=0.8,
reverseActing=false)
;
Buildings.Controls.OBC.CDL.Reals.PIDWithReset PI(
controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID,
k=1,
Ti=0.5,
Td=0.1,
reverseActing=false)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant resSig(k=false)
;
Buildings.Controls.OBC.CDL.Discrete.UnitDelay uniDel2(samplePeriod=240)
;
Buildings.Controls.OBC.CDL.Discrete.UnitDelay uniDel1(samplePeriod=240)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant k(k=10)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T(k=10)
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub1
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub2
;
Buildings.Controls.OBC.CDL.Reals.Derivative derivative1
;
Buildings.Controls.OBC.CDL.Reals.Derivative derivative2
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse autTunSig(
width=0.9,
period=6000,
shift=500)
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub3
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant const(k=1)
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub4
;
equation
connect(resSig.y, PI.trigger);
connect(SetPoint.y, PI.u_s);
connect(uniDel1.y, sub1.u1);
connect(k.y, derivative1.k);
connect(derivative1.T, T.y);
connect(derivative1.y, sub1.u2);
connect(sub1.y, PI.u_m);
connect(sub2.u1, uniDel2.y);
connect(derivative2.y,sub2. u2);
connect(sub2.y, PIWitTun.u_m);
connect(derivative2.T, T.y);
connect(derivative1.u, sub1.u1);
connect(derivative2.u, uniDel2.y);
connect(autTunSig.y, PIWitTun.triTun);
connect(k.y, derivative2.k);
connect(const.y, sub3.u1);
connect(PI.y, sub3.u2);
connect(sub3.y, uniDel1.u);
connect(PIWitTun.y, sub4.u2);
connect(uniDel2.u, sub4.y);
connect(sub4.u1, const.y);
connect(resSig.y, PIWitTun.triRes);
connect(SetPoint.y, PIWitTun.u_s);
end DirectActingPIWithFirstOrderAMIGO;
Test model for an autotuning reverse-acting PID controller
Information
Validation test for the block
Buildings.Controls.OBC.Utilities.PIDWithAutotuning.FirstOrderAMIGO.
This example compares the output of an autotuning PID controller (PIDWitTun
)
to that of a normal PID controller (PID
) with prescribed gains.
Both PID controllers are connected with a first-order control process.
At the beginning (0s-500s), the outputs from those two PID controllers
are identical as their prescribed gains are the same.
Once the autotuning starts at 500s, the outputs of the two PID controllers
become different.
After the tuning completes, under the control of PIDWitTun
, the value
of the controlled variable
is close to the setpoint after the tuning period ends (PIDWitTun.resPro.triEnd = true
).
On the contrary, PID
has a poor control performance,
i.e., the value of the controlled variable oscillates.
The example also shows that the autotunning process can be re-triggered
when the input triTun
becomes true
.
Modelica definition
model ReverseActingPIDWithFirstOrderAMIGO
Buildings.Controls.OBC.CDL.Reals.Sources.Constant SetPoint(k=0.8)
;
Buildings.Controls.OBC.Utilities.PIDWithAutotuning.FirstOrderAMIGO PIDWitTun(
controllerType=Buildings.Controls.OBC.Utilities.PIDWithAutotuning.Types.SimpleController.PID,
yHig=1,
yLow=0,
deaBan=0.1,
yRef=0.8)
;
Buildings.Controls.OBC.CDL.Reals.PIDWithReset PID(
controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PID,
k=1,
Ti=0.5,
Td=0.1)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant resSig(k=false)
;
Buildings.Controls.OBC.CDL.Discrete.UnitDelay uniDel2(samplePeriod=240)
;
Buildings.Controls.OBC.CDL.Discrete.UnitDelay uniDel1(samplePeriod=240)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant k(k=10)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T(k=10)
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub1
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub2
;
Buildings.Controls.OBC.CDL.Reals.Derivative derivative1
;
Buildings.Controls.OBC.CDL.Reals.Derivative derivative2
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse autTunSig(
width=0.9,
period=6000,
shift=500)
;
equation
connect(resSig.y, PID.trigger);
connect(PIDWitTun.triRes, PID.trigger);
connect(PIDWitTun.u_s, PID.u_s);
connect(SetPoint.y, PID.u_s);
connect(PIDWitTun.y, uniDel2.u);
connect(uniDel1.u, PID.y);
connect(uniDel1.y, sub1.u1);
connect(k.y, derivative1.k);
connect(derivative1.T, T.y);
connect(derivative1.y, sub1.u2);
connect(sub1.y, PID.u_m);
connect(sub2.u1, uniDel2.y);
connect(derivative2.y,sub2. u2);
connect(sub2.y, PIDWitTun.u_m);
connect(derivative2.T, T.y);
connect(derivative2.u, uniDel2.y);
connect(autTunSig.y, PIDWitTun.triTun);
connect(k.y, derivative2.k);
connect(uniDel1.y, derivative1.u);
end ReverseActingPIDWithFirstOrderAMIGO;
Test model for an autotuning reverse-acting PI controller
Information
Validation test for the block
Buildings.Controls.OBC.Utilities.PIDWithAutotuning.FirstOrderAMIGO.
This example is similar as
Buildings.Controls.OBC.Utilities.PIDWithAutotuning.Validation.ReverseActingPIDWithFirstOrderAMIGO.
However, an autotuning PI controller rather than an autotuning PID controller is considered in this example.
Modelica definition
model ReverseActingPIWithFirstOrderAMIGO
Buildings.Controls.OBC.CDL.Reals.Sources.Constant SetPoint(k=0.8)
;
Buildings.Controls.OBC.Utilities.PIDWithAutotuning.FirstOrderAMIGO PIWitTun(
controllerType=Buildings.Controls.OBC.Utilities.PIDWithAutotuning.Types.SimpleController.PI,
yHig=1,
yLow=0,
deaBan=0.1,
yRef=0.8)
;
Buildings.Controls.OBC.CDL.Reals.PIDWithReset PI(
controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI,
k=1,
Ti=0.5,
Td=0.1)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant resSig(k=false)
;
Buildings.Controls.OBC.CDL.Discrete.UnitDelay uniDel1(samplePeriod=240)
;
Buildings.Controls.OBC.CDL.Discrete.UnitDelay uniDel2(samplePeriod=240)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant k(k=10)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T(k=10)
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub1
;
Buildings.Controls.OBC.CDL.Reals.Subtract sub2
;
Buildings.Controls.OBC.CDL.Reals.Derivative derivative1
;
Buildings.Controls.OBC.CDL.Reals.Derivative derivative2
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse autTunSig(
width=0.9,
period=6000,
shift=500)
;
equation
connect(resSig.y, PI.trigger);
connect(PIWitTun.triRes, PI.trigger);
connect(PIWitTun.u_s, PI.u_s);
connect(SetPoint.y, PI.u_s);
connect(PIWitTun.y, uniDel2.u);
connect(uniDel1.u, PI.y);
connect(uniDel1.y, sub1.u1);
connect(k.y, derivative1.k);
connect(derivative1.T, T.y);
connect(derivative1.y, sub1.u2);
connect(sub1.y, PI.u_m);
connect(sub2.u1, uniDel2.y);
connect(derivative2.y,sub2. u2);
connect(sub2.y, PIWitTun.u_m);
connect(derivative2.k, derivative1.k);
connect(derivative2.T, T.y);
connect(derivative1.u, sub1.u1);
connect(derivative2.u, uniDel2.y);
connect(autTunSig.y, PIWitTun.triTun);
end ReverseActingPIWithFirstOrderAMIGO;