| 作者 | 主题 |
|---|---|
|
布什 游士 经验值:164 发帖数:139 精华帖:1 |
楼主
主题:给十分吧,俺化一下午写的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 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分哦!
除了老婆!我怕谁?
|