西门子PLC常用底层逻辑块分享_电动蝶阀

文章目录

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


前言

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


一、功能概述

  1. 手动状态、自动状态、机旁状态、强制状态、检修状态自由切换;
  2. 具有开阀超时、关阀超时报警功能;
  3. 手动状态下,按开阀按钮开阀,按关阀按钮关阀;
  4. 自动状态下,根据程序联锁要求自动开阀关阀;
  5. 强制状态下,跳过允许开阀关阀条件,直接开阀或关阀;
  6. 检修状态下,自动关阀,且按下开阀按钮不允许开阀;
  7. 按停阀按钮,按钮停止开阀或关阀。

二、电动蝶阀程序编写

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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/542640.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SwiftUI的Alert使用方式

SwiftUI的Alert使用方式 记录一下SwiftUI的Alert使用方式,比较简单直接上代码 import SwiftUIstruct AlertBootCamp: View {State var showAlert falsevar body: some View {Button {showAlert.toggle()} label: {Text("alert show")}/// 单按钮 // …

19 OpenCV 霍夫曼变换检测圆

文章目录 cv::HoughCircles算子参数示例 cv::HoughCircles 因为霍夫圆检测对噪声比较敏感,所以首先要对图像做中值滤波。 基于效率考虑,Opencv中实现的霍夫变换圆检测是基于图像梯度的实现,分为两步: 检测边缘,发现可能…

米桃安全漏洞讲堂系列第4期:WebShell木马专题

一、WebShell概述 WebShell是黑客经常使用的一种恶意脚本也称为木马后门。其目的是获得对服务器的执行操作权限,比如执行系统命令、窃取用户文件、访问数据库、删改web页面等,其危害不言而喻。 黑客利用常见的漏洞,如文件上传、SQL注入、远程…

算法打卡day18|二叉树篇07|Leetcode 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

算法题 Leetcode 530.二叉搜索树的最小绝对差 题目链接:530.二叉搜索树的最小绝对差 大佬视频讲解:二叉搜索树的最小绝对差视频讲解 个人思路 因为是在二叉搜索树求绝对差,而二叉搜索树是有序的,那就把它想成在一个有序数组上求最值&…

weblogic CVE-2023-21839详细复现

1、本次复现使用vulhub的靶场 切换到靶场的目录下,用docker -compose up -d启动靶场 使用docker-compose ps -a查看靶场的端口 2、访问开启的环境 3、准备工作都做好之后开始复现 (1)开启JNDIExploit 工具地址:GitHub - WhiteH…

什么是 HTTPS?它是如何解决安全性问题的?

什么是 HTTPS? HTTPS(HyperText Transfer Protocol Secure)是一种安全的通信协议,用于在计算机网络上安全地传输超文本(如网页、图像、视频等)和其他数据。它是 HTTP 协议的安全版本,通过使用加…

DVWA靶场-CSRF跨站请求伪造

CSRF(跨站请求伪造)简介概念 CSRF(Cross—site request forgery),跨站请求伪造,是指利用受害者未失效的身份认证信息(cookie,会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面…

CSS扩展选择器

文章目录 1. 并集选择器2. 交集选择器3. 后代选择器4. 子代选择器5. 兄弟选择器5.1. 相邻兄弟选择器5.2. 通用兄弟选择器 6. 属性选择器7. 伪类选择器7.1. 动态伪类7.2. 结构伪类7.3. 否定伪类 8. 伪元素选择器9. Google 改进案例 1. 并集选择器 选中多个选择器对应的元素。一…

编程高级陷阱-破坏原有生态

今天聊点有意思的,昨天写了一个链表翻转,说一说里面大家会遇到的坑,具体可以看 教你三指针拿捏链表翻转-CSDN博客 有这样一个场景,给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回…

抖音获得抖音商品详情 API 返回值说明

抖音(Douyin)的商品详情API返回值通常会包含有关商品的详细信息。这些信息可能包括但不限于商品ID、商品名称、商品价格、商品图片、商品描述、商品销售属性等。以下是一个简化的抖音商品详情API返回值示例和说明: 调用链接获取详情 item_g…

复杂网络——半局部中心法

一、概述 由于最近写论文需要使用复杂网络知识中的半局部中心法,但是截止目前来说,网上几乎搜索不到有关的MATLAB程序代码,只有一篇用Python编写的程序,我的电脑中没有python,所以我花费一些时间,利用matla…

巴西交易所股票行情数据API接口

1. 历史日线 # Restful API https://tsanghi.com/api/fin/stock/BVMF/daily?token{token}&ticker{ticker}默认返回全部历史数据,也可以使用参数start_date和end_date选择特定时间段。 更新时间:收盘后3~4小时。 更新周期:每天。 请求方式…