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

相关推荐
碎叶城李白13 分钟前
若依学习笔记1-validated
java·笔记·学习·validated
都叫我大帅哥39 分钟前
🌊 Redis Stream深度探险:从秒杀系统到面试通关
java·redis
都叫我大帅哥40 分钟前
Redis持久化全解析:从健忘症患者到记忆大师的逆袭
java·redis
程序猿阿越1 小时前
Kafka源码(一)Controller选举与创建Topic
java·后端·源码
程序员爱钓鱼1 小时前
Go语言项目工程化 — 常见开发工具与 CI/CD 支持
开发语言·后端·golang·gin
程序无bug1 小时前
Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步
java
二川bro1 小时前
飞算智造JavaAI:智能编程革命——AI重构Java开发新范式
java·人工智能·重构
Jiude1 小时前
MinIO 社区版被故意阉割,Web管理功能全面移除。我来试试国产RustFS
后端·docker·架构
Q_970956391 小时前
java+vue+SpringBoo校园失物招领网站(程序+数据库+报告+部署教程+答辩指导)
java·数据库·vue.js