主要内容

汽包锅炉压力调节

本例展示了如何使用Simulink®Control Design™软件,以汽包锅炉为例应用程序。利用工作点搜索函数,实例说明了模型线性化以及后续的状态观测器和LQR设计。在这个鼓式锅炉模型中,控制问题是在面对来自炉的随机热量波动时,通过调节给水流量和额定应用热量来调节锅炉压力。在这个例子中,95%的随机热波动小于标称热值的50%,这对于炉燃锅炉来说是很正常的。

打开模型

打开Simulink模型。

mdl =“Boiler_Demo”;open_system (mdl)

当你打开锅炉控制模型时,软件初始化控制器的尺寸。情况而且y0是在工作点计算之后设置的,因此初始设置为零。观测器和调节器在控制器设计阶段进行计算,并且初始值也设为零。

找到标称工作点并线性化模型

模型初始状态值在Simulink模型中定义。使用这些状态值,找到稳态工作点findop函数。

创建一个已知状态值的操作点规范。

Opspec = operspec(mdl);opspec.States(1)。已知= 1;opspec.States(2)。已知= 1;opspec.States(3)。已知= [1;1];

调整工作点规范,以指示必须计算输入,并且它们是下界的。

opspec.Inputs(1)。已知= [0;0];未知输入opspec.Inputs(1)。Min = [0;0];输入最小值

将输出规范添加到工作点规范;这是必要的,以确保在求解过程中计算输出工作点。

Opspec = addoutputspec(Opspec,[mdl .' /锅炉'), 1);opspec.Outputs(1)。已知= 0;%未知输出opspec.Outputs(1)。Min = 0;输出最小值

计算工作点,并生成工作点搜索报告。

[opSS,opReport] = findop(mdl,opspec);
工作点搜索报告:--------------------------------- opreport = Model Boiler_Demo的工作点搜索报告。(time - varying Components evaluate at time t=0)满足工作点规格。州 : ---------- 最小x最大dxMin dx dxMax  ___________ ___________ ___________ ___________ ___________ ___________ ( 1)。Boiler_Demo/锅炉/蒸汽体积5.6 5.6 5.6 0 7.8501e-13 0 (2.)Boiler_Demo/锅炉/温度180 180 180 0 -5.9262e-14 0 (3.)Boiler_Demo /观察者/内部0 0 0 0 0 0 0 0 0 0 0 0输入 : ---------- 最小u最大  ___________ ___________ ___________ ( 1)。Boiler_Demo /输入0 241069.0782正0 100.1327正输出 : ---------- 最小y最大  ________ ________ ________ ( 1)。Boiler_Demo/Boiler 0 1002.381 Inf

在围绕这一点线性化模型之前,请指定线性模型的输入和输出信号。首先,指定线性化的输入点。

Boiler_io(1) = linio([mdl ./笔的), 1“输入”);Boiler_io(2) = linio([mdl .' /多路分配器'), 2,“输入”);

接下来,指定线性化的开环输出点。

Boiler_io(3) = linio([mdl .' /锅炉'), 1“openoutput”);setlinio (mdl Boiler_io);

求所选工作点周围的线性模型。

Lin_Boiler =线性化(mdl,opSS,Boiler_io);

最后,使用minreal函数,确保模型是最小实现。

Lin_Boiler = minreal;
移除了1个状态。

设计调节器和状态观测器

利用该线性模型,设计了LQR调节器和卡尔曼滤波状态观测器。首先,通过检索计算出的工作点,找到控制器偏移量,以确保控制器在选定的线性化点周围工作。

u0 = opreport . input .u;y0 = opReport.Outputs.y;

现在,设计调节器使用lqry函数。需要严格调节输出,同时限制输入变化。

Q = diag(1e8);输出调节R = diag([1e2,1e6]);%输入限制[K,S,E] = lqry(Lin_Boiler,Q,R);

设计了卡尔曼状态观测器卡尔曼函数。在本例中,主要噪声源是过程噪声。噪声只通过一个输入进入系统,因此形成G而且H

[A,B,C,D] = ssdata(Lin_Boiler);G = b (:,1);H = 0;QN = 1e4;RN = 1e-1;Nn = 0;[Kobsv,L,P] = kalman(ss(A,[B G],C,[D H]),QN,RN);

模拟模型

对所设计的控制器进行模型仿真。

sim (mdl)

绘制流程输入和输出信号。下图为给水驱动信号,单位为kg/s。

情节(FeedWater.time / 60, FeedWater.signals.values)标题(“给水流速[kg/s]”);ylabel (“流(公斤/ s)”)包含(的时间(分钟)网格)

下图显示了kJ中的热驱动信号。

情节(Heat.time / 60, Heat.signals.values / 1000)标题(“施加的热量[kJ]”);ylabel (“热(kJ)”)包含(的时间(分钟)网格)

下一张图显示了kJ中的热扰动。扰动的变化幅度可达标称热值的50%。

情节(HeatDist.time / 60, HeatDist.signals.values / 1000)标题(“热干扰[kJ]”);ylabel (“热(kJ)”)包含(的时间(分钟)网格)

下图为对应的鼓压,单位为kPa。即使扰动相对较大,压力也会变化约为标称值的1%。

情节(DrumPressure.time / 60, DrumPressure.signals.values)标题('鼓压[kPa]');ylabel (“压力(kPa)”)包含(的时间(分钟)网格)bdclose (mdl)

另请参阅

|||

相关的话题

Baidu
map