五千年(敝帚自珍)

主题:【原创】化工过程控制的实践 -- 润树

共:💬332 🌺795
分页树展主题 · 全看首页 上页
/ 23
下页 末页
    • 家园 【原创】2。控制系统仿真软件及其应用

      前一章第二节介绍了化工过程动态仿真的基本概念,这一章我们具体来看一看动态仿真在自动控制领域里的应用。第一节介绍主要用来作理论研究的动态仿真软件MATLAB之Simulink;第二节介绍专门用于化工过程和控制系统仿真的商业软件HYSYS Plant和Aspen Dynamics;第三节介绍为了一些特殊应用,自己编的动态仿真程序。每一节都会与大家分享一些笔者所经验过的化工过程控制的应用实例。

      2.1 MATLAB 和 Simulink

      Mathworks是1984年在美国马萨诸塞州发展起来的一家软件公司,以MATLAB为其旗舰产品,成长迅速,现在已经是一个有1800人的全球性大公司,为大学里的教学和科研,以及工业界的研究和应用,提供强大的技术性计算支持。MATLAB的家族里,已经开发出几十个工具箱(toolbox),每个工具箱里包含许多数学模块,解决某些特定的问题。其中相当一部分工具箱,像优化,控制系统,模型识别,信号处理,鲁棒控制,神经网络,模型预估控制,等等,可以为控制系统的研究所用。

      Simulink则是作为人机图像接口,为使用者运用MATLAB里的工具箱,提供一个良好的仿真平台。在Simulink家族下面,针对特别的工业应用,比如水力过程,电力过程,航空航天过程等,现在也开发出了一系列的模块,让使用者可以非常便利地对这些过程进行仿真。但是我们也看到,目前Simulink还没有开发出针对化工过程的专用模块。这是因为,化工过程中所牵涉到的大量化合物的物性以及化工设备特性,非常复杂,很难把它们做成模块。当然,这仍不妨碍我们运用Simulink,对很多典型的化工控制系统进行理论研究。而且,如果我们获得了某个过程的数学模型,或者过程的输入输出数据,也可以方便地用Simulink来对该过程进行动态仿真,帮助我们寻找问题,尝试对该过程的控制进行改进。

      Simulink里一些基本的数学模块如图2.1.1所示:

      点看全图

      图2.1.1

      这里面传递函数(transfer function)这块最有用,只要在其性能表上设定几个系数,就可以把一个高价传递函数描述出来。各摸快都有输入输出的连接点,通过它们可以把有很多模块的复杂系统方便地连接起来。

      关于MATLAB和Simulink,有兴趣者可参看Mathworks的网站链接:

      MATLAB的产品链:外链出处

      Simulink的网上演示:外链出处

      下面我们先举一个简单的控制系统仿真实例,来看看Simulink是怎么工作的,然后再看一个解决化工过程控制实际问题的例子。

      图2.1.2的下半部分是一个控制系统的方框图。这个系统看似简单,但从理论上说,它几乎涵盖了控制工程师全部的工作对象,本系列各章的内容也都包含在里面。希望每个模块上方的文字,有助于说明这一点。

      点看全图

      图2.1.2

      图2.1.3显示,PID控制器的参数和拉氏传递函数在Simulink里是如何设定的。

      点看全图

      图2.1.3

      图2.1.2中的一阶过程可以通过一个PID控制器来达到良好的控制效果。图2.1.4是PID控制器在不同参数设定下获得的控制结果,微分作用在这里很弱,可有可无。其中,a是符合所谓“四分之一衰减”的参数整定的结果,因为它有振荡,在化工生产中通常是不会采用的;b是通过减弱积分作用(积分时间增大),避免振荡和出超(overshot),但系统响应滞缓;c是提高控制器增益,使响应加快;d是进一步加强积分作用,使响应更快达到稳态,虽有出超,但它是这几例中偏差积分最小的响应。

      点看全图

      图2.1.4

      有了这个基本的控制回路以后,我们可以对它进行扩展,来研究其它的控制系统。比如,某过程具有由传质传热等引起的纯滞后的特性,我们可以在过程前加一个传递滞后(transport delay)模块(本例中引入50秒的滞后)。这时如果仍按前面d例中的控制器参数,系统响应将大大变坏,如图2.1.5左下角的响应曲线所示。在这种情况下,一般是通过增加PID积分时间来对付。另外一个经典的办法是加一个史密斯预估器,如图2.1.5所示。它的方法是,做一个模拟Process的传递函数Process1来预估没有时间滞后下的响应,将其迅速反馈到控制器。由于模拟的过程和真实的过程可能不完全一致,因此在将此预估值延迟(Transport Delay1)后,再与真实的过程输出相比较,并以此比较而产生的误差值去校正预估值。用此方法,几乎可使系统达到在没有时间滞后下同样的响应,如该图右下方所示(与上例d的结果近似)。

      点看全图

      图2.1.5

      在此基础上,我们还可以再扩展一下,来研究一个串级控制系统。这只要在process后面加一个process 2,在controller 1 前面加一个controller 2,并连接一下主回路的反馈线就成了。其方框图和控制器参数整定后的系统响应如图2.1.6所示。

      点看全图

      图2.1.6

      最后来看一个运用Simulink来研究和改进化工过程控制的应用实例。其过程和控制系统如图2.1.7所示。

      点看全图

      图2.1.7

      这是一个蒸汽生产槽,其热量输入来自一个大型化学反应器的物料循环。其控制策略是,由出口蒸汽流量(次回路)来控制蒸汽槽的压力(主回路),而供水阀门用来控制蒸汽槽的液位。该过程在日常控制中存在的问题是,由于化学反应器所提供的热量波动,导致蒸汽槽压力,蒸汽流量和槽液位同时波动。而蒸汽槽液位的变化,又会使槽中的水和夹层中来自反应器的热介质之间的热交换发生变化,使压力和其它变量进一步受到干扰。因此,一但波动发生,严重时很长时间才能重新稳定下来。为了复制过程的这种现象,找到解决之道,我们最初用HYSYS动态仿真来构成了该过程和其控制系统,即图2.1.7中所示。但后来发现,用这个仿真,很难模拟蒸汽槽中的水与反应器热介质之间的热交换。于是对该过程进行了一些阶越测试,并根据测试所得数据,做出了几个相关控制回路的过程的数学模型。有了这些模型,我们就可以在MATLAB上用Simulink来进行仿真。该仿真的方框图如图2.1.8所示。

      点看全图

      图2.1.8

      图中下方是蒸汽流量控制回路,该流量既直接影响压力,同时也通过蒸汽槽中的热交换影响压力(左上方)。压力控制回路的输入输出范围等因素也包括在了仿真里面,使仿真的压力调节器参数与实际PID参数可以直接进行比较(右上方的部分)。

      通过仿真,找到了比较好的蒸汽流量和压力调节器参数,使控制效果得到明显改善。

      点看全图

      图2.1.9

      由仿真得到的蒸汽流量和压力振荡曲线,与过程实际情况非常接近。流量有高频和低频两种振荡,前者是由于流量控制器过强的积分作用引起的,后者是由液位和热交换振荡引起的(图2.1.9上边)增加积分常数,即消除了高频振荡,如图2.1.9下方的曲线所示。

      点看全图

      图2.1.10

      故事(二)

      我开始接触动态仿真,是在大学毕业时做一个控制系统的研究。过程对象是某自来水厂,其输入(往水里加化学剂)到输出(水处理好以后的品质)之间,存在很长的时间滞后,课题指导老师认为用史密斯预估器可改善其控制效果。我当时是和一个同学共同做的这个课题。我们从水厂测试到对象特性后,就把这个控制系统转换成差分方程,然后用BASIC编程,在J-130机上进行动态仿真。这后一部分,即仿真的工作,花了我们好几天的时间。现在用MATLAB Simulink,同样的工作,则只需十来分钟。由此可见,计算机及其应用软件技术的发展,对提高工作效率起了何等重要的作用。

      上世纪90年代初,商用的控制系统仿真软件开始面市,但很不成熟,且价格奇高。我那时在一家小的控制公司,虽然很想用上这样的软件,但公司花不起那个钱,只能邀请软件供应商来做一做演示,我们得以从中窥其一斑。不过我出国时带了一本清华大学熊光楞写的《控制系统数字仿真》,于是就拿出来依样画葫芦,自己编一些简单的动态仿真程序。后来学会了Visual Basic编程软件,有了图像的人机接口,自己做出来的针对某些特殊问题的动态仿真软件,还真有点摸样,本章第三节我会专门讲到。也就是在这时,我也开始用到MATLAB的Demo版,当初窥其貌,颇为其Sexy(可翻译成强大功能 )击节称叹。

      又过了两年,我加入现在工作的化学公司时,发现本部门10来个人,居然有两套HYSYS (那时属加拿大Hyprotech 公司),两套Aspen Speedup (早期的Dynamics),而且基本上没什么人用。我自然是见宝就收,都拿来装在自己的机器上。仿真这种东西,说穿了也就是纸上或电子练兵,或者说是在没有真刀真枪下的沙盘推演。直接在工厂里荷枪实弹干的人,一方面是不太需要仿真,另一方面是陪不起那么多时间。但你说,对于那些整天坐在R&D办公室的人,不搞纸上/电子练兵,怎么杀时间?(不信就去问问电子赵括兄。)这样一来,我就成了公司里动态仿真的“专家”,一些需要沙盘推演的活,就会到我这里来。有时也有商用软件干不了的活,于是我的自编程序又可以拿出来抵挡一下。

      久而久之,本部门的一位老同志有想法了。此君是个日本人,在公司已有三十年经验,在我来之前是公认的动态仿真专家。那他为什么现在不行了呢?原来他是机械学博士,化工的不懂,对控制领域的传递函数什么的还行,看到化工专用的HYSYS之类却只有望洋兴叹。那他还当什么动态仿真专家?别忘了,我们不是在讲MATLAB吗,这个东东可不需要什么化工知识,那些年他就是靠这个在打天下。我看过他做的Simulink应用程序,一个一个模块,密密麻麻,数都数不过来,不是专家是什么。那么他有什么想法呢?他想给公司的控制工程师们办一个MATLAB培训班,重现昔日辉煌。好,很好,我不是也可以趁机学学吗。到了那一天,培训室里坐了济济一堂,JP君正式开讲。在讲到关键的传递函数模块时,他把它从模块库里拽出来,再双击鼠标,表格出现了,打入几个数字,就在模块上显示出一个漂亮的拉普拉斯一阶传递函数。下面有人惊叹,但也有人发问:“XX,如何输入二阶函数?”老师回答说,“这个比较难,要先把二阶分解成一阶”。我一听,好生奇怪,有这等事?有些可以分解,有些则不能用实数分解,那该怎么办?幸好我也玩过一点Simulink,仿佛记得,就说,“你在分母项上打入三个分开的数试试”。对,就像上面的图2.1.3所示。他照此办理,果然轻易地得到一个二阶函数。他心里可能在想,真神呵!我却在想,难道他这个专家以前就没用到过欠阻尼的二阶函数?可见,动态仿真,说难也难,说不难,一阶方程就吃遍天了。

      • 家园 一阶方程就吃遍天,不罕见

        那个谁,不是靠一本书吃遍天下的么,而且很多人也跟着吃。

      • 家园 化工的过程控制里确实一阶方程就够用了

        我学process control的时候,在做拉氏变换之前一切高于一阶的方程都要转化为一阶方程,其过程叫linearize

        当然要做的比较细可以保存高阶方程,但仿真本身的精确度就不是很大,有个20%-200%的误差都属于正常。也并非都是R&D部门杀时间,仿真对于确定参数范围由很大作用,至少可以在数量级上进行确定

        • 家园 咳咳

          linearize可不是把高阶方程转化为一阶方程,高阶转低阶叫模型降阶(model reduction),linearize是线性化,是把非线性方程用泰勒级数展开然后取一阶线性部分。这是两回事。

          • 咳咳
            家园 linearize,我们也搞,不难

            有合适的酶就行。

        • 家园 某种程度上可以这么说

          但实际上很多是从高阶化成了一阶,像精馏塔,从塔底到塔顶,有多少塔板数就有多少阶。对象特性开环出现振荡的(二阶欠阻尼或更高阶),确实几乎没有,但如果做APC项目,进行测试,有些DCS上的闭环控制是不打开的,那么就很可能呈现振荡情况,必须用二阶以上来描述。在用Matlab时,更没有必要故意把高阶化成一阶,增加工作量。

          看来你我是同一战壕里的,故事里的有些话不可太顶真,自我调侃也。

      • 家园 在本帖先送花者得【通宝】

        惊喜:所有在本帖先送花者得【通宝】一枚

        恭喜:你意外获得【西西河通宝】一枚

        谢谢:作者意外获得【西西河通宝】一枚

        鲜花已经成功送出。

分页树展主题 · 全看首页 上页
/ 23
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河