
本文只供参考和学习,不可直接复制抄袭。
一种PID控制仿真的实现
杨鹏
(白银有色集团股份公司 装备与自动化控制研究所,甘肃 白银 730900)
摘要:由于PLC、DCS在当今工业领域的普遍使用,技术人员可以通过“编程”的方式,快捷廉价地实现PID控制,所以PID控制越发显得重要了。本文详细介绍了PID控制理论;探讨了PID控制的应用场合,以及使用时的注意事项;由于计算机的工作方式具有离散型,所以对相关公式进行了离散化,以便于计算机仿真,由于阶跃信号的特殊性,无法进行较好的离散化,本文采用了一种改进的离散化阶跃信号,实验证明,这种改进型的离散化阶跃信号能有效地减少误差;介绍了面向对象思想在编程领域的应用,使用面向对象语言实现了PID控制仿真。
关键字:PID控制;计算机仿真;改进型离散阶跃信号;面向对象语言
中图分类号:TP15 文献标识码:A
Realization of a kind of PID control simulation
YANG Peng
(Institute of equipment and automated control ,Baiyin Nonferrous Metal Group Co.Ltd., Baiyin 730900,China)
Abstract:As a result of PLC,DCS in the industry today is in common use, technical personnel can through the "programming" way to cheaply to realize PID control, so PID control theory is increasingly becoming important. In this paper,the PID control theory is introduced; The application conditions of the PID control are introduced, the suitability of the PID for use is introduced; As the computer's way of working is discrete, so the relevant equations are discretized in order to computer simulation, due to the particularity of the step signal, it can not be good discretized, an improved discretization step signal is adopted, the facts have proved that it is effective to reduce the error. Object-oriented thinking in the programming field is introduced, realization of a kind of PID control simulation is done with the object-oriented language.
Key Words:PID control; computer simulation; improved discrete step signal; object-oriented language
1 引言
PID控制是“比例-积分-微分控制”的简称,根据人们的思维方式创建,具有符合人们思维习惯、经验资料丰富、易于改进,以及具有自动调节、抗干扰、等诸多优势,甚至在不需了解被控对象内部机理的情况下,也能实现“稳、准、快”控制,在模拟量的就地控制中,PID控制有着举足轻重的地位。另外,由于PID控制会使得执行机构频繁动作,所以PID控制有一定的适用范围。在当今的工业生产中,现场总线技术使得工业控制呈现为“网络化”特征,而由于以PLC、DCS为代表的数字式控制器的普遍使用,技术人员可以通过“编程”的方式实现控制逻辑,所以如今的工业控制又呈现为“软件化”的特征。工业控制的软件化,使得技术人员可以非常容易、快速、廉价地实现PID控制,也可以非常方便地进行PID参数的整定,这是固态PID控制器根本无法实现的。市面上的PLC和DCS产品大都提供了现成的PID控制算法,很多类型的变频器也配备了软件化(设置参数即可)的PID控制器。实现一种PID控制仿真软件,不仅可以实现对现有系统的仿真,更是是学习PID控制理论的工具。本文介绍的PID仿真程序,采用了面向对象语言,从PID控制的基本理论出发,采用数值积分法[1],使用基本语句编程而成。
2 PID控制简介
至少在结构简单的线性负反馈系统中,PID控制是有效的。无论系统涉及什么设备,该系统的结构框图最终应该是一个简单的负反馈结构,所以PID控制最常见的应用场合为模拟量的“就地控制”。图1为一个带有PID控制的典型负反馈系统。
图1 带有PID控制的典型负反馈系统
在图1中,用字母P、I、D分别表示比例、积分、微分环节,这三个环节通过并联方式组成了PID控制器;PID控制器的输出为u(t),u(t)输入到执行器,执行器作用于被控对象,从而引起被控值的改变;被控对象的“被控值”则由传感器测得之后,反馈回去,与设定值进行减法比较,所得结果即为偏差e(t);PID控制器时刻对偏差e(t)进行运算,不断矫正输出u(t),使“被控制”和“设定值”趋于相等(如果系统稳定的话)。
如果系统处在稳态,事实上是处在动态平衡状态,当出现干扰、设定值改变等情况,造成偏差e(t)的绝对值过大,则在减法比较器、PID控制器环节的共同作用下,使偏差具有向零靠近的趋势,即被控值与设定值趋于相等。所以负反馈控制也称偏差控制。
由于系统处于动态平衡状态,会造成执行器频繁动作,容易形成硬件损伤,所以在有些情况下,应该避免使用PID控制,或者改进PID控制算法之后,再使用。
PID控制最常见的应用场合为“模拟量”的“就地控制”。PID只对模拟量有效,模拟量是指连续变化的量,如流量值等,相对而言,数字量指的是只有两种取值的量,如开关,当阀门完全打开时,产生24mA信号,无中间取值;再者,由于实际值和设定值存在“偏差”,PID控制器要对“偏差”要进行时时的运算,并将运算结果马上作用于执行机构,中间不能经过太多环节,延时严重的环节会使PID控制失效,甚至会出现系统紊乱的现象。
图2 PID控制的一种典型应用
图2所示为PID控制的一种典型应用,在这里“被控对象”是管道中的水,被控值是流量。流量计测得管道中水的流量,以4~20mA的标准电信号的形式,传输至可编程控制器(PLC)的模拟量输入模块,减法运算、PID运算全部由PLC完成,得到新值之后,PLC通过模拟量输出模块,以4~20mA的标准电信号的形式,传输至变频器,变频器则改变水泵上的电机转速,从而改变流量。
相对于PID控制器来说,执行器和被控对象可视为一个整体理解,即视为PID的下一个环节,尽管这两个环节可能是两个的物理设备,对于仿真软件来说,也没有必要将其拆分理解,后文提到的“被控对象”指的是执行器和被控对象。
对PID控制器建立时域数学模型,见式(1):
(1)
在式(1)中,e(t)为PID控制器的输入,是反馈的被控值与设定值的差,u(t)为PID控制器的输出,KP为放大系数,TI为积分时间,TD为微分时间。如果需要考虑u(t)的初始值时,则应该在式1右侧加上U0项。
参照式(1),可将式(1)右侧中的KP分配到每一项,将其展开,但在这里不采用展开式,因为参数KP、TI、TD有着更加直观、感性的意义,很多品牌的PLC、DCS产品提供的PID控制功能就是以式1为数学模型。PID控制器各个环节的作用,以及参数KP、TI、TD的意义,如下所述:
(1)比例环节:起主导作用。该环节的输出为偏差e(t)的KP倍, 但是比例环节无法消除静差,假设PID控制器无积分、无微分环节,仅有比例环节时,则稳定值与设定值可能总存在一个固定的差值,即静差。
(2)积分环节:主要作用为消除静差,提高控制系统的精度。积分作用的强弱取决于积分时间TI,TI越大,积分作用越弱,反之则越强。当设定值有较大变化时,或者其它原因,积分环节容易引起系统超调。使用PLC、DCS产品,如果想关闭积分环节,则需要将TI设置为无穷大,很多厂商自定义了“无穷大”符号。
(3)微分环节:对偏差的变化趋势做出反应,在偏差信号变化较大时,可以加快系统的反应速度,减少调节时间。但是微分环节容易放大干扰,所以有些情况下,不使用微分环节。
由PID控制还可衍生出P控制、PI控制、PD控制,由于比例控制其主导作用,所以无论哪种控制都离不开P环节。
实现PID控制,很重要的一项工作,就是整定PID参数。整定PID参数的方法很多,经典的方法有:经验凑试法、临界比例度法、4:1衰减法等。 但是,在实际生产中,有些PID参数整定法,实施起来存在很多困难,如临界比例度法要求产生测试信号,测试信号的产生往往不容易,再如临界比例度法要求系统达到临界振荡状态,并不是所有系统允许达到临界振荡状态,或者存在临界振荡状态。
PID控制方法指的是,将系统形成负反馈,加入PID控制器,通过整定KP、TI、TD这三个参数,达到控制目标。在生产实践中,PID控制方法也经常用于改善系统响应特征。如使得系统的响应加快,或使得系统的响应变钝;或使得被控对象的响应不出现超调、不出现振荡特征;或抑制干扰,等等。在这些情况下,很多试图寻求最优参数的PID参数的整定方法发挥不了作用,需要技术人员的不断调试。
3 建立“被控对象”的数学模型
在实践中,尽管对“被控对象”有较少了解的情况下,仍然可以实现PID控制,但是对于仿真软件来说,却需要一个形式上明确的数学模型,即不管数学模型的表达式,是否能准确地描述现实系统,但是在形式上必须要明确(可以是一个确定的微分方程),否则,就无法实现编程仿真。参考图1,由于PID控制器的数学模型已知,所以建立整个控制系统的数学模型,关键是建立“被控对象”的数学模型。常见的具体的建立数学模型的方法有:机理分析法、直接相似法(也称类比分析法)、系统辨别法、概率统计法、量纲分析法、图解法、定性推理法,等等。这些建模方法都有自身优势,有不同的应用场合[2]。
3.1 位式控制
尽管PID控制适用于结构简单的线性负反馈系统,但是很多具有“反馈结构”的控制系统,不能将其理解为“线性负反馈系统”,不能应用PID控制。假如有这样一种控制需求,某蓄水池,液位传感器将液位测量值反馈到控制器,当水位低于某个值时,控制器发出控制信号,加电启动电机水泵,向蓄水池注水,当水位高于某个值时,控制器发出控制信号,断电停止电机水泵。这里的电机水泵,要么较长时间处在停止状态,要么较长时间处在以恒定流量注水的工作状态。电机水泵在进行“状态改变”时,电机水泵的响应过程,相对“长时间停止,或者长时间恒定流量注水”来说,显得很短暂,加之系统精度要求不高,所以可以忽略电机在状态改变时的响应特征,此时,该电机水泵环节的数学模型为式(2):
(2)
在式(2)中,k为常数,x为输入信号,y为输出信号。
类似这样的控制系统,虽然具有“反馈结构”,但是我们更愿意称之为所谓的“位式控制”系统,或者称之为所谓的“联锁控制”系统,对其无需建立微分方程、传递函数形式的数学模型,甚至,对其建立任何形式的数学模型,都是没有必要的,仅仅进行逻辑分析即可。“位式控制”系统不能使用PID控制。在实践中,存在很多系统在忽略次要的响应特征之后,都可以理解为一个“位式控制”系统。
尽管,位式控制不能使用PID控制,但是在位式控制系统的局部可以考虑使用PID控制,在本案例中,如果要求电机水泵,可以抗内部因素(例如:液体密度、粘度、压强等有变化)、外部因素的干扰,而达到流量的恒定,则可通过流量计,测得水泵的出水流量值,将流量值负反馈回去,通过PID控制器实现对电机的调节,从而在系统局部利用了PID控制的优势。PID控制最常见的应用场合就是“模拟量的就地控制”。
另外,参照图1所示的“带有PID控制的典型负反馈系统”,如果图1中的执行器是一个恒值输出环节,那么在系统中加入PID控制器是无效的,因为PID控制器的输出是根据偏差计算而来的,是一个变化的值,很显然,“变化的值”输入到“输出恒定不变”的环节,就显得无意义了。
3.2 建立“被控对象”的数学模型[3]
对于整个控制系统来说,由于PID控制器的数学模型已知,所以关键是建立“被控对象”的数学模型。如果仿真软件用于仿真现实系统,其实用性取决于是否可以得到比较精确的“被控对象”的数学模型。但在很多领域中,由于机理知识不足,非线性元件普遍存在,多输入系统普遍存在、内外因素交织得太繁杂,观测手段不成熟,无法停工观测,测试信号无法产生,等等原因,造成不能建立精确的数学模型。
仿真软件需要形式上明确的数学模型,本文设定“被控对象”为“二阶环节”。二阶环节在控制领域具有重要的意义。在一定条件下,忽略一些次要因素,常常可以把一个高阶系统降为二阶系统来处理,仍然不失其基本特性[4]。
振荡环节为典型的二阶环节,其时域数学模型为式(3),
(3)
在式(3)中,c(t)为输出,r(t)为输入,To称为振荡环节的时间常数,ζ为阻尼比。当To>0,0<ζ<1时,系统对“阶跃输入”的响应特征呈现为振荡衰减。
4 连续时域数学模型离散化
由于计算机是在时钟的节奏下工作,其工作特点具有离散性,所以使用计算机实现PID控制仿真,需要对连续的时域模型进行离散化,形成差分方程。
表1 单项的离散化(向后差分) [5]
| 连续形式 | 离散形式 | 离散形式的简化 |
使用了PLC、DCS等数字式控制器的控制系统,事实上为采样控制系统。在仿真时,数字控制器的仿真步长最好为其工作周期;而连续的模拟量环节需要定义仿真步长(因为计算机以离散方式工作)。
设Ts为数字控制器的工作周期,T为模拟量环节的仿真步长,提高仿真的精度,T应该尽量大,为了编程的方便,Ts最好为T的整数倍。在编程初期,为了调试的方便,可令Ts等于T。
对式(1) PID控制器的时域数学模型进行离散化,那么,在kTs时刻,PID控制器的输出u与偏差e(作为PID控制的输入)之间的关系,如式(3)。
(3)
对式(3)振荡环节时域数学模型进行离散化,那么,在kTs时刻,输出c(k)与输入r(k)、c(k-1)、c(k-2)之间的关系,见式(4)。
(4)
本文介绍的PID仿真采用数值积分法,式(3)和式(4)则是编程的核心公式。
4.2 阶跃信号的离散化
阶跃信号是一种非常典型的信号,对开关的闭合断开动作、设定值的瞬间改变等等进行数学抽象时,都可以抽象为阶跃信号。图2中的ε(t)函数表示单位阶跃信号,单位阶跃信号为连续函数,在0时刻存在值,在0时刻的导数值为无穷大。
图2 阶跃信号的理解
通过“取极限”的方式,很容易理解阶跃信号,如图2所示,当w趋近于零时,则f(t)接近ε(t)。
图3 计算机拟合的阶跃信号
由于计算机的离散性,拟合的阶跃信号如图3所示,无法使0时刻的导数为无穷大。为此,本文采用了如图4的信号,这种信号形式基于所谓的“能量补偿”的想法,具体做法参照图4,使得ΔABC的面积等于ΔCDE的面积。再结合条件ΔABC与ΔCDF相似,很容易计算出在T时刻的值约为1.5h(设h为阶跃信号的高度,即线段AB的长度)
图4改进的阶跃信号
通过利用了“振荡环节”的临界状态,进行特例验证,发现图4所示的信号明显优于图3所示的信号。参考式3,当ζ=1时,“振荡环节”的阶跃响应为临界状态。但是,使用图4所示的信号代替阶跃信号,仅仅进行了简单的验证,是否具有普遍的合理性,需要进一步的研究。
5 使用面向对象语言C#编程
人们通过使用计算机语言进行编程,可以控制计算机工作。计算机语言的发展过程,是人们编程思想的发展过程。计算机语言大致经历了三个发展阶段:以汇编语言为代表的面向机器语言,贴近底层硬件,代码运行速度较快,但是晦涩难记,编程效率低下;以C语言为代表的面向过程语言,提出了一个重要概念“函数”, “过程”常认为是“函数”的早期称呼,函数概念的提出,使得程序员可以更好地组织代码;由于硬件的进一步的发展,软件规模可以进一步增大,此时,大规模软件的编程存在困难,于是将面向对象思想引入了编程语言。
面向对象语言,提出了一个重要的概念“对象”,每个对象都具有各自的属性、行为。使用面向对象,可以非常好地模拟现实世界,面向对象语言符合人类认识世界的习惯。在代码中创建对象,必须定义模版,也就是“类”的概念。C#语言就是一种优秀的面向对象语言,由微软公司推出。
编程时,定义了比较器、PID控制器、被控对象等类。
仿真进行时,可以每隔T时间(仿真步长)就在计算机屏幕上打印结果,也可以一次性计算出来所有的数据,存储在文本文件中,然后再观察、分析。
6 仿真实验
为了验证改进的离散化阶跃信号是否有效,仿真系统暂时去除反馈回路和PID环节,仅仅观察“振荡环节”的阶跃响应,使用改进前后的信号,在同等条件下,即在振荡环节的时间常数To、阻尼比ζ不变的条件下,得到两种输入信号的响应数据,二者互相对比,或与理论值对比。
在进行特例验证时,可利用“振荡环节”阶跃响应的特殊情况,进行一些验证,这些特殊情况对参数要求苛刻,响应曲线形态也很特别,所以更便于观察,参考式(1)。
(1)当To>0时,如果ζ=0,则“振荡环节”的阶跃响应为等幅振荡。
(2)当To>0时,如果ζ=1,则“振荡环节”的阶跃响应为临界状态。
在这里利用“振荡环节”的临界状态,进行特例验证,本文采用微软提供的C#语言进行编程[4],C#语言的浮点运算符合IEEE标准,所以浮点运算允许出现截断误差。为了减少截断误差的影响,采用C#语言提供的decimal数据类型,这种数据类型精度更高。
除了使用decimal数据类型外,还精心设计了相关参数,令仿真步长T=1,振荡环节的时间常数To=1000,阻尼比ζ=1,设定值为500。之所以这样设计参数,遵循了一些原则,观察式(2),由于式中多次出现T2并参与除法运算,所以设置T=1,这样可以有效抑制幂运算、乘法运算对误差的放大作用;而To的大小决定响应的上升时间,取值过小,则在仿真数据中,上升段的数据太少,仿真效果不细腻,而取值过大,则由于式中多次出现To2并参与除法运算,则增大截断误差的影响,反复权衡之后,To的取值为T的1000倍,比较好。
由于仿真数据过多,在此不便罗列,数据显示,仿真系统对两种信号的响应,虽然都大致符合理论值,但是存在差异,表2 罗列了部分仿真数据。
表2 特例验证形成的部分数据
| 仿真步数 | 改进前的响应 | 改进后的响应 |
| 第1步 | 0.0004990014980024970034960045 | 0.0007485022470037455052440067 |
| 第2步 | 0.0014960074880174760314600495 | 0.0019945104830249655454420718 |
| 第6000步 | 491.30576992749149149958741720 | 491.30949549387022675533659713 |
| 第199999步 | 500.00000000000000000000842298 | 499.99999999999999999999872902 |
| 第200000步 | 500.00000000000000000000842446 | 499.99999999999999999999872852 |
(1)采用改进的离散化阶跃信号之后,系统响应的稳态值更接近理论值。
(2)改进后的响应,略超前于改进前的响应,达到了矫正作用。
仿真数据表明,采用改进的离散化阶跃信号,能达到一定的效果,但是在这里,只是仅仅进行了简单的特例验证,是否具有普遍的合理性,以及怎样的验证方法是权威的验证方法,都需要进一步的研究。
7 结束
本文提到的PID控制仿真,采用的算法是“位置式PID算法”,可以很容易改成为“增量式PID算法”。经典的PID算法有微分先行PID算法、积分分离PID算法、不完全微分PID算法等等,事实上,还有更多的PID算法被提出 [6]。仿真系统采用的离散阶跃信号,是一种改进的离散阶跃信号,通过特例验证,其改进了仿真效果。
