自动化立体仓库PLC控制系统手动运行功能

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;


 

你可能感兴趣的:(立体仓库,PLC,spring,java,后端)