西门子PLC常用底层逻辑块分享

您所在的位置:网站首页 膨胀蝶阀控制块 西门子PLC常用底层逻辑块分享

西门子PLC常用底层逻辑块分享

2024-07-09 15:08| 来源: 网络整理| 查看: 265

文章目录 前言一、功能概述二、电动蝶阀程序编写1.创建自定义数据类型2.创建FB功能块“电动蝶阀”3.编写程序

前言

本文分享一个自己编写的电动蝶阀控制逻辑块。

一、功能概述 手动状态、自动状态、机旁状态、强制状态、检修状态自由切换;具有开阀超时、关阀超时报警功能;手动状态下,按开阀按钮开阀,按关阀按钮关阀;自动状态下,根据程序联锁要求自动开阀关阀;强制状态下,跳过允许开阀关阀条件,直接开阀或关阀;检修状态下,自动关阀,且按下开阀按钮不允许开阀;按停阀按钮,按钮停止开阀或关阀。 二、电动蝶阀程序编写 1.创建自定义数据类型

在这里插入图片描述

2.创建FB功能块“电动蝶阀”

建立如下引脚变量: 在这里插入图片描述

3.编写程序

代码如下: 1.赋值

#HMI.Ready_DI := #Ready_DI; #HMI.Locally_DI := #Locally_DI; #HMI.Open_DI := #Open_DI; #HMI.Close_DI := #Close_DI; #Open_DO := #HMI.Open_DO; #Close_DO := #HMI.Close_DO; #Open_Ovq_DO := #HMI.Open_Ovq_DO; #Close_Ovq_DO := #HMI.Close_Ovq_DO;

2.时间转换、启动超时判断、故障复位

#HMI.#Fault_ALL := #Fault OR #HMI.#Open_Time_Out OR #HMI.#Close_Time_Out OR #HMI.#Limit_Fault OR #Open_Ovq_DI OR #Close_Ovq_DI; //故障赋值 #HMI.#Lcl_DO := #Locally_DI AND #HMI.#HMI_Lcl; //有就地信号,且按下机旁允许按钮,才会显示机旁允许状态 #Open_Time := DINT_TO_TIME(REAL_TO_DINT(#HMI.#Open_T_Set * 1000.0)); //输入1表示1S #Close_Time := DINT_TO_TIME(REAL_TO_DINT(#HMI.#Close_T_Set * 1000.0)); #Open_IEC(IN := #Open_DO AND NOT #HMI.#HMI_Close AND NOT #Open_DI AND NOT #HMI.#Limit_Fault, PT := #Open_Time); //开阀延时 #Close_IEC(IN := #Close_DO AND NOT #HMI.#HMI_Open AND NOT #Close_DI AND NOT #HMI.#Limit_Fault, PT := #Close_Time); //关阀延时 #Limit_IEC(IN := #Open_DI AND #Close_DI, PT := #Limit_Time); //限位超时 IF #Open_IEC.Q THEN #HMI.#Open_Time_Out := 1; #HMI.#Open_DO := 0; END_IF; //开阀超时输出 IF #Close_IEC.Q THEN #HMI.#Close_Time_Out := 1; #HMI.#Close_DO := 0; END_IF; //关阀超时输出 IF #Limit_IEC.Q THEN #HMI.#Limit_Fault := 1; #HMI.#Open_DO := 0; #HMI.#Close_DO := 0; END_IF; //限位故障输出 IF #HMI.#HMI_Rst THEN #HMI.#Fault_ALL := 0; #HMI.#Limit_Fault := 0; //复位限位故障输出 #HMI.#Open_Time_Out := 0; //复位开阀超时输出 #HMI.#Close_Time_Out := 0; //复位关阀超时输出 END_IF; #HMI.#Open_Ovq_DO := #Open_Ovq_DI; #HMI.#Close_Ovq_DO := #Close_Ovq_DI;

3.检测信号上升沿

#P_HMI_Lcl(CLK := #HMI.#HMI_Lcl); #P_HMI_EmgManual(CLK := #HMI.#HMI_EmgManual); #P_HMI_Pause(CLK := #HMI.#HMI_Pause);

4.手动状态显示

IF #HMI.#HMI_Manual = 1 AND NOT #HMI.#HMI_Auto AND NOT #HMI.#HMI_EmgManual AND NOT #HMI.#HMI_Pause AND NOT #HMI.#Lcl_DO THEN #HMI.#Manual_DO := 1; #HMI.#Auto_DO := 0; #HMI.#EmgManual_DO := 0; END_IF; //默认手动状态 IF NOT #HMI.#Auto_DO AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO AND NOT #HMI.#EmgManual_DO THEN #HMI.#Manual_DO := 1; #HMI.#Auto_DO := 0; #HMI.#EmgManual_DO := 0; END_IF;

5.自动状态显示

IF #HMI.#HMI_Auto = 1 AND NOT #HMI.#HMI_Manual AND NOT #HMI.#HMI_EmgManual AND NOT #HMI.#HMI_Pause AND NOT #HMI.#Lcl_DO THEN #HMI.#Manual_DO := 0; #HMI.#Auto_DO := 1; #HMI.#EmgManual_DO := 0; END_IF;

6.强制状态显示

IF #HMI.#HMI_EmgManual = 1 AND NOT #HMI.#HMI_Manual AND NOT #HMI.#HMI_Auto AND NOT #HMI.#HMI_Pause AND NOT #HMI.#Lcl_DO THEN #HMI.#Manual_DO := 0; #HMI.#Auto_DO := 0; #HMI.#EmgManual_DO := 1; #HMI.#HMI_Pause := 0; END_IF; IF #HMI.#HMI_EmgManual = 0 THEN #HMI.#EmgManual_DO := 0; END_IF;

7.休止状态显示

IF #HMI.#HMI_Pause = 1 AND NOT #HMI.#HMI_Manual AND NOT #HMI.#HMI_Auto AND NOT #HMI.#HMI_EmgManual AND NOT #HMI.#Lcl_DO THEN #HMI.#Manual_DO := 0; #HMI.#Auto_DO := 0; #HMI.#EmgManual_DO := 0; #HMI.#Pause_DO := 1; #HMI.#HMI_EmgManual := 0; END_IF; IF #HMI.#HMI_Pause = 0 THEN #HMI.#Pause_DO := 0; END_IF;

8.手动状态下开阀、关阀

IF #Ready_DI AND #HMI.#HMI_Open AND #HMI.#Manual_DO AND NOT #HMI.#HMI_Close AND NOT #HMI.#Limit_Fault AND NOT #HMI.#Open_Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO AND NOT #Open_Ovq_DI AND NOT #Fault THEN #HMI.#Open_DO := 1; #HMI.#Close_DO := 0; END_IF; IF #Ready_DI AND #HMI.#HMI_Close AND #HMI.#Manual_DO AND NOT #HMI.#HMI_Open AND NOT #HMI.#Limit_Fault AND NOT #HMI.#Close_Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO AND NOT #Close_Ovq_DI AND NOT #Fault THEN #HMI.#Open_DO := 0; #HMI.#Close_DO := 1; END_IF;

9.自动状态下开阀、关阀

IF #Ready_DI AND #Auto_Open AND #HMI.#Auto_DO AND NOT #HMI.#HMI_Close AND NOT #HMI.#Limit_Fault AND NOT #HMI.#Open_Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO AND NOT #Open_Ovq_DI AND NOT #Fault THEN #HMI.#Open_DO := 1; #HMI.#Close_DO := 0; END_IF; IF #Ready_DI AND #Auto_Close AND #HMI.#Auto_DO AND NOT #HMI.#HMI_Open AND NOT #HMI.#Limit_Fault AND NOT #HMI.#Close_Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO AND NOT #Close_Ovq_DI AND NOT #Fault THEN #HMI.#Open_DO := 0; #HMI.#Close_DO := 1; END_IF;

10.强制状态下开阀、关阀

IF #HMI.#EmgManual_DO AND #HMI.#HMI_Open AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO AND NOT #Open_Ovq_DI AND NOT #Fault AND NOT #HMI.#Limit_Fault AND NOT #HMI.#Open_Time_Out THEN #HMI.#Open_DO := 1; #HMI.#Close_DO := 0; END_IF; IF #HMI.#EmgManual_DO AND #HMI.#HMI_Close AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO AND NOT #Close_Ovq_DI AND NOT #Fault AND NOT #HMI.#Limit_Fault AND NOT #HMI.#Close_Time_Out THEN #HMI.#Open_DO := 0; #HMI.#Close_DO := 1; END_IF;

11.停阀

IF (#HMI.#Manual_DO OR #HMI.#Auto_DO OR #HMI.#EmgManual_DO) AND #HMI.#HMI_Stop THEN #HMI.#Open_DO := 0; #HMI.#Close_DO := 0; END_IF;

12.休止状态下关阀

IF #HMI.#Pause_DO AND NOT #HMI.#HMI_Lcl AND NOT #HMI.#Lcl_DO THEN #HMI.#Open_DO := 0; #HMI.#Close_DO := 1; END_IF;

13.开关到位后,开阀关阀不再输出

IF #Open_DI THEN #HMI.#Open_DO := 0; END_IF; IF #Close_DI THEN #HMI.#Close_DO := 0; END_IF;

14.按钮互锁

IF #HMI.#HMI_Lcl AND #P_HMI_EmgManual.Q THEN #HMI.#HMI_EmgManual := 0; END_IF; IF #HMI.#HMI_Lcl AND #P_HMI_Pause.Q THEN #HMI.#HMI_Pause := 0; END_IF; IF #HMI.#HMI_EmgManual AND #P_HMI_Lcl.Q THEN #HMI.#HMI_Lcl := 0; END_IF; IF #HMI.#HMI_EmgManual AND #P_HMI_Pause.Q THEN #HMI.#HMI_Pause := 0; END_IF; IF #HMI.#HMI_Pause AND #P_HMI_Lcl.Q THEN #HMI.#HMI_Lcl := 0; END_IF; IF #HMI.#HMI_Pause AND #P_HMI_EmgManual.Q THEN #HMI.#HMI_EmgManual := 0; END_IF;

15.按钮自复位

IF NOT "AlwaysFALSE" THEN #HMI.#HMI_Open := 0; #HMI.#HMI_Close := 0; #HMI.#HMI_Manual := 0; #HMI.#HMI_Auto := 0; #HMI.#HMI_Rst := 0; #HMI.#HMI_Stop := 0; END_IF;


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3