m厌氧间歇发酵动态控制系统matlab仿真,对比PID控制和MPC控制

1.算法描述

生物发酵过程,其中稀释速率和供料基质浓度可作为操作变量。出口的细胞浓度或生物浓度、基质浓度以及产品浓度是过程的状态变量。例如在生产酒精的发酵过程中,是酵母浓度,是葡萄糖浓度,而是乙醇浓度。假设发酵培养基是单一均相生长的有机体,则广泛采用的非构造化模型较适用于非线性控制器的设计,其模型为



这个连续发酵过程的控制目标是单位时间内生成产品细胞的数量。实际生产中,发酵罐出口物料中,酵母细胞量与基质含量和产品相比可以忽略,故控制目标可表示为



PID控制器,即控制器的控制方式为P比例调整,I积分调整以及D微分调整三个部分构成,PID控制器是目前为止应用最为广泛的控制方式。PID控制器具有结构简单,性能稳定,参数设置简单等优势。PID控制器适用于各种控制对象无法进行测量获得系统参数的情况,其根据控制对象的输出和参考控制变量的输入差进行实时的调整实现对未知参数控制对象的有效控制。PID控制器由比例调整模块,积分调整模块以及微分调整模块三个部分构成,那么其输入的误差信号e(t)与输出u(t)的关系为公式6:



MPC(Model Predictive Control),又称RHC, Receding Horizon Control,是一种进阶过程控制方法,自1980年以来开始在化工炼油等过程工业得到应用,并在经济领域开始得到应用。


MPC是一种多变量控制策略,其中涉及了:


过程内环动态模型;控制量的历史数值;在预测区间上的一个最优值方程J。最优控制量可由以上各量求出。


MPC最大的特点在于,相对于LQR控制而言,MPC可以考虑空间状态变量的各种约束,而LQR,PID等控制只能够考虑输入输出变量的各种约束。


MPC可应用于线性和非线性系统。


  在当今过程控制中,PID当然是用的最多的控制方法,但MPC也超过了10%的占有率。MPC是一个总称,有着各种各样的算法。其动态矩阵控制(DMC)是代表作。DMC采用的是系统的阶跃响应曲线,其突出的特点是解决了约束控制问题。那么是DMC是怎么解决约束的呢?在这里只给出宏观的解释,而不做详细的说明。DMC把线性规划和控制问题结合起来,用线性规划解决输出约束的问题,同时解决了静态最优的问题,一石二鸟,在工业界取得了极大的成功。


  MPC作用机理描述为:在每一个采用时刻,根据获得的当前测量信息,在线求解一个有限时间开环优化问题,并将得到的控制序列的第一个元素作用于被控对象。在下一个采样时刻,重复上述过程:用新的测量值作为此时预测系统未来动态的初始条件,刷新优化问题并重新求解 。

即MPC算法包括三个步骤:

(1)预测系统未来动态;

(2)(数值)求解开环优化问题;

(3)将优化解的第一个元素(或者说第一部分)作用于系统

  这三步是在每个采样时刻重复进行的,且无论采用什么样的模型,每个采样时刻得到的测量值都作为当前时刻预测系统未来动态的初始条件

  在线求解开环优化问题获得开环优化序列是MPC和传统控制方法的主要区别,因为后者通常是离线求解一个反馈控制律,并将得到的反馈控制律一直作用于系统。


2.仿真效果预览

matlab2022a仿真结果如下:



3.MATLAB核心程序

%发酵模型

%已知初始浓度

X0 = 0.0005;

S0 = 0.1;

P0 = 0;



[RX,RS,RP] = model_of_fj(X0,S0,P0);



%采样时间

ts=20

%PID的控制变量

kp=1;

ki=0.05;

kd=0.3;


%原系统离散化

sysc=tf([1],[60 1],'inputdelay',80);

sysd=c2d(sysc,ts,'zoh');

%得到需要的离散系统参数

[num,den]=tfdata(sysd,'v');

%PID仿真参数设定

u1=0;

u2=0;

u3=0;

u4=0;

u5=0;


y1=0;

y2=0;

y3=0;

e1=0;

e2=0;

es=0;

%开始PID仿真

for k=1:500

t(k)=k*ts;

y(k)=-den(2)*y1+num(2)*u5;

r(k)=1;

e(k)=r(k)-y(k);

es=es+e(k)*ts;

%PID Control

u(k)=kp*e(k)+kd*(e(k)-e1)/ts+ki*es;

if u(k)>5

u(k)=5;

elseif u(k)<-5

u(k)=-5;

end

u5=u4;

u4=u3;

u3=u2;

u2=u1;

u1=u(k);


e2=e1;

e1=e(k);

end


%DMC仿真

%建立离散的系统

gmpc=poly2tfd([1],[60 1],0,80);

%系统阶跃响应的时间

tend=20000;

mymodel=tfd2step(tend,ts,1,gmpc);

%MPC参数设定

P=5;

M=3;

ywt=[];

uwt=[1];

rmpc=[1];

%系统的仿真时间设定

tend=10000;

%建立MPC的系数矩阵

mpcM=mpccon(mymodel,ywt,uwt,M,P);

%MPC仿真

[ympc,umpc,ymmpc]=mpcsim(mymodel,mymodel,mpcM,tend,rmpc);

%MPC控制绘图

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容