恭喜,你发布的帖子
发布于 2021-07-26 16:15:17
2楼
就想通过程序给速度 其实你的意思就是通过程序产生一个速度斜坡发生器,一定的斜率进行升降 速度。
通过程序 + 传动装置进行 控制速度。
估计 目的,正常加减一个速度斜率 快停 一个速度斜率 急停 一个速度斜率 ,相当一个时间组的选择,其实这个可以在starter里实现的。用DCC 就可以,
FUNCTION_BLOCK FB1
VAR_INPUT
ramp_enable:BOOL; // 斜坡发生器 使能 = TRUE 表示允许 斜坡输出。
reset_zero_out:BOOL; // 输出强制清零 = TRUE 输出强制为0.0
ramp_before_set:REAL; // 斜坡前的 设定值
ramp_add_ratio:REAL; //加速斜坡 系数
ramp_sub_ratio:REAL; // 减速斜坡系数
change_ratio:REAL; // 系统斜坡变化率 值越大 斜坡越陡
death1:REAL; // 正死区 区间值
death2:REAL; // 负死区 区间值
END_VAR
VAR_IN_OUT
adjust_ramp_act:REAL; //斜坡调整过程值
END_VAR
VAR_OUTPUT
ramp_after_out:int; // 目前斜坡输出值 注意,采用了四舍五入为整型 如果要浮点型,可以更改
ramp_already:BOOL; //斜坡输出调整到设定值 范围内
END_VAR
VAR
ramp_add:REAL;
ramp_sub:REAL;
no_adjust:BOOL;
error :REAL;
END_VAR
ramp_add:=ramp_add_ratio * change_ratio;
ramp_sub:=ramp_sub_ratio * change_ratio;
IF NOT reset_zero_out THEN
IF ramp_enable THEN
error:= ramp_before_set - adjust_ramp_act;
IF ( error >death1) AND NOT no_adjust THEN
adjust_ramp_act:=adjust_ramp_act + ramp_add;
ramp_already:=FALSE;
ELSIF (error < death2) AND NOT no_adjust THEN
adjust_ramp_act:= adjust_ramp_act - ramp_sub ;
ramp_already:=FALSE;
END_IF;
IF ( death2 <=error) AND (error <= death1) THEN
adjust_ramp_act:=ramp_before_set;
ramp_already:=true;
no_adjust:=true;
ELSE
ramp_already:=false;
no_adjust:=false;
END_IF;
ELSE
adjust_ramp_act:=ramp_before_set;
ramp_already:=false;
END_IF;
ELSE
adjust_ramp_act:=0.0;
ramp_already:=false;
END_IF;
ramp_after_out:=REAL_TO_INT (adjust_ramp_act);
END_FUNCTION_BLOCK
放在系统中断组织块里调用 。
请填写推广理由:
分享
只看
楼主