西门子PLC常用底层逻辑块分享_单/双输出电机

文章目录

  • 前言
  • 一、功能概述
  • 二、单输出电机程序编写
    • 1.创建自定义数据类型
    • 2.创建FB功能块“单输出电机”
    • 3.编写程序
  • 三、双输出电机程序编写
    • 1.创建自定义数据类型
    • 2.创建FB功能块“双输出电机”
    • 3.编写程序


前言

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


一、功能概述

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

二、单输出电机程序编写

1.创建自定义数据类型

在这里插入图片描述

2.创建FB功能块“单输出电机”

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

3.编写程序

代码如下:
1.赋值

#HMI.Ready_DI := #Ready_DI;
#HMI.Locally_DI := #Locally_DI;
#HMI.Running_DI := #Running_DI;
#Start_DO := #HMI.Start_DO;

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

#HMI.Fault_All := #Fault OR #HMI.Time_Out; //故障赋值
#HMI.Lcl_DO := #Locally_DI AND #HMI.HMI_Lcl; //有就地信号,且按下机旁允许按钮,才会显示机旁允许状态#Start_Time := DINT_TO_TIME(REAL_TO_DINT(#HMI.Start_T_Set * 1000.0)); //输入1表示1S#RUN_IEC(IN := #HMI.#Start_DO AND NOT #HMI.HMI_Stop AND NOT #HMI.#Running_DI AND NOT #HMI.Fault_All,PT := #Start_Time); //启动延时IF #RUN_IEC.Q THEN#HMI.Time_Out := 1;#HMI.#Start_DO := 0;
END_IF; //启动超时输出IF #HMI.HMI_Rst THEN#HMI.Fault_All := 0;#HMI.Time_Out := 0; //复位启动超时输出
END_IF;

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_Start AND #HMI.#Manual_DO AND NOT #HMI.#HMI_Stop AND NOT #HMI.#Fault_All AND NOT #HMI.#Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 1;
END_IF;
IF #Ready_DI AND #HMI.#HMI_Stop AND #HMI.#Manual_DO AND NOT #HMI.#HMI_Start AND NOT #HMI.#Fault_All AND NOT #HMI.#Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 0;
END_IF;

9.自动状态下电机启动、停止

IF #Ready_DI AND #Auto_Start AND #HMI.#Auto_DO AND NOT #HMI.#HMI_Stop AND NOT #HMI.#Fault_All AND NOT #HMI.#Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 1;
END_IF;
IF #Ready_DI AND #Auto_Stop AND #HMI.#Auto_DO AND NOT #HMI.#HMI_Start AND NOT #HMI.#Fault_All AND NOT #HMI.#Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 0;
END_IF;

10.强制状态下电机启动、停止

IF #HMI.#EmgManual_DO AND #HMI.#HMI_Start AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 1;
END_IF;
IF #HMI.#EmgManual_DO AND #HMI.#HMI_Stop AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 0;
END_IF;

11.休止状态下电机停止

IF #HMI.#Pause_DO THEN#HMI.#Start_DO := 0;
END_IF;

12.按钮互锁

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;

13.按钮自复位

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

三、双输出电机程序编写

1.创建自定义数据类型

同单输出电机。

2.创建FB功能块“双输出电机”

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

3.编写程序

代码如下:
1.赋值

#HMI.Ready_DI := #Ready_DI;
#HMI.Locally_DI := #Locally_DI;
#HMI.Running_DI := #Running_DI;
#Start_DO := #HMI.Start_DO;
#Stop_DO := #HMI.Stop_DO;

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

#HMI.#Fault_All := #Fault OR #HMI.#Time_Out; //故障赋值
#HMI.#Lcl_DO := #Locally_DI AND #HMI.#HMI_Lcl; //有就地信号,且按下机旁允许按钮,才会显示机旁允许状态#Start_Time := DINT_TO_TIME(REAL_TO_DINT(#HMI.#Start_T_Set * 1000.0)); //输入1表示1S#RUN_IEC(IN := #HMI.#Start_DO AND NOT #HMI.#HMI_Stop AND NOT #HMI.#Running_DI AND NOT #HMI.#Fault_All,PT := #Start_Time); //启动延时IF #RUN_IEC.Q THEN#HMI.#Time_Out := 1;#HMI.#Start_DO := 0;
END_IF; //启动超时输出IF #HMI.#HMI_Rst THEN#HMI.#Fault_All := 0;#HMI.#Time_Out := 0; //复位启动超时输出
END_IF;

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_Start AND #HMI.#Manual_DO AND NOT #HMI.#HMI_Stop AND NOT #HMI.#Fault_All AND NOT #HMI.#Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 1;#HMI.#Stop_DO := 0;
END_IF;
IF #Ready_DI AND #HMI.#HMI_Stop AND #HMI.#Manual_DO AND NOT #HMI.#HMI_Start AND NOT #HMI.#Fault_All AND NOT #HMI.#Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 0;#HMI.#Stop_DO := 1;
END_IF;

9.自动状态下电机启动、停止

IF #Ready_DI AND #Auto_Start AND #HMI.#Auto_DO AND NOT #HMI.#HMI_Stop AND NOT #HMI.#Fault_All AND NOT #HMI.#Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 1;#HMI.#Stop_DO := 0;
END_IF;
IF #Ready_DI AND #Auto_Stop AND #HMI.#Auto_DO AND NOT #HMI.#HMI_Start AND NOT #HMI.#Fault_All AND NOT #HMI.#Time_Out AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 0;#HMI.#Stop_DO := 1;
END_IF;

10.强制状态下电机启动、停止

IF #HMI.#EmgManual_DO AND #HMI.#HMI_Start AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 1;#HMI.#Stop_DO := 0;
END_IF;
IF #HMI.#EmgManual_DO AND #HMI.#HMI_Stop AND NOT #HMI.#Pause_DO AND NOT #HMI.#Lcl_DO THEN#HMI.#Start_DO := 0;#HMI.#Stop_DO := 1;
END_IF;

11.休止状态下电机停止

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

12.按钮互锁

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;

13.按钮自复位

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

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

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

相关文章

python 爬取人民新闻

基础信息获取: 要闻url:https://www.gov.cn/yaowen/liebiao/home.htm 下一页的url:https://www.gov.cn/yaowen/liebiao/home_1.htm 基础代码: import re import openpyxl import requests from lxml import etree import osdef …

Element-Plus: Select组件实现滚动分页加载

Element-Plus的select组件并没有自带滚动分页加载的功能,其虽然提供了自定义下拉菜单的底部的方式可以自定义上一页及下一页操作按钮的方式进行分页加载切换: 但如果不想通过点击分页按钮的方式,利用滚动触底进行下一页加载的话,…

力扣101---对称二叉树(简单题)

题目描述: 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2,2,null,3,null,3] 输出:false 非递归Java代…

数据结构:7、队列

一、队列的概念与结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头…

电脑坏了去维修,第一家报价800,第三家说报废!

这篇文章主要讲的是修理坏掉的电脑。 第一家报价300,第二家报价800,第三家说要报废! 相信很多朋友对于修电脑坏了要多少钱有很多困惑,修电脑坏了要多少钱,到底去正规售后服务还是去非品牌店维修一台坏掉的电脑。 今天高…

鸿蒙开发之MPChart图表开发

一、简介 随着移动应用的不断发展,数据可视化成为提高用户体验和数据交流的重要手段之一,因此需要经常使用图表,如折线图、柱形图等。OpenHarmony提供了一个强大而灵活的图表库是实现这一目标的关键。 在 ohpm 中心仓(https://ohpm.openharmony.cn/)中,汇聚了众多开发者…

数据分析可视化神器---streamlit框架,各种图表绘制,布局以及生产综合案例剖析

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

商家转账到零钱转账场景怎么选择

商家转账到零钱是什么? 商家转账到零钱功能整合了企业付款到零钱和批量转账到零钱,支持批量对外转账,操作便捷。如果你的应用场景是单付款,体验感和企业付款到零钱基本没差别。 商家转账到零钱的使用场景有哪些? 商…

BFS(宽度优先搜索)C++(Acwing)

代码&#xff1a; #include <cstring> #include <iostream> #include <algorithm>using namespace std;typedef pair<int, int> PII;const int N 110;int n, m; int g[N][N]; int d[N][N]; PII q[N * N];int bfs() {int hh 0, tt 0;q[0] {0, 0};m…

技术分析丨在伺服应用中为什么大多选择行星减速机?

在伺服应用中&#xff0c;反馈装置扮演着至关重要的角色&#xff0c;它通过对线性或旋转系统的扭矩、位置或速度进行精确控制&#xff0c;确保系统的高效、稳定运行。而在这些系统中&#xff0c;负载惯量与电机惯量之比是一个决定系统性能的关键因素。 当负载惯量较低时&#…

社交媒体的明日之星:揭示Facebook如何成为全球最受欢迎的平台之一

在当今数字时代&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。而在这众多社交媒体平台中&#xff0c;Facebook堪称一颗耀眼的明星&#xff0c;其如何成为全球最受欢迎的平台之一&#xff1f;让我们一起揭开这个谜底。 1. Facebook的创立与发展 Facebook由马克…

jupyter notebook 突然莫名奇妙的白屏

jupyter notebook 突然莫名奇妙的白屏 事件背景&#xff1a; 最近在折腾openai&#xff0c;哎&#xff0c;一言难尽&#xff0c;使用的是conda管理python版本的切换&#xff0c;使用jupyter notebook来运行python程序&#xff0c;其实PyCharm也行&#xff0c;但是&#xff0c;…