化学反应器的增益控制
这个例子展示了如何设计和调优增益调度控制器,用于从低转换到高转换的化学反应器。有关背景,见Seborg, D.E.等人,“过程动力学与控制”,第二版,2004,Wiley, pp. 34-36。
连续搅拌釜式反应器
这里考虑的是一个连续搅拌釜反应器(CSTR)从低到高转化率(高到低残留浓度)的过渡过程。因为化学反应是放热的(产生热),所以必须控制反应堆的温度以防止热失控。控制任务是复杂的,因为过程动态是非线性的,并且随着转化率的增加从稳定到不稳定再回到稳定。在Simulink中建立了反应堆动力学模型。金宝app控制变量为残留浓度Cr
还有反应堆温度Tr
,操作变量为温度Tc
反应堆冷却夹套中循环的冷却剂。
open_system (“rct_CSTR_OL”)
我们希望剩余浓度从最初的8.57 kmol/m^3降低到2 kmol/m^3。了解过程动态随剩余浓度的变化Cr
,求5个值的平衡条件Cr
在8.57和2之间,线性化每个平衡的过程动态。记录每个平衡点的反应堆和冷却剂温度。
CrEQ = linspace(8.57,2,5)';%浓度TrEQ = 0 (5,1);反应堆温度%TcEQ = 0 (5,1);冷却剂温度%指定配平条件Opspec = operspec(“rct_CSTR_OL”5);为k = 1:5设置所需的残留浓度opspec (k) .Outputs(1)。y = CrEQ(k);opspec (k) .Outputs(1)。已知=真实;结束计算平衡条件并记录相应的温度[op,report] = findop(“rct_CSTR_OL”opspec,...findopOptions (“DisplayReport”,“关闭”));为TrEQ(k) = report(k).Outputs(2).y;TcEQ(k) = op(k). input .u;结束在修剪条件下线性化过程动力学线性化(“rct_CSTR_OL”,“rct_CSTR_OL /装运箱”, op);G.InputName = {Cf的,“助教”,“Tc”};G.OutputName = {“Cr”,“Tr”};
画出平衡状态下反应堆和冷却剂温度与浓度的函数关系。
次要情节(311),情节(CrEQ“b - *”)、网格、标题(的残余浓度), ylabel (“CrEQ”) subplot(312), plot(TrEQ),“b - *”)、网格、标题(“反应堆温度”), ylabel (“TrEQ”)子地块(313),地块(TcEQ,“b - *”)、网格、标题(冷却液温度的), ylabel (“TcEQ”)
开环控制策略包括遵循上面的冷却液温度分布,以平稳过渡Cr
= 8.57,Cr
= 2平衡。然而,这种策略是注定的,因为反应在中期是不稳定的,必须适当冷却以避免热失控。这可以通过检查上述五个平衡点的线性化模型的极点来证实(五个模型中有三个是不稳定的)。
极(G)
Ans (:,:,1) = -0.5225 + 0.0000i -0.8952 + 0.0000i Ans (:,:,2) = 0.1733 + 0.0000i -0.8866 + 0.0000i Ans (:,:,3) = 0.5114 + 0.0000i -0.8229 + 0.0000i Ans (:,:,4) = 0.0453 + 0.0000i -0.4991 + 0.0000i Ans (:,:,5) = -1.1077 + 1.0901i -1.1077 - 1.0901i
Bode图进一步强调了植物动态在从Cr
= 8.57Cr
= 2。
波德(G (clf:,“Tc”), {0.01, 10})
反馈控制策略
为了防止热失控,同时降低残余浓度,使用反馈控制来调整冷却剂温度Tc
基于残余浓度的测量Cr
以及反应堆温度Tr
.对于这种应用,我们使用级联控制架构,其中内环调节反应器温度,外环跟踪浓度设定值。两个反馈回路都是数字的,采样周期为0.5分钟。
open_system (“rct_CSTR”)
目标浓度Cref
从t=10时的8.57 kmol/m^3下降到t=36时的2 kmol/m^3(过渡持续26分钟)。对应的配置文件不可食用的
对于反应器温度是通过插值平衡值得到的TrEQ
从修剪分析。控制器计算冷却液温度调整直接转矩
相对于初始均衡值TcEQ (1)
= 297.98Cr
= 8.57。请注意,模型的设置使得最初的输出TrSP
的“浓度控制器”块匹配反应器温度,进行调节直接转矩
是零,而冷却剂温度呢Tc
在它的均衡值TcEQ (1)
.
CLF t = [0 10:36 45];C = interp1([0 10 36 45],[8.57 8.57 2 2],t);subplot(211), plot(t,C), grid, set(gca,“ylim”,[0 10])“目标残留浓度”), ylabel (“Cref”) subplot(212), plot(t,interp1(CrEQ,TrEQ,C))“相应的反应堆平衡温度”), ylabel (“不洁净的”)、网格
控制目标
使用TuningGoal
对象来捕获设计需求。首先,Cr
应该遵循设定值Cref
响应时间约为5分钟。
R1 = TuningGoal。跟踪(“Cref”,“Cr”5);
内环(温度)应以足够的阻尼和足够快的衰减来稳定反应动力学。
MinDecay = 0.2;MinDamping = 0.5;在外环打开时约束内环闭环极点R2 = TuningGoal。波兰人(“Tc”、MinDecay MinDamping);R2。机会=“TrSP”;
控制器输出端的速率限制块指定冷却剂温度Tc
每分钟变化不能超过10度。这是对控制器权限的严重限制,如果忽略这一点,可能会导致性能不佳或不稳定。要考虑这个速率限制,请注意Cref
变化速率为0.25 kmol/m^3/min。为了确保Tc
变化不大于10度/分钟,增益从Cref
来Tc
应小于10/0.25=40。
R3 = TuningGoal。获得(“Cref”,“Tc”, 40);
最后,要求至少7 dB的增益裕度和45度的相位裕度在植物输入Tc
.
R4 = TuningGoal。利润(“Tc”7、45);
Gain-Scheduled控制器
为了达到这些要求,我们在外部回路中使用PI控制器,在内部回路中使用导联补偿器。由于采样速率较慢,需要使用导联补偿器来充分稳定中等浓度的化学反应Cr
= 5.28 kmol/m^3/min。由于反应动力学随浓度变化很大,我们进一步调度控制器增益作为浓度的函数。这是在Simulink中使用Looku金宝appp Table块建模的,如图1和2所示。
图1:集中回路的增益调度PI控制器。
图2:温度回路的增益计划导联补偿器。
调优这个增益调度控制器相当于调优一个浓度值范围内的查找表数据。与其调优单独的查找表项,不如将控制器增益参数化Kp, Ki, Kt, a, b
作为二次多项式Cr
,例如,
除了减少要调优的变量数量外,这种方法还确保了平滑的增益过渡Cr
各不相同。使用systune
,您可以自动调整系数满足要求R1-R4
在上面计算的五个平衡点上。这相当于调谐增益调度控制器在五个设计点沿Cref
轨迹。使用tunableSurface
对象将每个增益参数化为的二次函数Cr
.“调优网格”设置为五个浓度CrEQ
二次参数化的基函数是.大多数增益初始化为相同的零。
TuningGrid = struct(“Cr”, CrEQ);ShapeFcn = @(Cr) [Cr, Cr^2];Kp =可调谐表面(“金伯利进程”, 0, TuningGrid, ShapeFcn);Ki =可调谐表面(“吻”, -2, TuningGrid, ShapeFcn);Kt =可调谐表面(“Kt”, 0, TuningGrid, ShapeFcn);a = tunablessurface (“一个”, 0, TuningGrid, ShapeFcn);b = tunableSurface(“b”, 0, TuningGrid, ShapeFcn);
控制器调优
由于目标带宽在奈奎斯特频率的十年内,因此更容易在离散域直接调优控制器。以0.5分钟的采样时间离散线性化的过程动态。使用ZOH方法来反映数字控制器如何与连续时间装置相互作用。
Ts = 0.5;Gd = c2d(G,Ts);
创建一个slTuner
用于调优上面介绍的二次增益调度的接口。采用块替换的方法,用五个离散线性模型代替非线性植物模型Gd
在设计点处获得CrEQ
.使用setBlockParam
关联可调增益函数Kp
,Ki
,Kt
,一个
,b
使用同名的查找表块。
BlockSubs = struct(“名字”,“rct_CSTR /装运箱”,“价值”、Gd);ST0 = slTuner(“rct_CSTR”, {“金伯利进程”,“吻”,“Kt”,“一个”,“b”}, BlockSubs);ST0。Ts = Ts;%采样时间用于调优记录兴趣点ST0.addPoint ({“Cref”,“Cr”,“Tr”,“TrSP”,“Tc”})参数化查找表块ST0.setBlockParam (“金伯利进程”Kp);ST0.setBlockParam (“吻”、Ki);ST0.setBlockParam (“Kt”、Kt);ST0.setBlockParam (“一个”,);ST0.setBlockParam (“b”, b);
您现在可以使用systune
根据要求调整控制器系数R1-R4
.将稳定裕度要求作为硬约束条件,对剩余要求进行优化。
ST = systune(ST0,[R1 R2 R3],R4);
最终:软= 1.23,硬= 0.99997,迭代= 193
结果设计满足硬约束(硬< 1
),并基本满足余下的要求(软
接近1)。为了验证该设计,模拟对浓度斜坡的响应,坡度与Cref
.每个图显示了五个设计点的线性响应CrEQ
.
t = 0:Ts:20;uC = interp1([0 25 20],(-0.25)*[0 0 3 3],t);次要情节(211),lsim (getIOTransfer(圣,“Cref”,“Cr”),uC)网格,集合(gca,“ylim”,[-1.5 0.5]),标题(的残余浓度) subplot(212), lsim(getIOTransfer(ST,“Cref”,“Tc”),uC)网格,标题(“冷却剂温度变化”)
请注意,冷却剂温度的变化率保持在物理范围内(每分钟10度或每个采样周期5度)。
控制器验证
检查每个增益是如何变化的Cr
在过渡期间。
访问调优增益计划TGS = getBlockParam(ST);%图增益剖面clf subplot(321), viewSurf(TGS.Kp), ylabel(“金伯利进程”) subplot(322), viewSurf(TGS.Ki), ylabel(“吻”) subplot(323), viewSurf(TGS.Kt), ylabel(“Kt”) subplot(324), viewSurf(TGS.a), ylabel(“一个”) subplot(325), viewSurf(TGS.b), ylabel(“b”)
要在Simulink中验证增益调度控制器,首先使用金宝appwriteBlockValue
将调优结果应用于Simulink模型。金宝app对于每个Lookup Table块,它在表断点处计算相应的二次增益公式,并相应地更新表数据。
writeBlockValue (ST)
接下来按下播放按钮,用调优的增益计划模拟响应。仿真结果如图3所示。增益调度控制器成功地通过过渡驱动反应,具有足够的响应时间和没有饱和的速率限制(控制器输出杜
匹配有效温度变化直接转矩
).反应堆温度保持在其平衡值附近不可食用的
,表明该控制器在防止热失控的同时保持反应接近平衡。
图3:带增益计划级联控制器的转换。
MATLAB控制器调优
或者,您可以直接在MATLAB中调优增益计划,而不使用slTuner
接口。首先参数化增益为的二次函数Cr
如上所述。
TuningGrid = struct(“Cr”, CrEQ);ShapeFcn = @(Cr) [Cr, Cr^2];Kp =可调谐表面(“金伯利进程”, 0, TuningGrid, ShapeFcn);Ki =可调谐表面(“吻”, -2, TuningGrid, ShapeFcn);Kt =可调谐表面(“Kt”, 0, TuningGrid, ShapeFcn);a = tunablessurface (“一个”, 0, TuningGrid, ShapeFcn);b = tunableSurface(“b”, 0, TuningGrid, ShapeFcn);
利用这些增益来构建PI和前导控制器。
PI = pid(Kp,Ki,“t”Ts,“TimeUnit”,“最小值”);π。u =ECr的;π。y =“TrSP”;铅= Kt * tf([1 -a],[1 -b],Ts,“TimeUnit”,“最小值”);引领u =“ETr”;引领y =“Tc”;
使用连接
建立了5个设计点整体控制系统的闭环模型。标记控制器输出TrSP
而且Tc
作为“分析点”,这样就可以打开循环,并在这些位置评估稳定裕度。闭环模型T0
线性模型的5 × 1数组取决于的可调系数吗Kp, Ki, Kt, a, b
.每个模型都是离散的,每半分钟采样一次。
Gd。TimeUnit =“最小值”;S1 = sumblk('ECr = Cref - Cr');S2 = sumblk('ETr = TrSP - Tr');T0 = connect(Gd(:,“Tc”)、铅、π,S1, S2,“Cref”,“Cr”, {“TrSP”,“Tc”});
最后,使用systune
调整增益计划系数。
T = systune(T0,[R1 R2 R3],R4);
最终:软= 1.23,硬= 0.9999,迭代= 198
结果与上面得到的结果相似。通过绘制增益的函数来确认Cr
使用调谐系数T
.
clf subplot(321), viewSurf(setBlockValue(Kp,T)), ylabel(“金伯利进程”) subplot(322), viewSurf(setBlockValue(Ki,T)), ylabel(“吻”) subplot(323), viewSurf(setBlockValue(Kt,T)), ylabel(“Kt”) subplot(324), viewSurf(setBlockValue(a,T)), ylabel(“一个”) subplot(325), viewSurf(setBlockValue(b,T)), ylabel(“b”)
您可以通过模拟每个设计点的线性响应来进一步验证设计。但是,您需要返回到Simulink来模拟增益调度控制器的非线性金宝app响应。
另请参阅
slTuner
|tunableSurface
|setBlockParam