您现在正在浏览:首页 > 职教文章 > 求职技巧 > 水箱液位控制中的PID算法

水箱液位控制中的PID算法

日期: 2010/11/23 浏览: 1 来源: 学海网收集整理 作者: 佚名

基于液位控制系统的 PID 控制算法

谭彩铭 南京理工大学测控技术与仪器系

摘要:本文对机械院 420 实验室的液位控制系统进行了探讨。不使用其中的加热器、流量计

等环节。集中精力研究液位控制过程,通过多次实验探寻比例、积分、微分各系数变化对液

位控制品质的影响,实验结果和理论推想一致。本文结合实验数据阐述了比例、积分、微分

各系数变化对液位控制品质的影响。在此基础上,最终确定的 PID 参数可以使液位稳定在

29.8cm 到 30.2cm 的范围(期望值为 30cm)。



一、液位控制系统介绍

这是个液位控制系统,如下图所示



图 1 液位控制系统装置示意图

1.上位水箱 2.手动阀门 3上位增压泵(家用增压泵,型号:UPA 15-900 160,格兰富水泵

(上海)有限公司) 4.比例阀(厂商产品型号:060459R,德国宝德公司) 5.下位水箱 6.

下位增压泵 7.手动阀门

现在要实现的任务是使上位水箱的液位稳定在某一期望值。在这个过程中,上位增压泵

和下位增压泵均须在全速运行,手动阀门 2 和 7 在某一固定的开度。如果没有实时的调节,

水箱中的液位高是不可能长时间稳定在某一期望值的。故对阀门 4 进行实时的调节,液位高

了,就把比例阀开小点,液位低了,就把比例阀开大点,当然不可能让人一直呆在那去手动

完成这样的控制。要实现自动控制,就需要液位传感器代替人的眼睛,用计算机代替人的大

脑。

1

液位传感器为 HM 型压力传感器,它要测的当然是上位水箱的液位,测得值要传送给

计算机,就需要有数采卡和必要的信号条理电路,计算机分析液位若是偏高了(比期望值大

了),就输出个较大的值给比例阀,让之开大点,让水流快点。这之间就必然需要 DA 转换

单元了。水的液位也许基本稳定住了,但控制效果有好坏。比如期望值为 30cm,有的控制

使液位在 25cm 到 35cm 之间变化,而且液位在不停地上升和下降;有的控制使液位就在 30cm

的左右,上下只有 0.1cm 的波动。而这些,在硬件不可改变的情况下,全在计算机的控制了,

或者说就是人赋予它的算法。



二、PID 控制算法

有种算法,叫做 PID 算法,或曰比例-积分-微分算法。

若没有计算机,真的让一个人坐在水箱旁边去控制比例阀时,你会怎么做呢?发现水箱

的液位高了,就把比例阀开大些;发现水箱的液位低了,就把比例阀开小些;忍不住须要上

个厕所,回来时发现,水箱液位已远远超过期望值 30cm 了,赶紧把比例阀开到底。这个过

程当中,你用的就是比例算法。

比例阀的开口大小在某个程度时,进水和出水的速率大致相等,记下这个开口大小,用

一数字表示为 130。比例阀开小些,这个数字就减小些,比例阀关掉时,对应的数字就是 0,

比例阀开到最大时,对应的数字为 220。设当前液位值为 h,你希望使液位保持在的高度值

(期望值)为 ,这时比例阀的开度为0h )(130 0hhKc ?+ ,这里 为一常数,且大于 0。

这样的运算对计算机来说太容易了。计算机算得该值,再将该值传给比例阀,控制比例阀的

开度。当然计算机不会去上厕所,如果计算机也死机了一会儿,等它活过来时,发现液位传

感器传给它的液位值 h 远远超过 了,那么经过

cK

0h )(130 0hhKc ?+ 运算后,会达到 220,

使比例阀开到底了。

有人说,不一定,这跟 的取值有关系。对,那么 的取值到底有什么影响呢? cK cK



1、比例系数 对控制品质的影响 cK

为探寻之,按上述思路用 LabVIEW 编写了一个简单的比例算法去控制这个系统,其程

序面板如下图 2 所示。



图 2 简单的比例算法控制程序

2

上图稳态字即设为 130,期望液位是 15cm

下图是 =10 时,液位随时间的变化情况。 cK



图 3 =10 时,液位随时间的变化曲线 cK

下图是 =30 时,液位随时间的变化情况。 cK



图 4 =30 时,液位随时间的变化曲线 cK

好像看不出什么差别,那么看看 =100 时的。 cK

3



图 5 =100 时,液位随时间的变化曲线 cK

再看看 =150 时的。 cK



图 6 =150 时,液位随时间的变化曲线 cK

发现了什么?振荡,当 越大越易产生振荡,且振幅越来越大。观察控制比例阀的运

算式 ,当 达到 150 时,h 偏大 0.5cm,就会使比例阀增大到 205,此时

比例阀已几乎完全打开,全速放水,在经过 1s 的延迟,水放掉了许多,这时 h 又偏小了 0.5cm,

又会使比例阀减小到 55,比例阀动作太大,使水的液位变化幅度过大,振荡明显。(笔者的

cK

)(130 0hhKc ?+ cK

4

描述风格旨在希望让读者更容易明白笔者的意思,不一定就是变化了那么多,但从定性的角

度来看是一致的)下图为 =150 时,比例阀的控制字随时间的变化。 cK

图 7 =150 时,比例阀控制字随时间的变化曲线 cK

比例阀控制字振荡的幅度过大必然导致液位的大幅振荡。

另外,比例控制字 大会使控制响应更快,这不难理解,反馈值越大,比例阀反应越

明显。从图 3、图 4、图 5 和图 6 的曲线上升速率也可大致看出。另外发现图 3、图 4、图 5

和图 6 的过冲基本一致,那是由于液位控制系统滞后很小,不会像加热丝一样,即便停止加

热了,加热丝上的余热会使被加热物体温度继续上升。这里,比例阀关掉,就不会再流出水,

最主要的滞后就是人为地在图 2 中加入了 1s 的延迟。由于滞后很小,一旦超过期望液位,

比例阀,反馈值很快变大,几乎同时,比例阀开大,流出的水就快了。对滞后较大的系统,

越大,过冲就会越大。

cK

cK



2、积分系数 对控制品质的影响 iK

观察下图为用图 2 程序所控制的液位图, =5,期望液位是 15cm,稳态字是 130。发

现其控制的液位值随时间的流逝大部分都在 15cm 以上。这是由于稳态字并不绝对稳态,即

当比例阀的控制字为 130 时,进水速率是略大于出水速率的,那么将比例阀的稳态控制字改

为 131,那么又发现出水速率略大于进水速率了。实际实验就会发现,这个稳态控制字很难

掌握,或者说,没有一个确切的稳态字。比如,实验时间长了,进水的手动阀门会由于不断

地被水冲击,使开口略微增大,虽然很小,但随着时间的流逝小差就会积累为大差。稳态字

应该是一个范围,就在 130 附近。对于图 8 所示的情况,可以增大一点稳态字,但稳态字本

身就是一个有随机性的,不稳定的量。改它可能适用于此时,但不适用于彼时。这时可以将

每次取得的 值累加起来,即将

cK

0hh ? ∑ ? )( 0hhK ii 加入比例控制,即构成比例-积分算法,

计算式为 + 。 )(130 0hhKc ?+ ∑ ? )( 0hhK ii

5



图 8 =5 时,液位随时间的变化曲线 cK

有人会问,图 8 中,h 值小于 15cm 的部分也被累加进去了,后面大于 15cm 的部分即

便再加进去,和前面的累加值抵消了。为解决这个问题,就在程序中做这样的设置,当曲线

一旦穿越 15cm,就将前面的累加值归零处理。下图为基于此编写的一个简单的比例-积分控

制程序



图 9 比例-积分算法之一

下图为用图 9 程序得到的液位控制效果。在中间时间约在 400s 时加入了积分项,即将

值由 0 改到 3。

iK

6



图 10

可以将液位值拉到 15cm 处左右,另外这样的积分算法必然导致较频繁地振荡,它放大

了偏差影响。另外, 值过小是曲线开始阶段偏离较多的一个重要原因。因为 增大,

可使算得的控制字变化范围增大,这个范围超过了稳态控制字所在的那个范围,这样,稳态

控制字不稳定的影响就小了。这一点可以比较图 3、图 5、图 6、图 7、图 8 看出。下图为控

制字随时间的变化。

cK cK



图 11

上图中,在中间时刻加入积分环节,前面累积偏差值突然加入比例控制字,使控制字发

生较大的突变,使图 10 中液位迅速调整到 15cm 附近。积分算法就先暂时探讨到这。



3、微分系数 对控制品质的影响 dK

观察图 3、图 4、图 5、图 6、图 10,发现,液位值都有不同程度地振荡。如何解决这

个问题呢,即如何让液位值就控制在 15cm,看起来就像一条笔直的直线,或者顶多允许有

1mm 的偏差呢?

振荡,即液位在不停地上升或下降。故液位上升时,要阻止液位上升,即要使水流出得

快些,对应地要将比例阀开大些;液位下降时,要阻止液位下降,即要使水流出得慢些,对

7

应地要将比例阀开小些。如何判断液位是否上升呢?此次液位值比上次液位值高,就说明液

位上升了。计上次液位值为 ,据上述描述加入比例阀控制字的项为 ,这里

。在不考虑积分算法的情况下,计算式为 ,此即所

谓的比例-微分算法。用 LabVIEW 编写了简单的比例-微分算法,如下图所示。

1h )( 1hhK d ?

0>dK )()(130 1

0 hhKhhK dc ?+?+



图 12 比例-微分算法

利用此方法控制的效果并没有多好的改善,如下图所示。



图 13

分析原因,可能测得的液位值易产生毛刺,如下图所示,纵坐标被放大了,所以看起来

比较清晰。

8



图 14

观察上图的曲线上升阶段,趋势是上升的,所以我们希望在这一阶段,一直抑制其上升。

但看那些毛刺,在毛刺的下降沿,代入比例-微分计算式是不是反而促进液位上升了呢。为

解决这一问题,即要得到的是趋势,而不是局部,可以采取保留上几次速率值,作一次平均

后加入比例阀控制字。下图为将比例-积分-微分算法都编入的 LabVIEW 程序,基本上比较

完善了。



图 15 较完备的比例-积分-微分算法

上图中,对积分算法部分,比如期望液位值是 30cm,如果当前液位值为 5cm,也使用

积分算法就危险了,这么大的偏差多次累加后会使反馈值过大,而实际上大偏差时,比例算

法部分起的作用就已经非常明显了,故程序中加入了一限位值,即偏差在限位值之内,积分

9

起作用,此即所谓的积分分离 PID 算法。另外,为防止比例阀控制字计算值超过 220,加入

了一简单的判断语句。另外从图 13 中发现加入微分项时仍然振荡,最直接的想法就是微分

作用不够强(此时 ),还不能有效的抑制液位的变化,将 值增加到 5,得到图 16,

微分项是在中间时刻约 700s 时加入的,即将 输入框由 0 改到 5。

1=dK dK

dK



图 16



图 17

观察图 16 发现,没有效果,好像振荡的幅度反而更大了。经多次提高 值效果均不dK

10

明显之后,决定一下子将 值改到 100,效果终于出现了,如图 17 所示。 dK

图 17 中,振荡得到明显地抑制。继续将 值增加到 150,如下图所示。 dK



图 18

控制精度达到了 2mm 以内,看起来就像一条直线了。我们观察这时比例控制字随时间

的变化,如下图所示。



图 19 =150 时,比例阀控制字随时间变化曲线 dK

从上图中发现,比例阀得到了极其频繁地控制,促使液位得到较精确的定位。



4、再论积分系数 对控制品质的影响 iK

图 18 中,积分项 =0.01,那么,它起到的作用在哪呢?为将这个问题说清楚,将图

18 中的纵坐标范围缩小,得到下图曲线。

iK

11



图 20

发现液位值大于 30cm 次数居多,观察积分项 ∑ ? )( 0hhK ii ,随着时间的流逝,它的

值肯定是越来越大,上图如果一直采集下去,一定会改变液位值大于 30cm 次数居多的情况

的,再看看图 9 中的比例积分算法,没有必要当液位值越期望值时将积分项作归零处理,实

际上比例控制足以把液位控制在期望值附近了,而积分控制更像是用于精密调节的。下图为

完整的一次液位控制过程。



图 21

从上图中发现,过冲被抑制掉了,这是微分控制的功劳,振荡得到有效地抑制,这也是

微分控制的功劳。当然,微分既然抑制液位变化,故也会减小液位的上升时间,这好办,可

12

以向积分控制一样,在偏差在某一范围内时,让微分起作用。另外,这里积分系数 可以

在大些,可以更快减少稳态误差。

iK

另外,PID 算法对不同的系统,背景不一样,程序也会有变化,各参数也会有变化,须

要考虑的关键因素也会不一样,但 PID 算法的灵魂不会变,须要实验加分析,最终可以得

到较好的控制效果。

由于控制经验不足,不免有错误之处,望指正。

13


水箱液位控制中的PID算法.pdf

返回顶部