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

相关推荐
阿维的博客日记3 小时前
Hippo4j 线程池监控平台部署手册
java·spring boot·后端
万少4 小时前
AtomCode开发微信小程序《谁去呀》 全流程
前端·javascript·后端
GetcharZp4 小时前
Epic、暴雪都在用的 C++ 界面利器:Dear ImGui 零基础全景指南
后端
C+++Python5 小时前
详细介绍一下Java泛型的通配符
java·windows·python
pixcarp5 小时前
知识库系统的内容资产闭环怎么设计
服务器·数据库·后端·golang
红尘散仙5 小时前
别再手动录屏了:用 VHS 给终端应用生成会动的文档素材
后端·rust
JosieBook5 小时前
【数据库】时序预测能力的分级进化:TimechoAI如何让每一类用户都能精准预见未来
java·开发语言·数据库
一生了无挂6 小时前
Java处理JSON技巧教学(从基础到高阶实战全覆盖)
java·开发语言·json
李白的天不白7 小时前
使用 SmartAdmin 进行前后端开发
java·前端
swordbob7 小时前
Spring 单例 Bean 是线程安全的吗?
java·开发语言