主要内容

非绝热的连续搅拌釜反应器:MATLAB文件建模与模拟仿真软件®金宝app

这个例子展示了如何在动态仿真模块包括模拟一个IDNLGREY模型®。金宝app我们使用化学反应系统的建模基础。第一个建模和识别的一部分没有仿真软件可以运行示例。金宝app

建模非绝热的连续搅拌釜反应器

过程中遇到的一个相当常见的化学系统行业不断搅拌釜反应器(装运箱)。这里,我们将研究一个夹套传热(即。,non-adiabatic) tank reactor described extensively in Bequette's book "Process Dynamics: Modeling, Analysis and Simulation", published by Prentice-Hall, 1998. The vessel is assumed to be perfectly mixed, and a single first-order exothermic and irreversible reaction, A --> B, takes place. A schematic diagram of the vessel and the surrounding cooling jacket is shown in a plot window. Notice that this is a sketch; in reality the coolant flow is, e.g., normally surrounding the whole reactor jacket, and not just the bottom of it.

图1:装运箱的原理图。

装运箱的模型需要更先进的控制方法。进口的试剂是美联储以恒定速率f .搅拌后,最终产品流的船以同样的速度作为美联储到试剂柜(体积V在反应堆槽从而保持不变)。控制策略要求u_3夹克温度(t)是操纵为了保持试剂的浓度y_1 (t)在所需的水平,尽管干扰引起的进口原料流浓度和温度(输入u_1 (t)和u_2 (t))。作为坦克y_2温度(t)有很大的差别在反应堆运行期间,它也希望确保这个过程变量保持在合理的范围之内。

对装运箱建模

装运箱系统建模使用基本会计和节能的原则。试剂的浓度的变化在每个时间单位d C_A船(t) / dt (= d y_1 (t) / dt)可以建模为:

d C_A (t) - - - - - - - - - - = F / V * (C_Af (t) -C_A (t) - r (t) dt

在第一项表示浓度变化由于试剂的浓度差异在入口流和容器,第二项表示浓度变化(反应速率),由于发生化学反应的容器。阿伦尼乌斯描述的反应速率是单位体积率法:

r (t) = k_0 * exp (e / (r * t (t))) * C_A (t)

即化学反应的速率与绝对温度成指数增加。k_0未知非热能的常数,E是活化能,玻尔兹曼理想气体常数R和T (T) (= y_2 (T)反应堆的温度。

同样,利用能量平衡原理在反应堆(假设恒定体积),每个时间单位温度变化d T (T) / dt的反应堆可以建模为:

d T (T) - - - - - - = F / V (T_f (T) - T (T)) - (H / c_p *ρ)* r (T) - (U *) / (c_p *ρ* V) * (T (T) -T_j (T) / dt

第一个和第三个术语描述由于原料流的温度变化T_f (t)和夹克T_j冷却剂温度(t)不同于核反应堆温度,分别。第二项是影响反应堆温度引起的化学反应容器。在这个方程,H是一个热的反应参数,c_p热容词,ρ密度项,U整体传热系数和换热的区域(冷却剂/船区)。

放在一起,装运箱有三个输入信号:

u_1 (t) = C_Af (t)的浓度在进口饲料流(kgmol / m ^ 3)。u_2 (t) = T_f (t)进口原料流温度[K]。u_3 (t) = T_j (t)夹克冷却剂温度[K]。

和两个输出信号:

y_1 (t) = C_A (t)的浓度在反应堆槽(kgmol / m ^ 3)。y_2反应堆温度(t) = t (t) [K]。

也自然模型,即。y_1 (t) = x_1 (t)和y_2 (t) = x_2 (t)。

合并一些原始的参数后,我们结束了八个不同的模型参数:

F体积流率(体积/时间)(m ^ 3 / h)。固定的。体积V在反应器(m ^ 3)。固定的。[1 / h] k_0 Pre-exponential非热能的因素。免费的。E活化能(千卡/ kgmol)。免费的。玻尔兹曼气体常数R(千卡/ (kgmol * K))。固定的。 H Heat of reaction [kcal/kgmol]. Fixed. HD = c_p*rho Heat capacity times density [kcal/(m^3*K)]. Free. HA = U*A Overall heat transfer coefficient times tank area [kcal/(K*h)] Free.

这里的四个参数指定的自由(即。估计)。在实践中,你也可能确定pre-exponential k_0非热能的因素,从实验室规模的实验活化能E。这将简化识别任务只考虑两个未知数:热容c_p和整体传热系数U(推断从HD和哈,分别为ρ是已知的)。

使用上面介绍的符号,下面的整数阶获得装运箱。

d x_1 (t) - - - - - - - - - - = F / V * (u_1 (t) -x_1 (t) - k_0 * exp (e / (R * x_2 (t))) * x_1 (t) / dt
d x_2 (t) - - - - - - - - - - = F / V (u_2 (t) -x_2 (t))——(H / HD) * k_0 * exp (e / (R * x_2 (t))) * x_1 (t) dt - (HA /(高清* V)) * (x_2 (t) -u_3 (t))
y_1 (t) = x_1 (t) y_2 (t) = x_2 (t)

创建一个非绝热的连续搅拌釜反应器IDNLGREY对象

这些信息输入到一个MATLAB文件cstr_m命名。m以下内容。

函数(dx, y) = cstr_m (F t, x, u, V, k_0, E, R, H,高清,哈,变长度输入宗量)% cstr_m非绝热的连续搅拌釜反应器(装运箱)。
%输出方程。y = [x (1);…%的物质浓度的反应堆。x (2)……%反应堆温度。];
%状态方程。dx = [F / V * (u (1) - x (1)) -k_0 * exp (e / (R * x (2))) * x (1);…F / V * (u (2) - x (2))——(H / HD) * k_0 * exp (e / (R * x (2))) * x (1) - (HA /(高清* V)) * (x (2) - u (3))…];

一个IDNLGREY对象反映建模的情况下创建的。

文件名=“cstr_m”;%文件描述模型结构。订单= [2 3 2];%模型[纽约νnx]命令。参数= [1;1;35 e6;11850;%初始参数。1.98589;-5960;480;145);InitialStates = (8.5695;311.267);%初始状态的初始值。t = 0;%的时间连续系统。nlgr = idnlgrey(文件名、秩序、参数、InitialStates Ts,“名字”,搅拌釜反应器的,“TimeUnit”,“小时”);

装运箱模型的输入、状态和输出结构设置和SETINIT指定使用方法。我们也指定默认初始状态估计。

nlgr。InputName = {在进口原料流的浓度% u (1)。进口原料流温度的% u (2)。夹克冷却液温度的};% u (3)。nlgr。InputUnit = {' kgmol / m ^ 3 '“K”“K”};nlgr = setinit (nlgr,“名字”,{在反应堆舱的浓度% x (1)。“反应堆温度”});% x (2)。nlgr = setinit (nlgr,“单位”,{' kgmol / m ^ 3 '“K”});nlgr = setinit (nlgr,“固定”,{假假});nlgr。OutputName = {“浓度”% y (1);在反应堆舱的浓度“反应堆温度。”};% (2)。nglr。OutputUnit = {' kgmol / m ^ 3 '“K”};

装运箱模型结构的参数定义和F, V, R和H指定固定。

nlgr = setpar (nlgr,“名字”,{的体积流率(体积/时间)% F。“反应堆体积”% V。“Pre-exponential非热能的因素”% k_0。“活化能”% E。玻耳兹曼”年代理想气体常数% R。反应热的% H。的热容乘以密度%高清。“整体传热系数乘以槽面积”});%公顷。nlgr = setpar (nlgr,“单位”,{“m ^ 3 /小时”“m ^ 3”1 / h的“千卡/ kgmol”“千卡/ (kgmol * K)”“千卡/ kgmol”“千卡/ (m ^ 3 * K)”“千卡/ (K * h)”});nlgr.Parameters (1)。固定= true;% F修复。nlgr.Parameters (2)。固定= true;% V修复。nlgr.Parameters (5)。固定= true;%修复R。nlgr.Parameters (6)。固定= true;%解决H。

通过物理推理,我们也知道,除了反应热参数(总是消极的,因为反应是放热的)是积极的。让我们也把这(有点粗糙)知识融入我们的装运箱模型结构:

nlgr.Parameters (1)。最小值= 0;% F。nlgr.Parameters (2)。最小值= 0;% V。nlgr.Parameters (3)。最小值= 0;% k_0。nlgr.Parameters (4)。最小值= 0;% E。nlgr.Parameters (5)。最小值= 0;% R。nlgr.Parameters (6)。最大= 0;% H。nlgr.Parameters (7)。最小值= 0;%高清。nlgr.Parameters (8)。最小值= 0;%公顷。

摘要进入装运箱模型的结构下通过当前命令:

礼物(nlgr);
nlgr =连续时间非线性灰色矩形模型定义为“cstr_m”(MATLAB文件):dx / dt = F (t, u (t) x (t) p1,…,p8) y (t) = H (t, u (t) x (t) p1,…,p8) + e(t) with 3 input(s), 2 state(s), 2 output(s), and 4 free parameter(s) (out of 8). Inputs: u(1) Concentration of A in inlet feed stream(t) [kgmol/m^3] u(2) Inlet feed stream temperature(t) [K] u(3) Jacket coolant temperature(t) [K] States: Initial value x(1) Concentration of A in reactor tank(t) [kgmol/m^3] xinit@exp1 8.5695 (estimated) in [-Inf, Inf] x(2) Reactor temperature(t) [K] xinit@exp1 311.267 (estimated) in [-Inf, Inf] Outputs: y(1) A Concentration(t) y(2) Reactor temp.(t) Parameters: Value p1 Volumetric flow rate (volume/time) [m^3/h] 1 (fixed) in [0, Inf] p2 Volume in reactor [m^3] 1 (fixed) in [0, Inf] p3 Pre-exponential nonthermal factor [1/h] 3.5e+07 (estimated) in [0, Inf] p4 Activation energy [kcal/kgmol] 11850 (estimated) in [0, Inf] p5 Boltzmann's ideal gas constant [kcal/(kgmo..] 1.98589 (fixed) in [0, Inf] p6 Heat of reaction [kcal/kgmol] -5960 (fixed) in [-Inf, 0] p7 Heat capacity times density [kcal/(m^3*K)] 480 (estimated) in [0, Inf] p8 Overall heat transfer coefficient times tank area [kcal/(K*h)] 145 (estimated) in [0, Inf] Name: Stirred tank reactor Status: Created by direct construction or transformation. Not estimated. More information in model's "Report" property.

输入输出数据

系统辨识实验设计对许多非线性系统通常涉及多为线性系统。这也适用于装运箱,一方面是理想的可控输入u_3就是这样,充分激发系统,另一方面它必须选择“plant-friendly”(化学过程必须保持稳定,测试的持续时间应尽可能短,影响生产,等等)。本文在[1]讨论了输入信号的选择装运箱。认为有multi-sinusoidal输入u_3有利于一个多层次的伪随机输入信号有几个原因。在下面的识别实验中,我们将使用两个这样的输入信号,一个用于估计和一个用于验证的目的,通过MATLAB®生成输入数据生成工具(GUI)请提供的作者提到的文章。

我们加载这个装运箱数据,并将其在两个不同的IDDATA对象,泽估计和zv验证目的:

负载(fullfile (matlabroot“工具箱”,“识别”,“iddemos”,“数据”,“cstrdata”));t = 0.1;%每小时10样品!泽= iddata (y1, u1, 0.1,“名字”,“估计数据”);泽。InputName = nlgr.InputName;泽。InputUnit = nlgr.InputUnit;泽。OutputName = nlgr.OutputName;泽。OutputUnit = nlgr.OutputUnit;泽。Tstart = 0; ze.TimeUnit =“小时”;泽。ExperimentName =“估计”;zv = iddata (y2, u2, 0.1,“名字”,验证数据的);zv。InputName = nlgr.InputName;zv。InputUnit = nlgr.InputUnit;zv。OutputName = nlgr.OutputName;zv。OutputUnit = nlgr.OutputUnit;zv。Tstart = 0; zv.TimeUnit =“小时”;zv。ExperimentName =“验证”;

估计的输入和输出数据集泽两图所示。

图(“名字”,(ze.Name:输入数据的]);我= 1:泽。ν次要情节(泽。ν,1,);情节(泽。SamplingInstants ze.InputData (:, i));标题([“输入#”num2str(我)“:”ze.InputName{我}]);包含();轴;结束包含([ze.Domain“(”ze.TimeUnit“)”]);

图2:估计数据集输入到装运箱。

图(“名字”,(ze.Name:输出数据的]);我= 1:泽。纽约次要情节(泽。纽约,1,我);情节(泽。SamplingInstants ze.OutputData (:, i));标题([“输出#”num2str(我)“:”ze.OutputName{我}]);包含();轴;结束包含([ze.Domain“(”ze.TimeUnit“)”]);

图3:估计数据集从装运箱输出。

之前进行识别实验,我们应该提到生成的输入信号迫使装运箱的输出显示很多反应堆非线性整体(80度左右的温度变化,导致一些反应堆的“点火”现象明显)。而这兴奋反应堆(通常是好的从身份的角度),它可能不是的工程师想经营一个真实的反应堆,特别是没有一个像这个放热。使用指南中描述的布劳恩et al .(2002),一个可以重新设计实验之前,实际上是执行。在这种情况下,它将会是很有趣的,试图减少实验和使用multi-sinusoidal输入信号的持续时间较短周期的长度。的目的是减少低频内容可控的输入信号,以减少反应堆输出的变化。

初始装运箱模型的性能

是初始装运箱模型多好?让我们调查这个通过模拟输入信号的初始模型使用泽zv和比较计算输出真正的输出(通过模拟上述IDNLGREY模型使用其他参数和添加一些噪音)包含在泽zv,分别。

clf比较(泽nlgr);图;比较(zv nlgr);

图4:比较真实的输出和模拟初始装运箱的输出模型。

参数估计

真实和模拟输出之间的协议的初始装运箱模型是体面的。进一步提高,我们估计的四个自由模型参数以及初始状态向量模型的使用评估数据集泽。我们指示NLGREYEST显示迭代信息和执行最多25个搜索迭代。

选择= nlgreyestOptions (“显示”,“上”);opt.SearchOptions。MaxIterations = 25;nlgr = nlgreyest(泽、nlgr选择);

如果需要,搜索总是可以继续通过第二个调用NLGREYEST (PEM)。这次NLGREYEST要求不显示任何迭代信息和只携带最多5个更多的迭代。

opt.Display =“关闭”;opt.SearchOptions。MaxIterations = 5;nlgr = nlgreyest(泽、nlgr选择);

预计装运箱的性能模型

评估估计模型我们再次使用的性能比较:

比较(泽nlgr);图;比较(zv nlgr);

图5:比较的真实输出和模拟输出估计装运箱模型。

目视检查立即显示,估计模型的输出接近真正的输出,对泽和zv。验证数据集的改进尤为重要,在模型适合从负值增加到70%和99%,分别为两个模型输出。

进一步的信息估计装运箱模型下返回的礼物:

礼物(nlgr);
nlgr =连续时间非线性灰色矩形模型定义为“cstr_m”(MATLAB文件):dx / dt = F (t, u (t) x (t) p1,…,p8) y (t) = H (t, u (t) x (t) p1,…,p8) + e(t) with 3 input(s), 2 state(s), 2 output(s), and 4 free parameter(s) (out of 8). Inputs: u(1) Concentration of A in inlet feed stream(t) [kgmol/m^3] u(2) Inlet feed stream temperature(t) [K] u(3) Jacket coolant temperature(t) [K] States: Initial value x(1) Concentration of A in reactor tank(t) [kgmol/m^3] xinit@exp1 8.62914 (estimated) in [-Inf, Inf] x(2) Reactor temperature(t) [K] xinit@exp1 311.215 (estimated) in [-Inf, Inf] Outputs: y(1) A Concentration(t) y(2) Reactor temp.(t) Parameters: Value Standard Deviation p1 Volumetric flow rate (volume/time) [m^3/h] 1 0 (fixed) in [0, Inf] p2 Volume in reactor [m^3] 1 0 (fixed) in [0, Inf] p3 Pre-exponential nonthermal factor [1/h] 3.55889e+07 17548.3 (estimated) in [0, Inf] p4 Activation energy [kcal/kgmol] 11853.9 0.0703052 (estimated) in [0, Inf] p5 Boltzmann's ideal gas constant [kcal/(kgmo..] 1.98589 0 (fixed) in [0, Inf] p6 Heat of reaction [kcal/kgmol] -5960 0 (fixed) in [-Inf, 0] p7 Heat capacity times density [kcal/(m^3*K)] 500.71 0.194139 (estimated) in [0, Inf] p8 Overall heat transfer coefficient times tank area [kcal/(K*h)] 150.127 0.0697455 (estimated) in [0, Inf] Name: Stirred tank reactor Status: Termination condition: Maximum number of iterations or number of function evaluations reached.. Number of iterations: 6, Number of function evaluations: 7 Estimated using Solver: ode45; Search: lsqnonlin on time domain data "Estimation data". Fit to estimation data: [71.36;99.18]% FPE: 0.02736, MSE: 0.6684 More information in model's "Report" property.

预计装运箱模型的仿真模型金宝app

一个IDNLGREY模型也可以进口和仿真软件中使用。金宝app仿真软件金宝app模型“cstr_sim”进口验证数据集zv和通过其数据模型IDNLGREY模型块,当模拟产生输出,输入信号存储在一起使用MATLAB的工作区zsim IDDATA对象。(下面的最后五行代码用于确保适当的模型输入到仿真软件模型。金宝app这是只需要如果idnlgreydemo9运行在一个函数,在访问和nlgr不能保证。)

open_system (“cstr_sim”);如果~ evalin (“基地”,的存在(“zv”、“var”))cstrws = get_param (bdroot,“modelworkspace”);cstrws.assignin (“zv”zv);cstrws.assignin (“nlgr”,nlgr);结束

图6:金宝app仿真软件模型包含估计装运箱模型。

通用IDNLGREY模型库块标准系统识别模金宝app型库中发现和可以复制到用于任何仿真软件模型。例如,在装运箱情况下,很可能被用于闭环控制安排。

IDNLGREY块之前必须配置模拟。这样做是通过输入MATLAB工作空间变量持有IDNLGREY模型(这里nlgr)或通过定义适当的使用IDNLGREY IDNLGREY模型对象的构造函数的参数编辑框标记“IDNLGREY模式”。在这里也可以指定要使用的初始状态向量(默认是指定的内部存储初始状态向量IDNLGREY对象)。

IDNLGREY模型对象存储属性指定的设置微分或差分方程解算器使用的SIM卡,预测,NLGREYEST等等(见nlgr。SimulationOptions选项控制模型的模拟)。在仿真金宝app软件中,这些设置总是覆盖的选项指定的模型解算器。如果IDNLGREY模型对象指定使用不同的解算器,然后在仿真软件仿真结果可能不同,获得与IDNLGREY / SIM在MATLAB。金宝app一个例子说明这是“idnlgreydemo10”中提供的例子。

解算器选择定居,我们可以下一个执行一个命令提示符cstr_sim Simulink仿真模型的仿真(这里将进行估计装运箱模型)。金宝app(需要evalin调用检索zsim以防idnlgreydemo9是运行在一个函数)。

sim卡(“cstr_sim”);如果~ (“zsim”,“var”)zsim = evalin (“基地”,“zsim”);结束zsim。InputName = nlgr.InputName;zsim。InputUnit = nlgr.InputUnit;zsim。OutputName = nlgr.OutputName;zsim。OutputUnit = nlgr.OutputUnit;zsim.TimeUnit=“小时”;

让我们最后得出例子通过绘制仿真结果获得的仿真软件。金宝app

图(“名字”,预金宝app计装运箱模型的仿真软件仿真结果);我= 1:zsim。纽约次要情节(zsim。纽约,1,我);情节(zsim。SamplingInstants ze.OutputData (:, i));标题([“输出#”num2str(我)“:”zsim.OutputName{我}]);包含();轴;结束包含([zsim.Domain“(”zsim.TimeUnit“)”]);

图7:模拟得到的输出估计装运箱模型在仿真软件。金宝app

结论

本教程介绍了建模和识别的非绝热的连续搅拌釜反应器。特别是,它演示了如何导入和使用一个IDNLGREY模型在仿真软件。金宝app

引用

[1]布劳恩,分子量,R. Ortiz-Mojica and D.E. Rivera, "Application of minimum crest factor multisinusoidal signals for 'plant-friendly' identification of nonlinear process systems," in控制工程实践3号,卷。10日,2002年,页301 - 313。