事情缘起:前段时间做一个模拟量控制的设备,为了经济实惠,就买了一个国产plc,拿到手才发现没有pid控制功能,于是找厂家,厂家给了一个温控的程序,写入后根本达不到想要的效果。这件事也就一直搁置下来。
直到最近,手里有一块步科的hmi,型号是GL070E,用的软件是Kinco DTools V3.5,说明书里面讲全面支持标准C语言C89,看了以后确实令人兴奋,于是用C写了pid程序。由于宏代码是一次读取写入的,不能实时,所以转换过程比较繁琐,不过只要知道pid算法和原理,就能改造它。所以把原来的程序从新编辑写入,运行了一下效果挺好,虽然只是一个初级的版本,但是只要有了基础就能盖高楼。
下面把pid算法和原理写一下,只是个人认识:
PID算法的控制流程很简单,即利用反馈值来检测偏差信号,并通过偏差信号来控制输出量。控制器本身就是比例、积分、微分三个环节的加和。其功能框图如下:
然后查阅资料找到pid算法的数学函数公式,其中Kp为比例带,TI为积分时间,TD为微分时间。PID控制的基本原理就是如此:
比例就是用来对系统的偏差进行反应,所以只要存在偏差,比例就会起作用。
积分主要是用来消除静差,所谓静差就是指系统稳定后输入输出之间依然存在的差值,而积分就是通过偏差的累计来抵消系统的静差。
而微分则是对偏差的变化趋势做出反应,根据偏差的变化趋势实现超前调节,提高反应速度。
(1)PID的简单实现
位置型PID就是以下面的位置型公式为基础,也就是将上面的PID算法公式离散化以后进行hmi宏编辑。
有时候看文字很难理解,上百度搜一下pid是什么,人云亦云,很多说法应该都是抄来抄去的,如果真相信的话还真是误入歧途,比如步进式pid和增量式pid的区别,网上很多都是讹传,真想理解它就得对照公式分析数据,在运行过程中从数据监视窗口里看p,i,d在控制过程中三个值怎么变化,就能明白它的控制原理。当然plc里面的pid不会提供这些数据。
根据数据变化得出一个结论:步进式pid主要用在线性系统控制
下一步编一个增量pid,到时再進一步论述两者的区别和用途。
楼主最近还看过