关于PID算法疑惑 点击:4089 | 回复:13



匹若曹

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 16回
  • 年度积分:0
  • 历史总积分:48
  • 注册:2004年10月25日
发表于:2007-03-28 11:53:00
楼主
众所周知,离散PID控制算法分为:
                                n
位置式:u(n)=Kc*e(n)+Ki∑e(i)+Kd[e(n)-e(n-1)]
                               i=0
Ki=Kc*Ts/Td   称为积分系数
Kd=Kc*Td/Ts   称为微分系数
e(n)=SP-PV    称为偏差        SP,PV为百分比


现在假设控制器输入是0~200摄氏度,输出是0~10V电压来控制一个加热器,给一个水杯加热
于是e(n)的取值范围是:0~100%(对应0~200度),输出的变化范围也是:0~100%(对应0~10V)
我的问题是:

1.    当SP小于PV(测量值)时,e(n)为负值;那么当Kc为正,Ki为正,Kd为0的时候,u(n)也是负值。在PID实际运用过程中,输出为负值表示什么实际意义?或者换句话说,当SP<PV时,是不是输出u(n)就设置为0?一般的自控教材上都只讨论了SP〉PV时的情况。在上例实际运用中,我的设定值SP为60度,结果PV值为70度了,这个时候输出为负值是什么意思?难道是把输出为负值当成输出电压为0(即不再加热)看待?
2.    Kc设置为负值是什么意思?我见过实际运用中有设置为负值的情况。
3.    因为存在积分作用,或者因为Kc设置的非常大,可能造成这样的情况:e(n)的变化范围在0~100%时,u(n)的变化范围远远超过了100%。这个时候如何处理,是不是在程序中设置为if u(n)>100% then u(n)=100%
4.    当偏差越来越小时,u(n)的输出越来越小;当偏差=0的时候,u(n)经过上面的运算是不是也等于0?那么当偏差等于0时,输出如果也为0的话,那么PV又会马上下跌,这样不是控制不稳了吗?如果这样输出不保持的话,那还叫位式PID吗?是不是有些类似于增量算法。
5.    由于积分作用,out(n)会很快会到达100%,当PV值大于SP时,偏差为负,是不是这个时候才能让积分累计下降?



青风过尔

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 106回
  • 年度积分:0
  • 历史总积分:121
  • 注册:2002年11月23日
发表于:2007-03-28 16:45:00
1楼
你的计算怎么没有初始值,按你的公式,输出的不是MV(OP)值,而是对MV的变化值。PLC,DCS的PID控制计算是数字化,离散型的,不同厂家处理也不完全一样。只有老式模拟式仪表才是连续信号的,在那种仪表上是需要手动调到初始输出的。PLC和DCS也需要,只是在软件中设置。

匹若曹

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 16回
  • 年度积分:0
  • 历史总积分:48
  • 注册:2004年10月25日
发表于:2007-03-29 08:24:00
2楼
“输出的不是MV(OP)值”,我不明白是什么意思?我这个是离散化后的PID位置型算法,我是用VB写的计算机控制程序。

青风过尔

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 106回
  • 年度积分:0
  • 历史总积分:121
  • 注册:2002年11月23日
发表于:2007-03-29 09:40:00
3楼
你是自己编程来完成的哦,作过实验了吗?我想非正常状态的处理,数据的溢出,多冲量的引如还是挺麻烦的。你的公式是对偏差作PID运算的,所以不是MV(OP)值。

DIANSHAN

  • 精华:0帖
  • 求助:0帖
  • 帖子:69帖 | 337回
  • 年度积分:0
  • 历史总积分:636
  • 注册:2007年3月11日
发表于:2007-03-29 09:57:00
4楼
 "当SP小于PV(测量值)时,e(n)为负值"
如果没有积分作用,PID输出最小限,
如果有积分作用,PID输出向减小递减,
这是变化,不能静止的看.

老龙民

  • 精华:0帖
  • 求助:0帖
  • 帖子:5帖 | 82回
  • 年度积分:0
  • 历史总积分:399
  • 注册:2004年2月24日
发表于:2007-03-29 16:52:00
5楼
你的公式没有初始值,实际计算的只是输出的变化量。
如某阀门在t=0时为40%的开度,投入后因为偏差的存在,在公式的计算下,阀门会在40%的位置上下波动。当偏差为零时,那么输出就不变化,稳定在当前的开度上。
真正在应用时的公式应该是:
out(t)=I+K.e(t)+K.Ki.∫e(t)dt+K.Kd.de(t)/dt
式中:
Out(t)-输出
I-输出初值(t=0时)
e(t)-偏差。
K-比例常数
Ki-积分常数
Kd-微分常数

匹若曹

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 16回
  • 年度积分:0
  • 历史总积分:48
  • 注册:2004年10月25日
发表于:2007-04-03 14:48:00
6楼
众所周知,离散PID控制算法分为: n 
位置式:u(n)=Kc*e(n)+Ki∑e(i)+Kd[e(n)-e(n-1)] i=0 Ki=Kc*Ts/Td 称为积分系数 Kd=Kc*Td/Ts 称为微分系数 e(n)=SP-PV 称为偏差 SP,PV为百分比 
现在假设控制器输入是0~200摄氏度,输出是0~10V电压来控制一个加热器,给一个水杯加热
于是e(n)的取值范围是:0~100%(对应0~200度),输出的变化范围也是:0~100%(对应0~10V)
 我的问题是: 1. 当SP小于PV(测量值)时,e(n)为负值;那么当Kc为正,Ki为正,Kd为0的时候,u(n)也是负值。
在PID实际运用过程中,输出为负值表示什么实际意义?或者换句话说,当SP100% then u(n)=100% 
回答:PID一般参数不为负数,在没有非线性环节的情况下,通过控制理论分析当PID参数有一个或多个为负数的时候会导致系统稳定性以及动态特性下降,即零极点向虚轴靠近。对于你的系统其实输出负数不可实现,表示此时加热杯变成吸热杯,但通过电压不可调节,可以通过其他的控制变量调节。
4. 当偏差越来越小时,u(n)的输出越来越小;当偏差=0的时候,u(n)经过上面的运算是不是也等于0?那么当偏差等于0时,输出如果也为0的话,那么PV又会马上下跌,这样不是控制不稳了吗?如果这样输出不保持的话,那还叫位式PID吗?是不是有些类似于增量算法。
回答:偏差永远不会是零,只是接近零,即使接近为零的时候控制起输出仍然不为零,为一稳态值,你可以做仿真验证。原因是PID控制器含有积分项有记忆性,是对过去的误差做累加。
 5. 由于积分作用,out(n)会很快会到达100%,当PV值大于SP时,偏差为负,是不是这个时候才能让积分累计下降? 
回答:对,这个时候控制器要求尽快将输出减小,不仅通过积分而且比例环节也在起作用,当输出开始下降的时候微分环节也起作用。
你说的这个现象是引起积分饱和的主要原因,就是当原来积分累积的太大,远远超出阀值,此时当当PV值大于SP时不能立刻使累计量减少到可以调小控制阀出现积分饱和现象。

我终于搞明白了,感谢 青风过尔,说大话,老龙民的积极参与。这就算是结题了,希望能给有同样疑惑的人某些借鉴。

lly

  • 精华:0帖
  • 求助:0帖
  • 帖子:69帖 | 907回
  • 年度积分:0
  • 历史总积分:1633
  • 注册:2004年8月23日
发表于:2007-04-04 15:25:00
7楼
老龙民 是对的.
楼主可能还有些没理解.
K:可以为负数的,改变了正反作用,也有的用个软开关实现,也有通过互换SP PV变量.
KI,KD:单位为时间(有的为时间倒数),怎么能为负值呢?
拉氏公式有很多变种,记得H/W的PID就有7种,对应不同的PID算法.

helpsos

  • 精华:0帖
  • 求助:0帖
  • 帖子:20帖 | 139回
  • 年度积分:0
  • 历史总积分:847
  • 注册:2007年8月01日
发表于:2007-09-08 11:08:00
8楼
胜读好几天书

优格

  • 精华:0帖
  • 求助:0帖
  • 帖子:36帖 | 541回
  • 年度积分:0
  • 历史总积分:701
  • 注册:2004年5月20日
发表于:2007-09-10 10:34:00
9楼
嗯,不错

helpsos

  • 精华:0帖
  • 求助:0帖
  • 帖子:20帖 | 139回
  • 年度积分:0
  • 历史总积分:847
  • 注册:2007年8月01日
发表于:2008-12-17 10:52:39
10楼

小弟想用VB编写一个模拟PID控制的程序,但是你那个水杯温度的变化反馈没有好的办法模拟出来!谁能供个接近实际的算法!小弟先谢了

保留字符

  • 精华:0帖
  • 求助:0帖
  • 帖子:14帖 | 166回
  • 年度积分:0
  • 历史总积分:163
  • 注册:2008年8月02日
发表于:2009-12-29 09:34:10
11楼

引用老龙民 的回复内容:你的公式没有初始值,实际计算的只是输出的变化量。
如某阀门在t=0时为40%的开度,投入后因为偏差的存在,在公式的计算下,阀门会在40%的位置上下波动。当偏差为零时,那么输出就不变化,稳定在当前的开度上。
真正在应用时的公式应该是:
out(t)=I+K.e(t)+K.Ki.∫e(t)dt+K.Kd.de(t)/dt
式中:
Out(t)-输出
I-输出初值(t=0时)
e(t)-偏差。
K-比例常数
Ki-积分常数
Kd-微分常数


“如某阀门在t=0时为40%的开度”

提问1:是不是指在投入自动PID运算之前,先要手动输出,直至被调量达到想要的设定值SP?此时的手动输出量为多少合适 呢?

提问2:在每次得出Mn之后,是不是都要用Mn去更新I?



chihai_1983

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 14回
  • 年度积分:0
  • 历史总积分:35
  • 注册:2010年1月07日
发表于:2010-04-17 17:29:06
12楼
引用保留字符 的回复内容:

引用老龙民 的回复内容:你的公式没有初始值,实际计算的只是输出的变化量。
如某阀门在t=0时为40%的开度,投入后因为偏差的存在,在公式的计算下,阀门会在40%的位置上下波动。当偏差为零时,那么输出就不变化,稳定在当前的开度上。
真正在应用时的公式应该是:
out(t)=I+K.e(t)+K.Ki.∫e(t)dt+K.Kd.de(t)/dt
式中:
Out(t)-输出
I-输出初值(t=0时)
e(t)-偏差。
K-比例常数
Ki-积分常数
Kd-微分常数

 


 

“如某阀门在t=0时为40%的开度”

提问1:是不是指在投入自动PID运算之前,先要手动输出,直至被调量达到想要的设定值SP?此时的手动输出量为多少合适 呢?

提问2:在每次得出Mn之后,是不是都要用Mn去更新I?





控制器的输出值对应的是阀门的开度,而不是阀门开度的变化量。比如,第一个扫描周期,阀门开度为0,控制器算出0+开度变化量作为一个输出给阀比如50%,第二个扫描周期,就按照50%+新计算出的开度变化量,作为输出给阀。

总之,位置式算法,每个扫描周期都是在上一个周期的阀门开度的基础上,加上由误差计算出的变化量,两者的和作为结果输出的。

这样能理解吗

帅克研发老9

  • 精华:3帖
  • 求助:8帖
  • 帖子:138帖 | 6809回
  • 年度积分:0
  • 历史总积分:24592
  • 注册:2004年2月03日
发表于:2010-04-30 14:00:05
13楼

PID算法,也就是凑三个数,

凑完咧,给定一个明确的输入量,输出量具体多大,连凑数的人,都晓不得~~~

就这破理论,还他奶奶滴,被成千上万的导师教授,装得跟数学家似的,引导这个指挥那个深入研究呢,

嘿嘿

改天俺闲点咧,开发一款,可对输入量和输出量,进行1~300段自由编程的表,

1~3000也中,只要你有需要,再精细俺也能给你弄~~~~~

哈哈,那样你要调大调小,调平调陡,上行下行,调量多少,都是一清二白滴,

岂不比PID,好伺候100倍?


热门招聘
相关主题

官方公众号

智造工程师