主题:【原创】自动控制的故事(一)(完) -- 晨枫
打仗时,如果敌人太顽固,要么换更大的炮,把敌人轰倒;要么采用更巧妙的战术,把敌人晕倒。控制也是一样,单回路PID难以解决的问题,常常可以通过更巧妙的回路结构来解决。
单一的PID回路当然可以实现扰动抑制,但要是主要扰动在回路中,而且是明确的,加一个内回路作帮手是一个很不错的主意。还记得洗热水澡的例子吗?要是热水压力不稳定,老是要为这个而调整热水龙头,那很麻烦。要是有一个人专门负责根据热水压力调节热水流量,把热水压力稳定下来,而且稳定在标定值,那洗澡的时候,水温就容易控制多了,只要告诉那个人现在需要多少热水流量,而不必烦心热水压力对热水流量的影响。这个负责热水流量的控制回路就是内回路,也叫副回路,而洗澡的温度就是外回路,也叫主回路,当然是主回路指挥副回路,就像自动化指挥机械化、学自控的人指挥学机电的人……打住打住,再扯远了要挨鹿踹了,或者马踹、牛踹、驴踹……。这种主回路套副回路的结构叫串级控制(cascade control),曾经是单回路PID后工业上第一种“先进过程控制”,现在串级已经用得很多了,也不再有人叫它“先进过程控制”了。串级控制最主要的功用是抑制回路内的扰动,增强总体控制性能。不过串级也不能乱用。如果主回路和副回路的相应速度差不多,或者主回路的相应速度甚至慢于副回路(通过变态的调试是可以做到的),这样的串级要出问题。理论上可以用共振频率什么的分析,但是不用费那个事,用膝盖想想就知道,一个急性子的头儿把一个温吞水的下属指挥得团团转,结果只能是大家都精疲力竭,事情还办砸了。相反,一个镇定自若的头儿指挥一个手脚麻利的下属,那事情肯定办得好。
如果主要扰动在回路以外,但是可以预知,那就要用另一个办法,就是马鹿前面说到的前馈了。还是用洗热水澡的例子。如果冷水管和同一个水房的抽水马桶功用,你在洗澡,别人一抽水,那你就变煮熟的龙虾了(本想说猴子PP的,但是那个不雅,我们要五讲四美不是?)。这个时候,要使那个人在抽水的同时告诉你一声 ,你算好时间,算好量,猛减热水,那温度还是可以大体不变的。这就是所谓前馈控制(feedforward control)。前馈控制有两个要紧的东西:一是定量的扰动对被控变量的影响,也就是所谓前馈增益;二是扰动的动态,别人抽水到洗澡龙头的水温变热,这里面有一个过程,不是立时三刻的。如果可以精确知道这两样东西,那前馈补偿可以把可测扰动完全补偿掉。但实际上没有精确知道的事情,要是指望前馈来完全补偿,弄巧成拙是肯定的。所以前馈通常和反馈一起用,也就是在PID回路上再加一个前馈。一般也只用静态前馈,也就是只补偿扰动对被控变量的静态影响,而忽略扰动的动态因素,主要是为了静态前馈已经把前馈80%的好处发掘出来了,动态前馈既复杂又不可靠,在PID回路里很少有人用。理论上的前馈都是在PID的控制作用上再加一个前馈作用,实际上也可以乘一个控制作用。乘法前馈的作用太猛,我从来没有用过,一般都是用加法。在实施中,前馈是和扰动的变化(也就是增量)成比例的,所以扰动变量不变了,前馈作用就消失,否则,整定前馈控制增益会对PID主回路造成扰动。前馈增益可以根据粗略计算得到,比如说,抽水的量会造成温度下降多少、需要调整多少热水流量才能维持温度,这不难从热量平衡算出来。不想费这个事的话,也可以从历史数据中推算。一般算出来一个前馈增益后,打上7折甚至5折再用,保险一点,不要矫枉过正。
前馈作用一般是用作辅助控制作用的,但是在特殊情况下,前馈也可以作为“预加载”(pre-loading)作为基准控制作用。比如说,在一个高压系统的启动过程中,压力可以从静止状态的常压很快地什到很高的压力。高压系统不容许阀门大幅度运动,所以控制增益都比较低,但是这样一来,启动升压过程中,压力控制的反应就十分迟缓,容易造成压力过高。这时用压缩机的转速或高压进料的流量作前馈,将压力控制阀“预先”放到大概的位置,然后再用反馈慢慢调节,就可以解决这个问题。
有点搞笑兄在前面提到用单个阀门有时难以控制大范围变化的流量,这是一个很实际的问题。工业阀门一般turn down只有10:1,也就是说,如果这个阀门的最大流量是100吨/小时的话,低于10吨/小时就难以控制了,当然,高于90吨/小时也几近失去控制。所以,要真的保证0-100的精确控制,需要将一个大阀和一个小阀并列,小阀负责小流量时的精确控制,大阀负责大流量时的精确控制,这就是所谓的分程控制(split range control)。分程控制时,小阀首先打开,超过小阀最大流量是小阀就固定在全开位置,大阀开始打开,接过控制。这是开-开型分程控制。也有关-开型分程控制,比如反应器夹套温度控制,随温度逐渐上升,冷却水逐渐关闭,直到冷却水全关,加热蒸气开始打开。分程控制当然不一定只有两截,三截甚至更多都是可以的,道理都一样。分程控制的问题在于不同阀门的交接点。阀门在特别小的开度时,控制非常不灵敏,前面说到的10:1也是这个道理。所以实用中,开-开型分程控制常常在交接点附近有一段重叠,也就是小阀快要全开但还没有全开时,大阀已经开始动作,这样,到小阀全开、不能再动弹时,大阀已经进入有效控制范围。关-开型分程控制常常在交接点设置一个死区,避免出现两个阀都有一点点开度的情况。分程控制的交接点的设置有一点讲究,应该根据阀的大小。比如A阀比B阀大一倍,那分程点应该设在1/3先开B阀,而不是懒汉做法的1/2。
很多过程参数都是可以测量的,但也有很多参数是没法直接测量的,这时,如果能够通过别的可以测量的过程参数来间接计算真正需要控制的参数,这就是所谓的推断控制(inferential control)。比如精馏塔顶的产品纯度可以用气相色谱(gas chromatograph,GC)来测量,但结果要等40分钟才能出来,用来做实时控制,黄花菜都凉了。推断控制是和“软传感器”(soft sensor)的概念紧密相连的。对精馏塔塔顶纯度这个例子来说,可以用纯度和塔顶温度、压力作一个数学模型,用可以测量的温度和压力,间接计算出纯度。在计算机控制普及的今天,这是很容易实现的,但是在很多地方,推断控制仍然被看成很神秘的东西,悲哀。
有的时候,对同一个变量有不止一个控制手段。比如说,风冷器有风扇的转速可以调节,也有百叶窗的开度可以调节。风扇转速的效果快,控制精确;百叶窗开度的效果猛,不容易掌握,但有利于节能。所以,可以用风扇的快速响应来控制温度,但是用百叶窗开度来通过温度间接地缓慢地影响风扇的转速,使风扇转速回到最经济的设定。当然百叶窗开度的控制回路必须要比风扇转速的控制回路整定得慢得多,一般是缓慢的纯积分控制,否则两人要打架。由于这相当于控制风扇转速的“阀位”,工业上称其为阀位控制(valve position control)。这个阀位控制也可以变一变,风扇转速高于某一数值(比如80%的最大转速)时,把百叶窗开大一格,还是高就继续开大;风扇转速低于某一数值(比如低于20%最大转速)时,把百叶窗关小一格。这实际上是一个单向的积分作用,不同的地方有两点:
一、有两个设定值,由风扇转速是高还是低而定
二、积分作用只有在风扇转速在这两个“极限”的外面起作用,在里面时,百叶窗的开度不变
这样,风扇转速不必回到一个特定值,而是可以在一个范围内浮动。
另外一个两个控制器“竞争”一个控制阀的情况是选择性控制(override control或selective control)。举个例子,锅炉的温度由燃料流量控制,温度高了,燃料流量就减下来,但是燃料流量低到燃料管路压力低于炉膛压力,那要出现危险的回火,所以,这时,燃料管路压力就要接管控制,而牺牲炉膛温度。换句话说,正常时候,炉膛温度控制起作用,燃料管路压力低于一定数值时,燃料管路压力控制器作用。在实施时,就是炉膛温度控制器和燃料管路压力控制器的输出都接到一个高选器,然后搞选器的输出接到实际的燃料阀。这个概念很清楚,但是初次接触选择性控制的人,常常容易被高选还是低选搞糊涂,明明是压力太低,怎么是高选呢?其实,只要记住高选还是低选是从阀门这一头看的,和温度、压力的高度没有关系。如果“非常”变量超过界限了,你要阀门打开,那就是高选;你要阀门关闭,那就是低选。
- 相关回复 上下关系8
业余的比专业的强啊 中国农民 字82 2005-11-12 22:59:29
老农此言差矣 晨枫 字385 2005-11-13 12:23:11
这就是国内和国外的差别 中国农民 字277 2005-11-13 13:50:39
【原创】自动控制的故事(八)复杂结构PID
🙂插进来扯下洗澡水的冷热 phjhuan 字773 2010-07-29 23:18:21
🙂你说的就是不用T形三通,而是用Y形三通 晨枫 字142 2010-07-30 06:07:29
😄花,得宝. 鹦鹉螺 字138 2007-08-09 11:22:44
😄我倒是觉得渐入佳境 睡虫 字66 2005-11-13 23:33:24