网站网页设计设计方案,杭州建设信用网新网站,WordPress设置两个域名,做网站的参考书前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法#xff0c;基本已经覆盖了无模型和简单模型PID控制经典算法的大部。再接下来的我们将讨论智能PID控制#xff0c;智能PID控制不同于常规意义下的智能控制#xff0c;是智能算法与PID控制算法的结合#xff0c…前面我们讨论了经典的数字PID控制算法及其常见的改进与补偿算法基本已经覆盖了无模型和简单模型PID控制经典算法的大部。再接下来的我们将讨论智能PID控制智能PID控制不同于常规意义下的智能控制是智能算法与PID控制算法的结合是基于PID控制器的智能化优化。
在本章我们首先来探讨一下专家PID算法。正如前面所说专家PID算法是专家系统与PID算法的结合与应用优化所以我们接下来先简单了解专家控制。
1、专家控制的基本思想
专家控制是智能控制的一个分支是专家系统的理论和技术同控制理论、方法与技术相结合在无对象模型的情况下模仿领域专家的经验来实现对被控对象的控制。
专家控制一般由知识库和推理机构构成主体框架按照某种策略及时选用恰当的规则进行推理输出实现控制。其基本结构如下 有上图我们不难发现影响专家控制器控制精确性的主要是知识库表达的准确性以及推理机的正确性。知识库越完备、越准确那么对你被控对像的状态识别也就越准确。当然推理机设计的差别也会对控制结果有影响。
专家控制器一般来说分为2中实现形式被称之为直接型专家控制器和间接型专家控制器。所谓直接型专家控制器就是用专门设计的专家控制器直接对被控对象进行控制的方法。该控制器任务和功能都比较简单一般都是实时在线运行直接对被控对象进行控制。其结构图如下 而所谓间接型专家控制器是指专家控制器作为其他控制器的辅助方式或者相互结合的控制方式来实现的一种控制器。专家系统通过高层决策来影响控制器输出而这种高层决策可以是在线也可以是离线器不会直接控制被控对象。其结构图如下 所以我们所要讨论的专家PID算法应该是一种直接型专家控制器因为专家系统决策与PID算法是结合在一起的并没有独于PID算法的专家控制器而是专家决策直接决定PID算法机器输出这与直接型专家控制的定义是相符的。
2、专家PID的设计思路
专家PID控制就是基于被控对象和控制规律的各种知识而不需要知道被控对象的精确模型利用专家经验来设计PID参数。怎么来实现这一过程呢我们来分析并推导这一算法。
我们假设当前为第k采样当前偏差为e(k)同样前一采样时刻的偏差为e(k-1)而前两个采样时刻的偏差为e(k-2)则可以得到两次的偏差增量为 清楚了以上公式我们再设定偏差的一个极大值记为Mmax设定一个偏差较大的中间值记为Mmid设定一个偏差的极小值记为Mmin。根据以上偏差、偏差增量以及偏差极值的设定我们分析如下
1如果|e(k)|Mmax
这种情况说明偏差的绝对值已经很大了不论偏差变化趋势如何都应该考虑控制器的输入应按最大或最小输出以达到迅速调整偏差的效果使偏差绝对值以最大的速度减小。 这种情况下其实相当于实施开环控制是一种对偏差出现极限情况的快速响应。
2如果|e(k)|≤Mmax
这种情况我们需要更具系统的变化趋势来分析具体的情况实施不同的控制方式我们引入偏差增量来协助分析。
2.1当e(k)*∆e(k)0或者∆e(k)0时
这种情况说明偏差在朝向偏差绝对值增大的方向变化或者偏差为某一固定值此时我们再判断偏差的绝对值与偏差的中间值Mmid之间的关系。
2.1.1此时如果|e(k)|Mmid说明偏差也较大可考虑由控制器实施较强的控制作用以达到扭转偏差绝对值向减小的方向变化并迅速减小偏差的绝对值。 2.1.2此时如果|e(k)|≤Mmid说明尽管偏差是向绝对值增大的方向变化但是偏差绝对值本身并不是很大可以考虑控制器实施一般的控制作用只需要扭转偏差的变化趋势使其向偏差绝对值减小的方向变化即可。 2.2当e(k)*∆e(k)0且∆e(k)*∆e(k-1)0或者e(k)0时说明偏差的绝对值向减小的方向变化或者已经达到平衡状态此时保持控制器输出不变即可。即U(k)U(k-1)。
2.3当e(k)*∆e(k)0且∆e(k)*∆e(k-1)0时说明偏差处于极限状态。如果此时偏差的绝对值较大|e(k)|Mmid可以考虑实施较强控制作用。 如果此时偏差绝对值较小|e(k)|Mmid可以考虑实施较弱控制作用。 其中k1为增益放大系数k1取大于1的值k2为增益抑制系数取大于0而小于1的值。
3如果|e(k)|Mmin
这种情况实际上说明偏差绝对值很小这种偏差有可能是系统静差引起的此时必须要引入积分作用实施PID控制或者PI控制。 Kp和Ki可以适当减小以减小控制作用。当偏差小到一定程度后甚至可以引入死区的概念是系统稳定下来而不需要去进行调节。
3、专家PID算法实现
前面我们了解了专家PID控制器的基本原理并分析了一个较为常见的专家PID的控制规则。分析规则的过程其实也是一个推理的基本过程所以我们得到了基本的规则库同时也有相应的推理机接下来我们就来实现这一算法。
首先定义一个专家PID的结构体对象
/*定义结构体和公用体*/
typedef struct
{float setpoint; /*设定值*/float kp; /*比例系数*/float ki; /*积分系数*/float kd; /*微分系数*/float lasterror; /*前一拍偏差*/float preerror; /*前两拍偏差*/float result; /*PID控制器结果*/float output; /*输出值0-100为百分比值*/float maximum; /*输出值上限*/float minimum; /*输出值下限*/float errorabsmax; /*偏差绝对值最大值*/float errorabsmid; /*偏差绝对值中位值*/float errorabsmin; /*偏差绝对值最小值*/
}EXPERTPID;
在上面分析的基础上我们很容易写出来一个专家PID的控制器如下
void ExpertPID(EXPERTPID vPID,float pv)
{float thiserror;float deltaerror;float lastdeltaerror;float result;//本次调节输出值thiserrorvPID-setpoint-pv;deltaerrorthiserror-vPID-lasterror;lastdeltaerrorvPID-lasterror-vPID-preerror;if(abs(thiserror)vPID-errorabsmax){/*执行规则1*/if(thiserror0){resultvPID-maximum;}if(thiserror0){resultvPID-minimum;}}if((thiserror*deltaerror0)||(deltaerror0)){/*执行规则2*/if(abs(thiserror)vPID-errorabsmid){resultvPID-result2.0*(vPID-kp*deltaerrorvPID-ki*thiserrorvPID-kd*(deltaerror-lastdeltaerror));}else{resultvPID-result0.4*(vPID-kp*deltaerrorvPID-ki*thiserrorvPID-kd*(deltaerror-lastdeltaerror));}}if(((thiserror*deltaerror0)(deltaerror*lastdeltaerror0))||(thiserror0)){/*执行规则3*/resultvPID-result;}if((thiserror*deltaerror0)(deltaerror*lastdeltaerror0)){/*执行规则4*/if(abs(thiserror)vPID-errorabsmid){resultvPID-result2.0*vPID-kp*thiserror;}else{resultvPID-result0.6*vPID-kp*thiserror;}}if((abs(thiserror)vPID-errorabsmin)(abs(thiserror)0)){/*执行规则5*/resultvPID-result0.5*vPID-kp*deltaerror0.3*vPID-ki*thiserror;}/*对输出限值避免超调*/if(resultvPID-maximum){resultvPID-maximum;}if(resultvPID-minimum){resultvPID-minimum;}vPID-resultresult;vPID-preerrorvPID-lasterror;vPID-lasterrorthiserror;vPID-output(result/(vPID-maximum-vPID-minimum))*100;
}
4、专家PID总结
本节我们实现了一个专家PID控制器这是一种专家规则直接与PID算法相结合的直接型专家控制器。通过分析PID的调节过程总结了5条规则以这5条规则为基础实现了上述的算法。当然这只是一个普遍型的规则库对于不同的被控对象和控制要求我们可以采用不同的判断规则而且各参数的选取需依赖于专家经验所以规则的获取和使用也会有不同方式。
欢迎关注