马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
//定义常量CONST k_P: REAL := 0.5; //比例系数 k_I: REAL := 0.2; //积分系数 k_D: REAL := 0.1; //微分系数 T: TIME := T#1S; //采样时间 //定义变量VAR pv: REAL := 0.0; //实际值 sp: REAL := 0.0; //设定值 err: REAL := 0.0; //误差 last_err: REAL := 0.0; //上一次误差 integral: REAL := 0.0; //积分值 derivative: REAL := 0.0;//微分值 output: REAL := 0.0; //输出值 //定义函数块FUNCTION_BLOCK PIDVAR_INPUT setpoint: REAL; //设定值 process_value: REAL; //实际值END_VARVAR_OUTPUT control: REAL; //PID输出值END_VARVAR error: REAL := 0.0; //误差值 last_error: REAL := 0.0;//上一次误差值 integral: REAL := 0.0; //积分值 derivative: REAL := 0.0;//微分值END_VARBEGIN //计算误差 error := setpoint - process_value; [backcolor=rgba(0,0,0,var(--tw-bg-opacity))][color=rgba(217,217,227,var(--tw-text-opacity))][size=0.75]Copy code
//计算积分值integral := integral + (error * T);//避免积分饱和IF integral > 100 THEN integral := 100;ELSIF integral < -100 THEN integral := -100;END_IF//计算微分值derivative := (error - last_error) / T;//计算输出值control := (k_P * error) + (k_I * integral) + (k_D * derivative);//保存误差值last_error := error;
END_FUNCTION_BLOCK //主程序WHILE TRUE DO //读取实际值 pv := ReadPV(); [backcolor=rgba(0,0,0,var(--tw-bg-opacity))][color=rgba(217,217,227,var(--tw-text-opacity))][size=0.75]Copy code
//调用PID函数块计算控制值PID(setpoint:=sp, process_value:=pv, control:=output);//输出控制值WriteOutput(output);//等待采样时间DELAY T;
END_WHILE //辅助函数FUNCTION ReadPV: REAL //读取实际值 RETURN <实际值>;END_FUNCTION FUNCTION WriteOutput(value: REAL) //输出控制值END_FUNCTION
|