水箱液位控制中的PID算法
基于液位控制系统的 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