串级控制系统pid怎么调,串级控制pid参数怎么调节
我们发表了一系列与PID控制器相关的文章,包括经典PID控制器和参数自适应PID控制器。虽然该系列PID控制器实现了主要功能,在实际使用中取得了良好的效果,但仍有许多细节可以改进,以提高性能和灵活性。因此,在本文中,我们将讨论PID控制器对串级调节等复杂控制方法的改进。
1.提问
上面提到的PID控制器都是基于单回路的。但有时同一个被控对象可能受到两个控制变量的影响,或者为了对一个被控对象实现更精确的控制,需要同时引入两个控制变量才能得到更好的结果。这时,我们可以将对被控对象起主要作用的控制变量定义为主变量,将对应的控制器定义为主控制器;在被控对象中起次要作用的控制变量定义为从变量,相应的控制器作为从控制器。然后建立了串级调节系统。
从上面的控制框图可以知道,如果把二次回路看作一个整体执行单元,那么主控制回路就是单回路PID控制。如果只考虑二次回路,那只是单回路PID控制。但不同的是,二次回路的设定值不是我们输入给它的,而是由主控制器的输出施加给它的。因此,我们想解决PID控制器的串联问题。我们需要考虑的是如何将主控制器的输出作为设定值应用到辅助控制器上。
2.分析和设计
提出了实现PID控制器串级应考虑的主要问题。接下来,我们需要分析如何解决这个问题,并将其数字化。这里,我们先考虑几个方面。
第一个问题是主控制器的输出模式。一般来说,PID算法的输出就是实际的物理量。在我们的PID控制器中,我们输出实际的物理值和百分比。
第二个问题是二级控制器的输入方式。PID控制器设定值的输入必须与控制变量的物理量相对应。显然,用主控制器的物理值作为子控制器的设定输入肯定是不合适的。所以我们只用百分比作为子控制器设定值的输入。
第三个问题是主从控制器的组合。因为主控制器百分比输出被用作辅助控制器的设定输入。而二次控制器的设定值是一个物理量,我们需要根据二次控制变量的百分比和范围得到二次控制器的真实设定值。
第四个问题是如何调整PID算法。PID算法的调整并不复杂。其实我们只需要根据是否级联来处理设定值。如果不是级联,则正常处理;如果是串级,就要根据输入和量程来计算设定值。我们可以用下面的流程图来说明:
为了保持PID控制器算法的严谨性,我们不需要在PID控制算法中加入这个设定值的运算,只需要独立处理设定值的计算和赋值即可。
3.软件实现。
我们设计了如何实现PID控制器的级联。我们还需要在软件中实现算法,才能真正得到想要的结果。
首先,我们向PID对象类型添加一个属性来标识它是否是级联的。该属性用于识别该PID控制器是否处于串级控制状态。只有辅助控制器需要设置为级联状态。
其次,我们将用于串级次级控制器的设定值输入的代码添加到PID控制器中。其实很简单,就是在级联状态下,将输入的设定值百分比计算为物理量范围下设定值的最终值。
1 /*一般PID控制器采用增量算法,具有变积分、梯形积分和抗积分饱和功能。微分项采用不完全微分和一阶滤波。alpha值越大,过滤效果越强*/
2空PID调节器(CLASSICPID *vPID)
3 {
4 float thisError
5浮动结果;
6浮动因子;
7浮动增量;
8 float pError,dError,iError
九
1if(* vpid-PMA 1)//手动模式
11 {
12 vPID-输出=*vPID-
13 //设置无扰切换
14 vPID- result=(vPID-最大值-vPID-最小值)*vPID-输出/100.0 -vPID-最小值;
15 *vPID- pSV=*vPID-
16 vPID-设定点=*vPID-
17 }
1脉冲//自动模式
19 {
2IF(vpid-sm==smooth _ enable)//设定值平滑变化。
21 {
22 smooth setpoint(vPID);
23 }
其他24个
25 {
26 if(vPID- cas==CASCADE) //级联处理
27 {
28 vPID- setpoint=(vPID-最大值-vPID-最小值)*(*vPID- pSV)/100.0 vPID-最小值;
29 }
其他30个
31 {
32 vPID-设定点=*vPID-
33 }
34 }
35
36 this error=vPID-setpoint-(* vPID-pPV);//获取偏差值
37结果=vPID-结果;
38 if (fabs(thisError) vPID-死区)
39 {
40 pError=this error-vPID-lasterror;
41 I error=(thisError vPID-lasterror)/2.0;
42 dError=this error-2 *(vPID-lasterror)vPID-preerror;
43
4//可变积分系数采集
45 factor=VariableIntegralCoefficient(this error,vPID- errorabsmax,vPID-error absmin);
46
7//用不完全微分计算微分项增量
48 vPID-delta diff=(* vPID-pKd)*(1-vPID-alpha)* dError vPID-alpha * vPID-delta diff;
四十九个
50增量=(* vPID-pKp)* pError(* vPID-pKi)* factor * I error vPID-delta diff;//增量计算
51 }
其他52个
53 {
54 if((fabs(vPID-设定点-vPID-最小值)vPID-死区)(fabs(* vPID-pPV)-vPID-最小值)vPID-死区))
55 {
56结果=vPID-最小值;
57 }
58增量=0.0;
59 }
60
1//正负动作设置
62 if(vPID- direct==DIRECT)
63 {
64结果=结果增量;
65 }
66其他
67 {
68结果=结果-增量;
69 }
70
7/*对于输出限值,避免过冲和积分饱和*/
72 if(结果=vPID-最大值)
73 {
74结果=vPID-最大值;
75 }
76如果(结果=vPID-最小值)
77 {
78结果=vPID-最小值;
79 }
80
81 vPID-preerror=vPID-lasterror;//为下一次操作存储偏差。
82 vPID-lasterror=this error;
83 vPID-result=结果;
84
85 vPID-output=(vPID-result-vPID-minimum)/(vPID-maximum-vPID-minimum)* 100.0;
86 * vPID-pMV=vPID-output;
87 }
80} 4.摘要
这里,我们将串级控制的配置参数添加到PID控制器中。当一个PID控制器被用作串级调节的辅助控制器时,我们启用串级配置参数,这样当主调节器的输出被设置到辅助调节器时就可以实现串级。此时,主控制器的串级配置参数不需要启用,它们的设定值由操作员给出。
严格来说,串级控制不是单一的控制算法,而是一种控制方式。然而,为了实现串级控制模式,我们需要对PID控制算法进行必要的自适应修改。
欢迎关注:
想更方便及时的阅读相关文章,请关注我的微信微信官方账号【木南创智】
转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。