技术论坛

 给十分吧,俺化一下午写的PID函数,总该赚10分吧。

返回主题列表
作者 主题
布什
游士

经验值:164
发帖数:139
精华帖:1
楼主    2005-11-27 19:12:04
主题:给十分吧,俺化一下午写的PID函数,总该赚10分吧。 精华帖 
FUNCTION FC100:REAL
VAR_INPUT
sp_Input:REAL; //设定值。
pv_Input:REAL; //实际值。
p_Value:REAL; //“P”参数。
I_Value:REAL; //”I“参数。
D_Value:REAL; //”D“参数。
Lo_Limit_Val:REAL; //最小输出。
Ho_Limit_Val:REAL; //最大输出。
Ds_Lo,DS_Ho:Real; //高低粗调设定。
Cs_Lo,Cs_Ho:REAL; //高低细调设定。
Bs_Lo,Bs_Ho:REAL; //高,低刹车量。
END_VAR

VAR_OUTPUT
out_Pid:REAL; //PID输出
END_VAR

VAR
Delta_Pid:REAL; //差量值。
Step1_Value:REAL; //前差量。
Step2_Value:REAL; //后差量。
END_VAR

LABEL
Label_Result;
END_LABEL

BEGIN
IF Pv_Input<(sp_Input-Cs_Lo-Ds_Lo) THEN
Out_Pid:=Ho_Limit_Val;
GOTO Label_Result;
END_IF;

IF pv_Input>(sp_Input-Cs_Lo-Ds_Lo) AND pv_Input<(sp_Input-Cs_Lo) THEN
out_pid:=Ho_Limit_Val*(1-Bs_Lo);
GOTO Label_Result;
END_IF;

IF pv_Input>(sp_Input-Cs_Lo) AND pv_Input<(sp_Input+Cs_Ho) THEN
Delta_Pid:=sp_Input-pv_Input;
out_pid:=p_Value*(Delta_Pid-Step1_Value)+I_Value*(Delta_Pid)
+D_Value*(Delta_Pid-2*Step1_Value+Step2_Value);
Step2_Value:=Step1_Value;
Step1_Value:=Delta_Pid;
IF Out_Pid>Ho_Limit_val THEN
Out_Pid:=Ho_Limit_val;
ELSIF out_Pid Out_Pid:=Lo_Limit_val;
END_IF;
GOTO Label_Result;
END_IF;

IF pv_Input>(sp_Input+Cs_Ho) AND pv_Input<(sp_Input+Cs_Ho+Ds_Ho) THEN
Out_Pid:=Ho_Limit_Val*(1-Bs_Ho);
GOTO Label_Result;
END_IF;

IF pv_Input>(sp_Input+Cs_Ho+Ds_Ho) THEN
out_Pid:=Lo_Limit_val;
GOTO Label_Result;
END_IF;

Label_Result:
FC100:=out_Pid;

END_FUNCTION

步进的PID控制,用SCL写的,俺的PID控制思路应该赚8分,只于程序吗,应该赚2分。合起来应该赚10分哦!
除了老婆!我怕谁?
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。