手动控制与 PID 控制之间的无扰控制转换
此示例展示了从手动控制切换到比例积分微分 (PID) 控制时如何实现无扰控制转移。该模型使用 Simulink® 中的 PID Controller 模块来控制具有死区时间的一阶过程。
open_system('sldemo_bumpless');
使用 Simulink® Control Design™ 提供的 PID 调谐器来调整 PID 控制器,忽略饱和度。
受控对象是具有死区时间的一阶过程,其方程为
.
该示例从开环控制开始,由饱和斜坡信号 Manual signal 指定。开环控制信号 Manual signal 输入到设备模块 First Order Process。工厂模块输出是期望的稳态值 40。
该示例在 t = 150 时实现了控制转移。
开环控制和闭环控制之间的转换涉及两个控制阶段。
手动 - 启动期间饱和斜坡信号输入到工厂模块,直到 t =
150(Control mode=0)。自动 - t = 150(
Control mode=1)之后的 PID 控制必须接管该过程而不会在工厂输入处引入扰动。
从手动控制转换到自动控制期间,转换不应该在控制信号中引入冲击。
配置 PID 控制器
为了支持平稳的控制过渡,PID Controller 模块支持两种操作模式:跟踪和控制。
在控制模式下,PID Controller 模块作为普通 PID 控制器运行。在跟踪模式下,该模块有一个额外的输入,允许 PID 模块通过改变其积分器输出来调整其内部状态。这种变化使得模块输出能够跟踪另一个信号输入。
为了实现无扰控制转移,PID Controller 模块必须位于:
当工厂处于手动控制(开环)时的跟踪模式
设备处于自动控制时的控制模式(闭环 PID 控制)
要激活信号跟踪,请在“模块参数”对话框的初始化选项卡上,选择启用跟踪模式并指定跟踪系数(Kt)。该值就是增益。此增益的倒数是跟踪环的时间常数。有关如何选择增益的更多信息,请参阅[1]。

一旦启用跟踪模式,该模块就会有第二个输入端口 TR。
要查看 PID Controller 模块的封装并了解 TR 端口函数如何运行,请使用此命令。
open_system('sldemo_bumpless/PID Controller','force');

设置切换机制
除了为 PID Controller 模块启用跟踪模式外,该模型还使用 Switch 模块来实现控制转移。Switch 模块确定要输入到工厂的信号以及 PID Controller 模块跟踪端口 TR。
在时间 t = 0 时,Switch 模块将手动控制信号发送到工厂输入和 PID Controller 模块跟踪端口。这允许 PID Controller 模块的输出通过调整 PID 控制器积分在手动阶段跟踪手动控制信号。因此,当发生控制转移时,PID 控制器的输出与手动控制信号大致相同。
在时间 t = 150 时,Switch 模块切换,将 PID Controller 模块输出定向到工厂和 PID Controller 模块跟踪端口。PID Controller 模块跟踪其自己的输出。

要关闭模型,请使用以下命令。
close_system('sldemo_bumpless/PID Controller'); close_system('sldemo_bumpless');
开启跟踪模式进行仿真
仿真无扰控制转移。在这种情况下,跟踪模式处于开启状态。
open_system('sldemo_bumpless'); sim('sldemo_bumpless');
Setpoint 信号和系统响应的图显示,当控制在 t=150 时从手动转换为自动时,Output 信号跟踪 Setpoint 轮廓而没有任何输出波动。
clf;
plot(logsoutBumpless{1}.Values);
grid on;
hold on; %draw on top of previous plot
plot(logsoutBumpless{3}.Values);
title('Comparison of Setpoint vs Measured Output: Tracking Mode on'); %add title to plot
xticks(0:50:600); % set x-axis ticks
ylim([0 50]); % set min and max of y-axis values
legend('Output y(t) ','Setpoint r(t)'); %specify legend
xline( 150, ':','HandleVisibility','off'); %draw a vertical line at 150s
hold off;
关闭跟踪模式进行仿真
在模型 sldemo_bumplessno 中,跟踪模式被禁用。PID Controller 模块没有跟踪输入端口。
close_system('sldemo_bumpless'); open_system('sldemo_bumplessno'); sim('sldemo_bumplessno');

Setpoint 信号和系统响应的图显示,当控制在 t=150 时从手动切换到自动时,Output 信号具有较大的瞬态响应。
%Plot Results clf; plot(logsoutBumplessNo{1}.Values); grid on; hold on; plot(logsoutBumplessNo{3}.Values); title('Comparison of Setpoint vs Measured Output: Tracking Mode off'); xticks(0:50:600); ylim([0 600]); legend('Output y(t) ','Setpoint r(t)'); xline( 150, ':','HandleVisibility','off' ); hold off;

将测量输出与跟踪模式开启和关闭进行比较
下图显示,当跟踪模式开启时,从手动到自动的控制转换更加平稳。
clf;
plot(logsoutBumplessNo{3}.Values(1),'r');
grid on;
hold on;
plot(logsoutBumplessNo{1}.Values(1),'b');
plot(logsoutBumpless{1}.Values(1),'g');
title('Comparison of Measured Outputs ');
xticks(0:50:600);
ylim([0 600]);
legend('Setpoint r(t)','Output y(t), Tracking Mode:off', 'Output y(t), Tracking Mode:on');
yl= ylim;
patch([125 125 200 200],[yl(1) yl(2) yl(2) yl(1)],'k',...
'facecolor',[0.4660 0.6740 0.5880],'edgecolor','none', ...
'facealpha',0.1, 'HandleVisibility','off') ; % draw transparent polygon to highlight a section of plot
hold off;
对于使用 PID Controller 模块的无扰控制,启用跟踪。
参考
[1] Åström, Karl J., and Tore Hägglund. Advanced PID Control. Research Triangle Park, NC: International Society of Automation, 2006.