IF NOT "模式手动I" THEN
"堆垛机过程数据块".手动模式封锁 := 0;
"堆垛机过程数据块".手动点动保持显示 := 0;
RETURN;
END_IF;
IF NOT "堆垛机过程数据块".手动模式封锁 THEN
"FC41 系统总清占位"();
"堆垛机过程数据块".自检完成 := 0;
"DB5 发送电报数据块".缓存状态电报[1] := '0';
"堆垛机过程数据块".GRAPH运行关闭 := 1;
"堆垛机过程数据块".GRAPH运行启动 := 0;
"堆垛机过程数据块".动作总清完成 := 0;
"堆垛机过程数据块".状态堆垛机当前状态[1] := 0;
"堆垛机过程数据块".手动模式封锁 := 1;
END_IF;
"点动保持设置"();
(*
//手动故障解除
IF "模式手动I" AND ("DB9 触摸屏功能数据块".触屏手动按钮解故障 OR "故障解除I")
AND "堆垛机过程数据块".状态堆垛机当前状态[2] THEN
" 系统总清占位"();
"堆垛机过程数据块".动作总清完成 := 0;
END_IF;
*)
//手动待机判定
IF NOT ("运行电机抱闸打开" OR "起升电机抱闸打开" OR "货叉电机抱闸打开" )
AND NOT "堆垛机过程数据块".状态堆垛机当前状态[2] THEN
"堆垛机过程数据块".状态堆垛机当前状态[1] := 1;
ELSE
"堆垛机过程数据块".状态堆垛机当前状态[1] := 0;
END_IF;
"堆垛机过程数据块".状态堆垛机当前状态[3] := NOT "堆垛机过程数据块".状态堆垛机当前状态[1];
//接通
IF NOT "堆垛机过程数据块".手动内部按钮主封锁
OR "堆垛机过程数据块".手动按钮下降沿检测 THEN
"运行变频器状态控制":P := W#16#047E;
"运行变频器速度控制":P := 0;
"起升变频器状态控制":P := W#16#047E;
"起升变频器速度控制":P := 0;
"货叉变频器状态控制":P := W#16#047E;
"货叉变频器速度控制":P := 0;
RETURN;
END_IF;
//货偏禁止高速
IF "堆垛机过程数据块".故障标识[16] THEN
"堆垛机过程数据块".手动内部换速功能 := 0;
END_IF;
//水平运行
//前进低速
IF (("堆垛机过程数据块".手动内部按钮水平前 AND NOT "堆垛机过程数据块".手动内部换速功能 )
OR ("堆垛机过程数据块".手动内部按钮水平前 AND "堆垛机过程数据块".手动内部换速功能 AND "前进换速I"))
AND NOT "堆垛机过程数据块".手动内部按钮水平后 AND NOT "堆垛机过程数据块".手动内部按钮起升上
AND NOT "堆垛机过程数据块".手动内部按钮起升下 AND NOT "堆垛机过程数据块".手动内部按钮货叉左
AND NOT "堆垛机过程数据块".手动内部按钮货叉右 THEN
"运行变频器状态控制":P := W#16#047F;
"运行变频器速度控制":P := 550;//DINT_TO_WORD("堆垛机过程数据块".计算列运行速度低速);
ELSIF
//后退低速
(("堆垛机过程数据块".手动内部按钮水平后 AND NOT "堆垛机过程数据块".手动内部换速功能 )
OR ("堆垛机过程数据块".手动内部按钮水平后 AND "堆垛机过程数据块".手动内部换速功能 AND "后退换速I"))
AND NOT "堆垛机过程数据块".手动内部按钮水平前 AND NOT "堆垛机过程数据块".手动内部按钮起升上
AND NOT "堆垛机过程数据块".手动内部按钮起升下 AND NOT "堆垛机过程数据块".手动内部按钮货叉左
AND NOT "堆垛机过程数据块".手动内部按钮货叉右 THEN
"运行变频器状态控制":P := W#16#0C7F;
"运行变频器速度控制":P := 550;//DINT_TO_WORD("堆垛机过程数据块".计算列运行速度低速);
ELSIF
//前进高速
"堆垛机过程数据块".手动内部按钮水平前 AND "堆垛机过程数据块".手动内部换速功能 AND NOT "前进换速I"
AND NOT "堆垛机过程数据块".手动内部按钮水平后 AND NOT "堆垛机过程数据块".手动内部按钮起升上
AND NOT "堆垛机过程数据块".手动内部按钮起升下 AND NOT "堆垛机过程数据块".手动内部按钮货叉左
AND NOT "堆垛机过程数据块".手动内部按钮货叉右 THEN
"运行变频器状态控制":P := W#16#047F;
"运行变频器速度控制":P := DINT_TO_WORD("堆垛机过程数据块".计算列运行速度低速 + 6000);
ELSIF
//后退高速
"堆垛机过程数据块".手动内部按钮水平后 AND "堆垛机过程数据块".手动内部换速功能 AND NOT "后退换速I"
AND NOT "堆垛机过程数据块".手动内部按钮水平前 AND NOT "堆垛机过程数据块".手动内部按钮起升上
AND NOT "堆垛机过程数据块".手动内部按钮起升下 AND NOT "堆垛机过程数据块".手动内部按钮货叉左
AND NOT "堆垛机过程数据块".手动内部按钮货叉右 THEN
"运行变频器状态控制":P := W#16#0C7F;
"运行变频器速度控制":P := DINT_TO_WORD("堆垛机过程数据块".计算列运行速度低速 + 6000);
ELSE
"运行变频器状态控制":P := W#16#047E;
"运行变频器速度控制":P := 0;
END_IF;
//故障保护
IF ("运行变频器故障" OR(NOT "堆垛机过程数据块".货叉中位模糊对准标识
AND( "堆垛机过程数据块".手动内部按钮水平前 OR "堆垛机过程数据块".手动内部按钮水平后))
OR ("堆垛机过程数据块".手动内部按钮水平前 AND "前进限位I")
OR ("堆垛机过程数据块".手动内部按钮水平后 AND "后退限位I")) THEN
IF "前进限位I" OR "后退限位I" THEN
"堆垛机过程数据块".故障标识[15] := 1;
END_IF;
"运行变频器状态控制":P := W#16#047E;
"运行变频器速度控制":P := 0;
"运行变频器投入Q" := 0;
ELSE
"运行变频器投入Q" := 1;
END_IF;
//起升运行
//起升低速
IF (("堆垛机过程数据块".手动内部按钮起升上 AND NOT "堆垛机过程数据块".手动内部换速功能 )
OR ("堆垛机过程数据块".手动内部按钮起升上 AND "堆垛机过程数据块".手动内部换速功能 AND "上换速开关I")
OR ("堆垛机过程数据块".手动内部按钮起升上 AND NOT "堆垛机过程数据块".货叉中位模糊对准标识 ))
AND NOT "堆垛机过程数据块".手动内部按钮起升下 AND NOT "堆垛机过程数据块".手动内部按钮水平前
AND NOT "堆垛机过程数据块".手动内部按钮水平后 AND NOT "堆垛机过程数据块".手动内部按钮货叉左
AND NOT "堆垛机过程数据块".手动内部按钮货叉右 THEN
"起升变频器状态控制":P := W#16#047F;
"起升变频器速度控制":P := DINT_TO_WORD("堆垛机过程数据块".计算层运行速度低速);
ELSIF
//下降低速
(("堆垛机过程数据块".手动内部按钮起升下 AND NOT "堆垛机过程数据块".手动内部换速功能 )
OR ("堆垛机过程数据块".手动内部按钮起升下 AND "堆垛机过程数据块".手动内部换速功能 AND "下换速开关I")
OR ("堆垛机过程数据块".手动内部按钮起升下 AND NOT "堆垛机过程数据块".货叉中位模糊对准标识 ))
AND NOT "堆垛机过程数据块".手动内部按钮起升上 AND NOT "堆垛机过程数据块".手动内部按钮水平前
AND NOT "堆垛机过程数据块".手动内部按钮水平后 AND NOT "堆垛机过程数据块".手动内部按钮货叉左
AND NOT "堆垛机过程数据块".手动内部按钮货叉右 THEN
"起升变频器状态控制":P := W#16#0C7F;
"起升变频器速度控制":P := DINT_TO_WORD("堆垛机过程数据块".计算层运行速度低速);
ELSIF
//起升高速
"堆垛机过程数据块".手动内部按钮起升上 AND "堆垛机过程数据块".手动内部换速功能 AND NOT "上换速开关I"
AND "堆垛机过程数据块".货叉中位模糊对准标识 AND NOT "堆垛机过程数据块".手动内部按钮起升下
AND NOT "堆垛机过程数据块".手动内部按钮水平前 AND NOT "堆垛机过程数据块".手动内部按钮水平后
AND NOT "堆垛机过程数据块".手动内部按钮货叉左 AND NOT "堆垛机过程数据块".手动内部按钮货叉右 THEN
"起升变频器状态控制":P := W#16#047F;
"起升变频器速度控制":P := DINT_TO_WORD("堆垛机过程数据块".计算层运行速度低速+5000);
ELSIF
//下降高速
"堆垛机过程数据块".手动内部按钮起升下 AND "堆垛机过程数据块".手动内部换速功能 AND NOT "下换速开关I"
AND "堆垛机过程数据块".货叉中位模糊对准标识 AND NOT "堆垛机过程数据块".手动内部按钮起升上
AND NOT "堆垛机过程数据块".手动内部按钮水平前 AND NOT "堆垛机过程数据块".手动内部按钮水平后
AND NOT "堆垛机过程数据块".手动内部按钮货叉左 AND NOT "堆垛机过程数据块".手动内部按钮货叉右 THEN
"起升变频器状态控制":P := W#16#0C7F;
"起升变频器速度控制":P := DINT_TO_WORD("堆垛机过程数据块".计算层运行速度低速 + 5000);
ELSE
"起升变频器状态控制":P := W#16#047E;
"起升变频器速度控制":P := 0;
END_IF;
//故障保护
IF ("起升变频器故障" OR ("堆垛机过程数据块".手动内部按钮起升上 AND "起升上限位I")
OR ("堆垛机过程数据块".手动内部按钮起升下 AND "起升下限位I")) THEN
IF "起升上限位I" OR "起升下限位I" THEN
"堆垛机过程数据块".故障标识[15] := 1;
END_IF;
"起升变频器状态控制":P := W#16#047E;
"起升变频器速度控制":P := 0;
"起升变频器投入Q" := 0;
ELSE
"起升变频器投入Q" := 1;
END_IF;
//货叉运行//
IF (NOT "货叉电机抱闸打开" AND NOT "堆垛机过程数据块".手动内部按钮货叉左 AND NOT "堆垛机过程数据块".手动内部按钮货叉右)
OR "运行电机抱闸打开" OR "起升电机抱闸打开" THEN
"堆垛机过程数据块".货叉左近中范围标识 := 0;
"堆垛机过程数据块".货叉右近中范围标识 := 0;
"堆垛机过程数据块".手动货叉停止标识 := 0;
END_IF;
//货叉近中判定
IF "堆垛机过程数据块".状态货叉旋编数值 < "货叉位置数据块".货叉手动换速 AND "堆垛机过程数据块".状态货叉旋编数值 >= "货叉位置数据块".货叉停止误差 THEN
"堆垛机过程数据块".货叉左近中范围标识 := 1;
ELSIF
"堆垛机过程数据块".状态货叉旋编数值 > - "货叉位置数据块".货叉手动换速 AND "堆垛机过程数据块".状态货叉旋编数值 <= - "货叉位置数据块".货叉停止误差 THEN
"堆垛机过程数据块".货叉右近中范围标识 := 1;
END_IF;
//手动货叉强制停止
IF ("堆垛机过程数据块".手动内部按钮货叉左 AND "堆垛机过程数据块".货叉中位精确对准标识 AND "堆垛机过程数据块".货叉右近中范围标识)
OR ("堆垛机过程数据块".手动内部按钮货叉左 AND "堆垛机过程数据块".货叉左端精确对准标识)
OR ("堆垛机过程数据块".手动内部按钮货叉右 AND "堆垛机过程数据块".货叉中位精确对准标识 AND "堆垛机过程数据块".货叉左近中范围标识)
OR ("堆垛机过程数据块".手动内部按钮货叉右 AND "堆垛机过程数据块".货叉右端精确对准标识) THEN
"堆垛机过程数据块".手动货叉停止标识 := 1;
END_IF;
IF "堆垛机过程数据块".手动货叉停止标识 THEN
"货叉变频器状态控制":P := W#16#047E;
"货叉变频器速度控制":P := 0;
ELSIF
//货叉左伸低速
("堆垛机过程数据块".手动内部按钮货叉左 AND NOT "堆垛机过程数据块".手动内部换速功能)
OR ("堆垛机过程数据块".手动内部按钮货叉左 AND "堆垛机过程数据块".手动内部换速功能 AND
("堆垛机过程数据块".货叉左端模糊对准标识 OR "堆垛机过程数据块".货叉右近中范围标识))
AND NOT "堆垛机过程数据块".手动内部按钮水平前 AND NOT "堆垛机过程数据块".手动内部按钮水平后
AND NOT "堆垛机过程数据块".手动内部按钮起升上 AND NOT "堆垛机过程数据块".手动内部按钮起升下
AND NOT "堆垛机过程数据块".手动内部按钮货叉右 THEN
"货叉变频器状态控制":P := W#16#047F;
"货叉变频器速度控制":P := 400;
ELSIF
//货叉右伸低速
("堆垛机过程数据块".手动内部按钮货叉右 AND NOT "堆垛机过程数据块".手动内部换速功能)
OR ("堆垛机过程数据块".手动内部按钮货叉右 AND "堆垛机过程数据块".手动内部换速功能 AND
("堆垛机过程数据块".货叉右端模糊对准标识 OR "堆垛机过程数据块".货叉左近中范围标识))
AND NOT "堆垛机过程数据块".手动内部按钮水平前 AND NOT "堆垛机过程数据块".手动内部按钮水平后
AND NOT "堆垛机过程数据块".手动内部按钮起升上 AND NOT "堆垛机过程数据块".手动内部按钮起升下
AND NOT "堆垛机过程数据块".手动内部按钮货叉左 THEN
"货叉变频器状态控制":P := W#16#0C7F;
"货叉变频器速度控制":P := 400;
ELSIF
//货叉左伸高速
"堆垛机过程数据块".手动内部按钮货叉左 AND "堆垛机过程数据块".手动内部换速功能
AND NOT "堆垛机过程数据块".货叉左端模糊对准标识 AND NOT "堆垛机过程数据块".货叉右近中范围标识
AND NOT "堆垛机过程数据块".手动内部按钮水平前 AND NOT "堆垛机过程数据块".手动内部按钮水平后
AND NOT "堆垛机过程数据块".手动内部按钮起升上 AND NOT "堆垛机过程数据块".手动内部按钮起升下
AND NOT "堆垛机过程数据块".手动内部按钮货叉右 THEN
"货叉变频器状态控制":P := W#16#047F;
"货叉变频器速度控制":P := 6250;
ELSIF
//货叉右伸高速
"堆垛机过程数据块".手动内部按钮货叉右 AND "堆垛机过程数据块".手动内部换速功能
AND NOT "堆垛机过程数据块".货叉右端模糊对准标识 AND NOT "堆垛机过程数据块".货叉左近中范围标识
AND NOT "堆垛机过程数据块".手动内部按钮水平前 AND NOT "堆垛机过程数据块".手动内部按钮水平后
AND NOT "堆垛机过程数据块".手动内部按钮起升上 AND NOT "堆垛机过程数据块".手动内部按钮起升下
AND NOT "堆垛机过程数据块".手动内部按钮货叉左 THEN
"货叉变频器状态控制":P := W#16#0C7F;
"货叉变频器速度控制":P := 6250;
ELSE
"货叉变频器状态控制":P := W#16#047E;
"货叉变频器速度控制":P := 0;
END_IF;
//货叉故障停车 西门子G120变频器
IF "货叉变频器故障" OR "运行电机抱闸打开" OR "起升电机抱闸打开"THEN
"货叉变频器状态控制":P := W#16#047E;
"货叉变频器速度控制":P := 0;
"货叉变频器投入Q" := 0;
ELSE
"货叉变频器投入Q" := 1;
END_IF;