#include
#include
"global_varibleh"
/
模块名:
pid
描述:
pid调节子程序
采用pid-pd算法。在偏差绝对值大于△e时,用pd算法,以改善动态品质。
当偏差绝对值小于△e时,用pid算法,提高稳定精度。
pidout=kpe(t)+ki[e(t)+e(t-1)++e(1)]+kd[e(t)-e(t-1)]
============================================================================
入口:
无
出口:
无
改变:
pid_t_run=加热时间控制
/
void
pid_math(void)
{
signed
long
ee1;
//偏差一阶
//signed
long
ee2;
//偏差二阶
signed
long
d_out;
//积分输出
if(!flag_pid_t_ok)
return;
flag_pid_t_ok=0;
temp_set=3700;
//温度控制设定值3700度
pid_e0
=
temp_set-temp_now;
//本次偏差
ee1
=
pid_e0-pid_e1;
//计算一阶偏差
//ee2
=
pid_e0-2pid_e1+pid_e2;
//计算二阶偏差
if(ee1
>
500)
//一阶偏差的限制范围
ee1
=
500;
if(ee1
<
-500)
ee1
=
-500;
pid_e_sum
+=
pid_e0;
//偏差之和
if(pid_e_sum
>
200)
//积分最多累计的温差
pid_e_sum
=
200;
if(pid_e_sum
<
-200)
pid_e_sum
=
-200;
pid_out
=
pid_kppid_e0+pid_kdee1;
//计算pid比例和微分输出
if(abs(pid_e0)
<
200)
//如果温度相差小于15度则计入pid积分输出
{
if(abs(pid_e0)
>
100)
//如果温度相差大于1度时积分累计限制
{
if(pid_e_sum
>
100)
pid_e_sum
=
100;
if(pid_e_sum
<
-100)
pid_e_sum
=
-100;
}
d_out
=
pid_kipid_e_sum;
//积分输出
if(pid_e0
<
-5)
//当前温度高于设定温度05度时积分累计限制
{
if(pid_e_sum
>
150)
pid_e_sum
=
150;
if(pid_e_sum
>
0)
//当前温度高于设定温度05度时削弱积分正输出
d_out
>>=
1;
}
pid_out
+=
d_out;
//pid比例,积分和微分输出
}
else
pid_e_sum=0;
pid_out/=100;
//恢复被pid_out系数放大的倍数
if(pid_out
>
200)
pid_out=200;
if(pid_out<0)
pid_out=0;
if(pid_e0
>
300)
//当前温度比设定温度低3度则全速加热
pid_out=200;
if(pid_e0
<
-20)
//当前温度高于设定温度02度则关闭加热
pid_out=0;
hot_t_run=pid_out;
//加热时间控制输出
pid_e2
=
pid_e1;
//保存上次偏差
pid_e1
=
pid_e0;
//保存当前偏差
}
////////////////////////////////////////////////////////////void
pid_math()
end
这是一个转换程序,将PID的输出值转换为加热时间。其原理是在设置的时间段内(k2000),当PIDl输出值>计数值时,输出加热。不同的PID输出值对应不同的加热时间与不加热的时间。当PID输出为0时,不加热。50%时加热与停止各一半的时间。这个数值的确定要根据系统的热惯性来确定。并且要根据全部的程序才能准确的分析。
调用直接在在计数器,计时器等哪个下拉菜单里,所有有效的子程序会在里面的。就像用计时器一样调用他。
pid直接用pid模块,模拟量输入输出转换是有硬件完成的,你只要有地址,知道反馈在那,输出到那,就ok了,然后pid命令会用到这两个地址,
基于PLC的数字PID调节器设计
编程是用梯形图
PID是由比例、微分、积分三个部分组成的,在实际应用中经常只使用其中的一项或者两项,如P、PI、PD、PID等。就可以达到控制要求PLC编程指令里都会有PID这个功能指令至于P,I,D 数值的确定要在现场的多次调试确定
比例控制(P):
比例控制是最常用的控制手段之一,比方说我们控制一个加热器的恒温100度,当开始加热时,离目标温度相差比较远,这时我们通常会加大加热,使温度快速上升,当温度超过100度时,我们则关闭输出,通常我们会使用这样一个函数
e(t) = SP – y(t);
u(t) = e(t)P
SP——设定值
e(t)——误差值
y(t)——反馈值
u(t)——输出值
P——比例系数
滞后性不是很大的控制对象使用比例控制方式就可以满足控制要求,但很多被控对象中因为有滞后性。
也就是如果设定温度是200度,当采用比例方式控制时,如果P选择比较大,则会出现当温度达到200度输出为0后,温度仍然会止不住的向上爬升,比方说升至230度,当温度超过200度太多后又开始回落,尽管这时输出开始出力加热,但温度仍然会向下跌落一定的温度才会止跌回升,比方说降至170度,最后整个系统会稳定在一定的范围内进行振荡。
如果这个振荡的幅度是允许的比方说家用电器的控制,那则可以选用比例控制
比例积分控制(PI):
积分的存在是针对比例控制要不就是有差值要不就是振荡的这种特点提出的改进,它常与比例一块进行控制,也就是PI控制。
其公式有很多种,但大多差别不大,标准公式如下:
u(t) = Kpe(t) + Ki∑e(t) +u0
u(t)——输出
Kp——比例放大系数
Ki——积分放大系数
e(t)——误差
u0——控制量基准值(基础偏差)
大家可以看到积分项是一个历史误差的累积值,如果光用比例控制时,我们知道要不就是达不到设定值要不就是振荡,在使用了积分项后就可以解决达不到设定值的静态误差问题,比方说一个控制中使用了PI控制后,如果存在静态误差,输出始终达不到设定值,这时积分项的误差累积值会越来越大,这个累积值乘上Ki后会在输出的比重中越占越多,使输出u(t)越来越大,最终达到消除静态误差的目的。
PI两个结合使用的情况下,我们的调整方式如下:
1、先将I值设为0,将P值放至比较大,当出现稳定振荡时,我们再减小P值直到P值不振荡或者振荡很小为止(术语叫临界振荡状态),在有些情况下,我们还可以在些P值的基础上再加大一点。
2、加大I值,直到输出达到设定值为止。
3、等系统冷却后,再重上电,看看系统的超调是否过大,加热速度是否太慢。
通过上面的这个调试过程,我们可以看到P值主要可以用来调整系统的响应速度,但太大会增大超调量和稳定时间;而I值主要用来减小静态误差。
PID控制:
因为PI系统中的I的存在会使整个控制系统的响应速度受到影响,为了解决这个问题,我们在控制中增加了D微分项,微分项主要用来解决系统的响应速度问题,其完整的公式如下:
u(t) = Kpe(t) + Ki∑e(t) + Kd[e(t) – e(t-1)]+u0
在PID的调试过程中,我们应注意以下步骤:
1、 关闭I和D,也就是设为0加大P,使其产生振荡;
2、 减小P,找到临界振荡点;
3、 加大I,使其达到目标值;
重新上电看超调、振荡和稳定时间是否吻合要求;
5、 针对超调和振荡的情况适当的增加一些微分项;
6、 注意所有调试均应在最大争载的情况下调试,这样才能保证调试完的结果可以在全工作范围内均有效;
还有一些是关于运动控制的,用编码器之类产品为测量,一个测量设定点,一个测量跟从量值这里就不一一而答了
模拟PID就是在现场安装的利用DDZII或者DDZIII型表再加上其他气动仪表的模块,对现场控制变量的模拟信号利用旋钮或拨盘对PID的三个值进行设定对或者手动控制输出的系统,其信号均为模拟信号。
数字PID就是把现场的控制变量的模拟信号和对现场受控变量的输出信号均转换成了数字信号,PID的实现也是通过数字信号的设定来完成的。现在大多在DCS、PLC系统内完成的。
以上就是关于求一段VB编写的增量式PID控制程序全部的内容,包括:求一段VB编写的增量式PID控制程序、刚接触PID指令,现在有一程序通过PID指令控制固态继电器实现加热过程,程序这步看不懂,为什么要用、西门子S7-200在主程序中用什么语句调用子程序PLC的温度反馈PID如何设计等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)