|
邀请回答
马上注册,享受更多特权
您需要 登录 才可以下载或查看,没有帐号?立即注册 ![](source/plugin/zhanmishu_wechat/template/static/img/wechat_login.png)
x
FUNCTION_BLOCK SPEED_AJ
VAR_INPUT
启动: BOOL;
停止: BOOL;
END_VAR
VAR_OUTPUT
运行: BOOL;
升速中: BOOL;
降速中: BOOL;
速度到达: BOOL;
END_VAR
VAR_INPUT
设定速度: REAL;
缓升系数: REAL;
微升系数: REAL;
缓降系数: REAL;
微降系数: REAL;
缓冲系数: REAL;
END_VAR
VAR_IN_OUT
实时速度: REAL;
END_VAR
VAR
缓升时间: TON;
微升时间: TON;
缓降时间: TON;
微降时间: TON;
i_step: INT;
升缓冲带: REAL;
降缓冲带: REAL;
END_VAR
IF 启动 OR 运行 AND NOT 停止 THEN
运行:=TRUE;
ELSE
运行:=升速中:=降速中:=速度到达:=FALSE;
RETURN;
END_IF
IF 实时速度=设定速度 THEN
i_step:=0;
ELSIF 实时速度>设定速度 THEN
i_step:=1;
降缓冲带:=设定速度+缓冲系数;
ELSE
i_step:=2;
升缓冲带:=设定速度-缓冲系数;
END_IF
CASE i_step OF
0: 升速中:=降速中:=FALSE;
速度到达:=TRUE;
1: 降速中 :=TRUE;
升速中:=速度到达:=FALSE;
IF 实时速度>降缓冲带 AND 缓降时间.Q THEN
实时速度 :=实时速度-缓冲系数;
END_IF
IF 实时速度<=降缓冲带 AND 微降时间.Q THEN
实时速度:=实时速度 -1.0;
END_IF
2: 升速中 :=TRUE;
降速中:=速度到达:=FALSE;
IF 实时速度<升缓冲带 AND 缓升时间.Q THEN
实时速度 :=实时速度+缓冲系数;
END_IF
IF 实时速度>=升缓冲带 AND 微升时间.Q THEN
实时速度:=实时速度 +1.0;
END_IF
END_CASE
ACT_time();
|
上一篇: 西门子案例分享1200 触摸屏 伺服 视觉 条码枪 测距 换点水滴下一篇: 西门子1200 流量累计样例程序分享
|