Simulink仿真入门到精通(十五) Simulink在流程工业中的仿真应用
15.1 工业乙醇生产与计算机仿真
乙醇作为可再生清洁能源不仅可以代替四乙基铅作为汽油的防爆剂,还可以制造汽油醇。这一巨大的潜在需求促使人们去寻找提高乙醇工业生产率的途径,使人们着手于发酵工程的研究。微生物学、发酵研究的发展,使微生物反应过程的种类和规模不断扩大,其应用也深入到多个工业领域,然而由于反应涉及活细胞的参与,菌体生长及产物生成等机理复杂多变,目前尚难为人们所了解和把握,更难以进行统一的描述。人们一般通过实验的方法寻找微生物的生长规律,通过数值分析和拟合了解发酵过程的规律。这样的做法周期性长,需要消耗的资源多,且无法在短时间内对工业流程中出现的问题提出及时的应对方案。
计算机仿真技术作为分析和研究系统运行行为、揭示系统动态过程和运动规律的一种重要手段和方法,随着系统科学研究的深入,以及控制理论、计算技术、计算机科学与技术的发展而形成一门新兴的学科。近年来,随着信息处理技术的突飞猛进,仿真技术得到迅速发展。“仿真是一种基于模型的活动”,设计多学科、多领域的知识和经验。成功进行仿真研究的关键是有机、协调地组织实施仿真全生命周期的各类活动。这里的“各类活动”,就是指“系统建模”、“仿真建模”、“仿真实验”,联系这些活动的要素是“系统”、“模型”、“计算机”。其中,系统是研究的对象,模型是系统的抽象,仿真是为了通过对模型的实验达到跟真实系统对比并接近于研究其特性的目的。
15.2 工业乙醇发酵流程

A:预发酵罐
B~G:6个发酵罐
H:离心分离机
1、5、7、9:干法糖液
2:营养液
3:酵母
15:产品,含11%~12%的乙醇
14:废酵母,其中一部分循环回去
发酵温度31~33℃。
15.3 乙醇发酵动力学方程
- 葡萄糖液在酵母作用下分解产生乙醇;
- 酵母细胞本身吸收葡萄糖液来促进自身生长。
\[\begin{array}{l}
\frac{{{\rm{d}}x}}{{{\rm{d}}t}} = \mu x\\
\frac{{{\rm{d}}p}}{{{\rm{d}}t}} = \upsilon x\\
\frac{{{\rm{d}}s}}{{{\rm{d}}t}} = - (\alpha + \beta )x
\end{array}\]
- 对每个发酵罐,发酵液流入量=流出量;
- 对每种物质而言,其质量变化=流入/流出质量变化+反应生成/消耗质量变化。
\[\begin{array}{l}
{F_{in}} = {F_{out}}\\
\frac{{{\rm{d}}x}}{{{\rm{d}}t}} = \mu x + D({x_0} - x)\\
\frac{{{\rm{d}}p}}{{{\rm{d}}t}} = \upsilon x + D({p_0} - p)\\
\frac{{{\rm{d}}s}}{{{\rm{d}}t}} = - (\frac{\mu }{{{Y_{x/s}}}} + \frac{\upsilon }{{{Y_{p/s}}}})x + D({p_0} - p)
\end{array}\]
因为实际生产过程中基质浓度较高,需要考虑底物和产物对细胞生长的抑制作用。
\[\begin{array}{l}
\mu = {\mu _{\max }}\frac{S}{{{K_s} + S + {s^2}/{K_{sl}}}} \cdot \frac{{{K_p}}}{{{K_p} + p + {p^2}/{K_{pl}}}}\\
\upsilon = {\upsilon _{\max }}\frac{S}{{{K_{sp}} + S + {s^2}/{K_{spl}}}} \cdot \frac{{{K_{pp}}}}{{{K_{pp}} + p + {p^2}/{K_{ppl}}}}
\end{array}\]
发酵过程模型流程图:

15.4 MATLAB求解
- [T,Y]=solver(odefun,tspan,y0,options,p1,p2,...)
参考:https://ww2.mathworks.cn/help/matlab/ref/ode45.html
solver为命令ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb之一,odefun为显式常微分方程dy/dt=f(t,y)或包含混合矩阵的方程M(t,y)×dy/dt=f(t,y)。命令ode23只能求解常数混合矩阵的问题;命令ode23t与ode15s可以求解奇异矩阵的问题。tspan为积分区间的向量,tspan=[t0,tf]。要获得问题在指定时间点t0、t1、t2、...上的解,可以令tspan=[t0,t1,t2,...,tf],但必须是单调的。y0为包含初值条件的向量,options为用命令odeset设置的可选积分参数。p1、p2、...为传递给函数odefun的可选参数。
function f=func(t,n,V) %发酵罐的动力学函数,输入参数为时间,输入矩阵,体积
global x0 p0 s0 Yxs Yps umax vmax Ks Kps Kp Kpp Ksi Kpsi Kpi Kppi T F Vy
f=zeros(3,1); %按照三行扩展列来保存每一步的三种物料的浓度
u=umax*n(3)/(Ks+n(3)+n(3)^2/Ksi)*Kp/(Kp+n(2)+n(2)^2/Kpi);
v=vmax*n(3)/(Kps+n(3)+n(3)^2/Kpsi)*Kpp/(Kpp+n(2)+n(2)^2/Kppi);
D=Vy/V;
f(1)=u*n(1)+D*(x0-n(1)); %Dx n(1)-x,n(2)-p,n(3)-s
f(2)=v*n(1)+D*(p0-n(2)); %Dp
f(3)=-(u/Yxs+v/Yps)*n(1)+D*(s0-n(3)); %Ds
也可以用龙格-库塔法求解,四阶示例如下。
function [x,y]=runge_kutta1(ufunc,y0,h,a,b,Vg) %参数表顺序依次是微分方程组的函数名称,初始值向量,步长,时间起点,时间终点,发酵罐体积
n=floor((b-a)/h); %求步数
x(1)=a; %时间起点
y(:,1)=y0; %赋初值,可以是向量,但是要注意维数
for ii=1:n
x(ii+1)=x(ii)+h;
k1=ufunc(x(ii),y(:,ii),Vg);
k2=ufunc(x(ii)+h/2,y(:,ii)+h*k1/2,Vg);
k3=ufunc(x(ii)+h/2,y(:,ii)+h*k2/2,Vg);
k4=ufunc(x(ii)+h,y(:,ii)+h*k3,Vg);
y(:,ii+1)=y(:,ii)+h*(k1+2*k2+2*k3+k4)/6; %按照龙格库塔方法进行数值求解
end
>> [x,y]=runge_kutta1(@func,[10;0;200],0.1,0,15,500);
>> plot(x,y);
>> legend({'酵母菌体','乙醇','葡萄糖液'});

15.5 Simulink求解
Simulink常用的微分方程解法:
- 根据方程搭建模型,较为复杂,通用;
- 用S函数,需要求解状态方程;
- 用传输函数,对时域方程进行拉普拉斯变换;
- 向量法,用Fcn模块表示一个微分方程中的一位输入,三个Fcn模块并联。



15.6 连续流程仿真

15.7 GUIDE设计
15.7.1 GUIDE介绍
在命令窗口输入guide。

例:设计按钮控制图片显示的界面。
拖出axes、pushbutton控件,右击pushbutton,选择View Callbacks→Callback。
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
axes(handles.axes1);
imshow('flower.jpg');

15.7.2 乙醇仿真界面


Simulink仿真入门到精通(十五) Simulink在流程工业中的仿真应用的更多相关文章
- “全栈2019”Java第二十五章:流程控制语句中循环语句while
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Simulink仿真入门到精通(五) Simulink模型的仿真
5.1 模型的配置仿真 由各种模块所构建的可视化逻辑连接,只是模型的外在表现,模型仿真的核心驱动器是被称作解算器(Solver)的组件,相当于Simulink仿真过程的心脏,驱动着模型仿真,它在每一个 ...
- Simulink仿真入门到精通(十九) 总结回顾&自我练习
从2019年12月27到2020年2月12日,学习了Simulink仿真及代码生成技术入门到精通,历时17天. 学习的比较粗糙,有一些地方还没理解透彻,全书梳理总结: Simulink的基础模块已基本 ...
- “全栈2019”Java第二十四章:流程控制语句中决策语句switch下篇
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- sql索引从入门到精通(十亿行数据测试报告)
原文:sql索引从入门到精通(十亿行数据测试报告) 导读部分 --------------------------------------------------------------------- ...
- GPU 编程入门到精通(五)之 GPU 程序优化进阶
博主因为工作其中的须要,開始学习 GPU 上面的编程,主要涉及到的是基于 GPU 的深度学习方面的知识.鉴于之前没有接触过 GPU 编程.因此在这里特地学习一下 GPU 上面的编程. 有志同道合的小伙 ...
- Bootstrap入门(二十五)JS插件2:过渡效果
Bootstrap入门(二十五)JS插件2:过渡效果 对于简单的过渡效果,只需将 transition.js 和其它 JS 文件一起引入即可.如果你使用的是编译(或压缩)版的bootstrap.js ...
- MyBatis从入门到精通(十二):使用collection标签实现嵌套查询
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 本篇博客主要讲解使用collectio ...
- “全栈2019”Java第八十五章:实现接口中的嵌套接口
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- Jumpserver 一键部署(支持离线安装)
1.教程介绍1.1::通过本教程起到抛砖引玉效果,希望各位喜爱Jumpserver堡垒机的朋友受益良多. 1.2::以下提供的任何软件仅供学习交流使用. 2.下载链接2.1::centos_1810最 ...
- UFT安装
1.下载解压双击setup.exe 2.点击安装 3.点击下一步 4.检测是否需要安装插件之后一路向下 5.安装之后图标 下载: 链接:https://pan.baidu.com/s/1sa0h037 ...
- Ho|H1|p-value|p值与U值|单侧检验
生物统计学 统计推断的过程: Ho:XXXX会发生 H1:XXXX不会发生 p:XXXX会发生的概率(概率计算过程),如果是小概率,则H0不可能发生,所以拒绝H0接受H1. 概率计算过程:先设定小概率 ...
- windows 不能在本地计算机启动apache2。有关更多信息,查阅系统事件日志。如果这是非Microsoft服务,请与服务厂商联系,并参考特定服务错误代码1
今天使用apache的时候又无法启动了,之前也遇到过,这次重点说这一次的情况,其他情况可以查看博主apache相关的其他博文:网上关于apache服务端的设置的很多,但是都不适合我的情况: 一般使用a ...
- Django中查询相关操作
查询集特性 1)惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询. 2)缓存:当使用的是同一个查询集时,第一次使用的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个 ...
- python的collections模块和functools模块
collections是Python内建的一个集合模块,提供了许多有用的集合类. namedtuple 我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成: >>> ...
- mysql表关联问题(第二卷:外键1对多之2)
接着上一卷内容我们继续: 上卷我用的查询语句我们可以看到全部数据,很明显这样的方式查找的数据并不详细: SELECT * FROM usr LEFT JOIN fzu ON usr.fzu = fzu ...
- UAC table
CREATE TABLE `sys_dept` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '编号', `name` varchar(50) D ...
- Java - 面向对象练习 - market
Marketpackage market; public class Market { private String marname; private Product[] producta ...
- 最简化的DirectX 11开发环境的配置 VS2010
转载自:http://blog.csdn.net/zhmxy555/article/details/7672101 在编写基于DirectX 11的应用程序之前,我们当然需要在IDE中加入Direct ...