技术论坛

 自己编写了一个PID,期待完善

返回主题列表
作者 主题
看雪001
至圣

经验值:19337
发帖数:2076
精华帖:72
楼主    2017-11-06 09:38:19
主题:自己编写了一个PID,期待完善 精华帖 

PID的参数难以确定?有没有只管给输入和输出,不用自己设PID参数的?……

一提到PID,真的头大了!就这么简单的三个参数,“一夫当关,万夫莫开”,不知难倒了多少工控人!(反正我是被为难了很久的,呵呵!)

曾经也想过:这个PID指令别人做好了,自己只管使用就好了嘛!其实不懂里面的原理,就是连参数都没法调好的!别人写的程序终究是别人的理解,自己没有理解程序,谈什么“会使用”呢?

网友的提问只是促使我编写PID程序的起因之一,我自己在使用PID向导时也感到了不便:向导独占一个中断,我想在中断中加入另外的子程序也是不可能的;向导中有输入和输出标定,这个函数也不通用 ;向导生成的背景数据占了120字节,不就是多了个自整定吗?多段曲线时一套PID参数咋整呢?……反正是各种不满意,哈哈,何患无辞?

还是要感谢西门子软件提供的帮助文档,非常详细的指引,才使我若有所悟,下面是根据文档写的PID程序:

第一步,当然是先定义接口;然后,第一段先把比例项公式用定义的接口套上去;

比例项也要设置输出范围,200plc自带的PID指令,其输出范围定标在0.00-1.00,我这个参考300plc的PID程序,定标在0.0-100.0;

接下来,做积分项的运算

积分项就是i=i++,或者i=i+1;很多人就是卡在这里,不理解积分怎样用程序来实现;

要假设一种情况:当过程值一直无法到达设定值时,积分项会令输出超限,这时必须“冻结”积分运算,防止积分饱和(就是积分过深,不易反转),这个“冻结”其实很简单,输出超限时就停止积分运算好了。

西门子如何处理这种情况呢?300PID的文档指出了:当输出超限时,积分项=输出-比例项,那么,积分项的范围就是-100.0  -    100.0!我这个程序将积分项范围限制在0-100,如果需要双向调节时,就从外部将SV和PV调换。

积分项的处理是理解PID指令的关键,这段程序我与软件自带的PID做了比较试验,自带PID背景数据从VB600起,我的从VB800起,做相同的设定值、过程值变化,反应大致都相同



大道至简,知易行难
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。