PID算法
在稳定状态操作中,PID控制器管理输出数值,以便将错误(e)驱动为零。错误测量由设定值(所需的操作点)和进程变量(实际操作点)之间的差别决定。PID控制原则基于以下公式,其中将输出M(t)表示为比例项、积分项和微分项的函数:
其中:
作为时间函数的回路输出
回路增益
E 回路错误(设定值和进程变量之间的差别)
回路输出的初始值
为了在数字计算机中运行该控制函数,必须将连续函数量化为错误值的定期样本,并随后计算输出。数字计算机运算以下列相应的公式为基础:
其中:
采样时间n的回路输出计算值
回路增益
采样时间n的回路错误值
回路错误的前一个数值(在采样时间n ?1)
积分项的比例常数
微分项的比例常数
微分项的比例常数
在该公式中,积分项被显示为全部错误项的函数,从第一个样本至当前样本。微分项是当前样本和前一个样本的函数,而比例项仅是当前样本的函数。在数字计算机中,既不可能也没有必要存储所有的错误项样本。
因为从第一个样本开始,每次对错误采样时数字计算机都必须计算输出值,因此仅需存储前一个错误值和前一个积分项数值。由于数字计算机计算结果的重复性,可在任何采样时间对公式进行简化。简化后的公式为:
其中:
采样时间n的回路输出计算值
回路增益
采样时间n的回路错误值
回路错误的前一个数值(采样时间n ?1)
积分项的比例常数
积分项的前一个数值(采样时间n ?1)
微分项的比例常数
计算回路输出值时,CPU使用对上述简化公式的修改格式。修改后的公式为:
其中:
采样时间n的回路输出计算值
采样时间n的回路输出比例项数值
采样时间n的回路输出积分项数值
采样时间n的回路输出微分项数值
比例项
比例项MP是增益和错误(e)的乘积,其中增益控制输出计算的敏感度,错误是在某一特定采样时间设定值(SP)和进程变量(PV)之间的差别。CPU
采用的计算比例项的公式为:
其中:
采样时间n的回路输出比例项数值
回路增益
采样时间n的设定值数值
采样时间n的进程变量数值
积分项
积分项MI在时间上与错误(e)和成比例。CPU采用的积分项公式为:
其中:
采样时间n的回路输出积分项数值
回路增益
回路采样时间
积分时间(亦称为积分时间或复原)
采样时间n的设定值数值
采样时间n的进程变量数值
采样时间n - 1的积分项数值(亦称为积分和或偏差)
积分和或偏差(MX)是积分项所有先前数值的运行和。每次计算后,根据的数值更新偏差,该数值可能被调节或截取(详情请参阅"变量和范围"一节)。偏差的初始值通常被设为第一次回路输出计算之前的输出值。其他几个常数也是积分项的一部分,例如增益、采样时间(即PID回路重新计算输出值的循环时间)以及积分时间或复原(即用于控制积分项对输出计算影响的时间)。
微分项
微分项MD与错误变化成比例。计算微分项的公式为:
为了避免步骤改变或由于对设定值变化求导带来的输出变化,对该公式进行修改,假定设定值为常数 = 。如下所示,会导致计算进程变量的变化,而不计算错误的变化:
或:
其中:
采样时间n的回路输出微分项数值
回路增益
回路采样时间
回路微分阶段(亦称为微分时间或速率)
采样时间n的设定值数值
采样时间n - 1的设定值数值
采样时间n - 1的进程变量数值
采样时间n - 1的进程变量数值
必须保存进程变量,而不必保存错误,用于下一次微分项计算。第一次采样时,数值被初始化,等于。
回路控制选项
在很多控制系统中,可能有必要仅采用一种或两种回路控制方法。例如,可能只要求比例控制或比例和积分控制。通过设置常数参数值对所需的回路控制类型进行选择。
如果您不需要积分运算(即在PID计算中无"I"),则应将积分时间(复原)指定为"INF"(无限大)。由于积分和MX的初始值,即使没有积分运算,积分项的数值也可能不为零。
如果您不需要求导数运算(即在PID计算中无"D"),则应将求微分时间(速率)指定为0.0。
如果您不需要比例运算(即在PID计算中无"P"),并且您需要I或ID控制,则应将增益值指定为0.0。因为回路增益是计算积分和微分项公式中的系数,将回路增益设为0.0会导致在积分和微分项计算中使用的回路增益值为1.0。
回路输入转换和标准化
一个回路有两个输入变量、设定值和进程变量。设定值通常为固定数值,类似汽车定速控制的速度设置。进程变量是与回路输出相关的数值,因此可测量回路输出对受控系统的影响。在汽车定速控制的例子中,进程变量为测量轮胎转速的转速计输入。
设定值和进程变量均为实际数值,其大小、范围和工程单位可能不同。在这些实际数值可用于PID指令操作之前,必须将其转换成标准化浮点表示法。
第一步是将实际数值从16位整数数值转换成浮点或实数数值。下列指令序列说明如何将整数数值转换成实数。
ITD AIW0, AC0 //将输入数值转换成双字
DTR AC0, AC0 //将32位整数转换成实数
下一步是将实数数值的实数数值表示转换成0.0至1.0之间的标准化数值。可使用下列公式使设定值和进程变量标准化:
其中:
实际数值的标准化实数数值表示
实际数值的非标准化或原始实数数值表示
对单极数值为0.0,对双极数值为0.5
等于最大可能数值减去最小可能数值
= 32,000,对于单极数值(典型)
= 64,000,对于双极数值(典型)
下列指令序列说明如何使AC0中的双极数值(间距为64,000)标准化,作为前一个指令序列的继续:
/R 64000.0, AC0 //使累加器中的数值标准化
+R 0.5, AC0 //将数值的偏移量设为0.0至1.0范围
MOVR AC0, VD100 //将标准化数值存储在回路表中
将回路输出转换成比例整数数值
回路输出是控制变量,例如汽车定速控制范例中的调速气门设置。回路输出是0.0和1.0之间的标准化实数数值。在回路输出可用于驱动模拟输出之前,回路输出必须被转换成16位成比例整数数值。这一过程是与将PV和SP转换成标准化数值相反的过程。第一步是利用以下公式将回路输出转换为成比例实数数值:
其中:
回路输出成比例实数数值
回路输出标准化实数数值
对于单极数值为0.0,对于双极数值为0.5
等于最大可能数值减去最小可能数值
= 32,000,对于单极数值(典型)
= 64,000,对于双极数值(典型)
下列指令序列显示如何使回路输出成比例:
MOVR VD108, AC0 //将回路输出移至累加器。
-R 0.5, AC0 //只有在双极数值的情况下才包括本语句。
*R 64000.0, AC0 //使累加器中的数值成比例。
然后,代表回路输出的成比例实数数值必须被转换成16位整数。下列指令序列显示如何进行此一转换:
ROUND AC0, AC0 //将实数转换成32位整数。
DTI AC0, LW0 //转换成16位整数。
MOVW AC0, AQW0 //写入数值模拟输出。
正向或反向作用回路
如果增益为正数,回路则为正向作用;如果增益为负数,回路则为负向作用。(对于I或ID控制,增益值为0.0,将积分和微分时间设为正值将产生正向作用回路,将其设为负值将产生负向作用回路。)
变量和范围
进程变量和设定值是PID计算的输入值,因此PID指令读取但不改变这些变量的回路表域。
输出值由PID计算生成,因此每次PID计算完成后更新回路表中的输出值域。输出值被固定在0.0至1.0之间。用户可将输出值域用作输入,在从手动控制到PID指令(自动)输出控制的转换过程中指定初始输出值(请参阅以下"模式"一节中的内容)。
如果使用积分控制,则PID计算更新偏差值,而且更新后的数值被用作下一次PID计算的输入。当计算输出值超出范围(输出小于0.0或大于1.0)时,则根据下列公式调整偏差:
当计算输出 > 1.0
或
当计算输出 < 0.0
其中:
调节偏差数值
采样时间n的回路输出比例项数值
采样时间n的回路输出微分项数值
采样时间n的回路输出数值
通过按照上述方式调节偏差,一旦计算输出返回适当范围即可实现系统应答能力的改善。计算偏差也被固定在0.0至1.0之间,然后每次完成PID计算时被写入回路表的偏差域。回路表中存储的数值用于下一次PID计算。
在执行PID指令之前,用户可修改回路表中的偏差值,以便解决某些应用环境中的偏差值问题。以手动方式调节偏差值时,必须格外小心,写入回路表的任何偏差值必须是0.0至1.0之间的实数。
在回路表中保存进程变量比较,用于PID计算的求导计算部分。您不应当修改该数值。
模式
S7-200 PID回路没有内装模式控制,只有在使能位进入PID方框时才执行PID计算。因此,循环执行PID计算时存在"自动"模式;不执行PID计算时存在"手动"模式。
PID指令有一个使能位记录位,与计数器指令类似。该指令使用该记录位检测0至1使能位转换,当检测到这种转换时,将执行一系列运算,提供从手动控制到自动控制的顺利转变。为了顺利转变为自动模式控制,在转换至自动控制之前由手动控制设置的输出值必须作为PID指令的输入供给(为写入回路表条目)。PID 指令对回路表中的数值执行下列运算,以确保检测到0至1使能位转换时从手动控制顺利转换成自动控制:
?设置设定值 = 进程变量
?设置旧进程变量 = 进程变量
?设置偏差(MX)= 输出值
PID记录位被"设为"默认状态,该状态在CPU启动和控制器每次出现STOP(停止)至RUN(运行)模式转换时建立。如果流入PID方框的使能位在进入
RUN(运行)模式后首次被执行,则无法检测到使能位转换,无法执行顺利的模式改变