展开查看
只能用一个CPU,现在smart200库的PID已用完,不够用怎么自己编写PID程序
提问者:ligp99
PID指令有帮助文档,200smart的“PID回路算法”回答了怎么写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起,做相同的设定值、过程值变化,反应大致都相同