自动化立体仓库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;

相关推荐
l***74949 分钟前
开源模型应用落地-工具使用篇-Spring AI-Function Call(八)
人工智能·spring·开源
我是小妖怪,潇洒又自在12 分钟前
springcloud alibaba(四)OpenFeign实现服务调用
后端·spring·spring cloud·springboot
k***19517 分钟前
Tomcat的升级
java·tomcat
j***49561 小时前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
草莓熊Lotso1 小时前
unordered_map/unordered_set 使用指南:差异、性能与场景选择
java·开发语言·c++·人工智能·经验分享·python·网络协议
20岁30年经验的码农3 小时前
Spring Cloud Gateway 网关技术文档
java
likuolei4 小时前
XML DOM 节点类型
xml·java·服务器
w***74406 小时前
SpringBoot项目如何导入外部jar包:详细指南
spring boot·后端·jar
ZHE|张恒6 小时前
Spring Bean 生命周期
java·spring
tsumikistep7 小时前
【前后端】接口文档与导入
前端·后端·python·硬件架构