#include
"global_varible.h"
/****************************************************************************
*
模块名:
pid
*
描述:
pid调节子程序
*
采用pid-pd算法。在偏差绝对值大于△e时,用pd算法,以改善动态品质。
*
当偏差绝对值小于△e时,用pid算法,提高稳定精度。
*
pidout=kp*e(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
//温度控制设定值37.00度
pid_e0
=
temp_set-temp_now
//本次偏差
ee1
=
pid_e0-pid_e1
//计算一阶偏差
//ee2
=
pid_e0-2*pid_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_kp*pid_e0+pid_kd*ee1
//计算pid比例和微分输出
if(abs(pid_e0)
<
200)
//如果温度相差小于1.5度则计入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_ki*pid_e_sum
//积分输出
if(pid_e0
<
-5)
//当前温度高于设定温度0.5度时积分累计限制
{
if(pid_e_sum
>
150)
pid_e_sum
=
150
if(pid_e_sum
>
0)
//当前温度高于设定温度0.5度时削弱积分正输出
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)
//当前温度高于设定温度0.2度则关闭加热
pid_out=0
hot_t_run=pid_out
//加热时间控制输出
pid_e2
=
pid_e1
//保存上次偏差
pid_e1
=
pid_e0
//保存当前偏差
}
////////////////////////////////////////////////////////////void
pid_math()
end.
要用到2个API函数1.Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long 从窗口句并获取进程PID
2.Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 查找窗口句柄
pw = FindWindow(vbNullString, "连连看 v4.1")‘'查找连连看把找到的结果存在PW是保存窗口句柄GetWindowThreadProcessId pw, pid '从窗口句柄获取进程ID,PID是保存进程ID
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)