如何在固定时间点后保持PID块的输出信号不变?
How to keep the output signal of a PID block unchanged after a fixed time point?
我用PID控制系统建立了一个流体模型,我想运行我的模型直到达到稳定状态,然后保持PID系统的输出信号不变,这样我就可以做阶跃励磁稳定测试。但是现在我不确定如何在固定时间点后保持PID控制系统的输出信号不变。所以我不得不使用逻辑开关在固定的时间点改变信号源。
我的问题是:
如何让Block Component
的输出信号在固定时间点后保持不变?
我认为 Modelica 标准库中没有合适的块。
但是那个代码能做到吗?
model KeepValueTime
extends Modelica.Blocks.Interfaces.SISO;
parameter Modelica.Units.SI.Time t = Modelica.Constants.inf "Time at which the value shall be kept";
Real u_keep(start=0) "Value to be output when 'keepValue = true'";
equation
if time < t then
y = u;
else
y = u_keep;
end if;
when time >= t then
u_keep = u;
end when;
annotation (uses(Modelica(version="4.0.0")));
end KeepValueTime;
布尔输入更通用一些:
model KeepValue
extends Modelica.Blocks.Interfaces.SISO;
Real u_keep(start=0) "Value to be output when 'keepValue = true'";
Modelica.Blocks.Interfaces.BooleanInput keepValue annotation (Placement(transformation(
extent={{-20,-20},{20,20}},
rotation=0,
origin={-120,80}), iconTransformation(extent={{-140,60},{-100,100}}, rotation=0)));
equation
if not keepValue then
y = u;
else
y = u_keep;
end if;
when keepValue then
u_keep = u;
end when;
annotation (uses(Modelica(version="4.0.0")));
end KeepValue;
快速测试:
...似乎可以满足您的需求:
Markus A. 建议的解决方案的替代方案可能是将控制误差切换为零。如果在系统已经处于稳定状态(零控制误差)时完成切换,这将冻结控制器输出。
我用PID控制系统建立了一个流体模型,我想运行我的模型直到达到稳定状态,然后保持PID系统的输出信号不变,这样我就可以做阶跃励磁稳定测试。但是现在我不确定如何在固定时间点后保持PID控制系统的输出信号不变。所以我不得不使用逻辑开关在固定的时间点改变信号源。
我的问题是:
如何让Block Component
的输出信号在固定时间点后保持不变?
我认为 Modelica 标准库中没有合适的块。
但是那个代码能做到吗?
model KeepValueTime
extends Modelica.Blocks.Interfaces.SISO;
parameter Modelica.Units.SI.Time t = Modelica.Constants.inf "Time at which the value shall be kept";
Real u_keep(start=0) "Value to be output when 'keepValue = true'";
equation
if time < t then
y = u;
else
y = u_keep;
end if;
when time >= t then
u_keep = u;
end when;
annotation (uses(Modelica(version="4.0.0")));
end KeepValueTime;
布尔输入更通用一些:
model KeepValue
extends Modelica.Blocks.Interfaces.SISO;
Real u_keep(start=0) "Value to be output when 'keepValue = true'";
Modelica.Blocks.Interfaces.BooleanInput keepValue annotation (Placement(transformation(
extent={{-20,-20},{20,20}},
rotation=0,
origin={-120,80}), iconTransformation(extent={{-140,60},{-100,100}}, rotation=0)));
equation
if not keepValue then
y = u;
else
y = u_keep;
end if;
when keepValue then
u_keep = u;
end when;
annotation (uses(Modelica(version="4.0.0")));
end KeepValue;
快速测试:
...似乎可以满足您的需求:
Markus A. 建议的解决方案的替代方案可能是将控制误差切换为零。如果在系统已经处于稳定状态(零控制误差)时完成切换,这将冻结控制器输出。