关键字:PLC、西门子、一键启停、LAD
系列文章目录
基于7-200 SMART实现Modbus TCP通信
顺序功能图——(二)设计机组延时关机程序
基于S7-200 SMART实现MATLAB写入与读取PLC数据
文章目录
前言
提示:以下内容均属个人思考,本人也还是技术小白,如有出现纰漏,请各位大佬指出。:
一日在编写PLC代码时发现了早期在著名大学B站学习的一段例程——“一键启停”,不过对于当时的我来说这段程序看起来有点陌生,于是决定再学习巩固一下基础知识。经过在网上寻找资源发现,大部分的示例都直接给出程序但缺少一点分析,有分析的又需要交费,于是就有了这篇博客。
提示:以下是本篇文章正文内容,下面案例可供参考,且案例中被改进程序与改进程序是原理关联,可能出现被改进程序与改进程序中变量名不同的情况
一、硬件与软件环境
操作系统:WIN11
编程软件:STEP 7-MicroWIN SMART V2.8
编程语言:LAD
PLC:西门子——SIMATIC S7-200 SMART CPU ST60
二、基本的起保停电路`
1.普通线圈
普通线圈构成的起保停LAD代码如下:
变量含义:
I0.0——启动按钮
I0.1——停止按钮
Q0.0——电机
工作原理:动作前电机还未得电
①按下启动按钮→常开触点I0.0闭合+常闭触点I0.1闭合→线圈Q0.0得电→电机启动
②按钮都无动作→常开触点Q0.0闭合+常闭触点I0.1闭合→线圈Q0.0得电→电机保持
③按下停止按钮→常开触点Q0.0闭合+常闭触点I0.1断开→线圈Q0.0失电→电机停止
以上程序中的I、Q寄存器如果换成M寄存器也可以使用如下LAD代码:
其中由于M寄存器依靠鼠标控制赋值,以人类的手速很难达到按钮的效果,所以这里使用触点+上升沿识别的方式模拟按钮
变量含义:
M0.0+上升沿——启动按钮
M0.1+上升沿——停止按钮
M0.4——电机
SM0.0在这里的作用是防止报错
2.置位/复位线圈
变量含义:
I0.0——启动按钮
I0.1——停止按钮
Q0.0——电机
工作原理:动作前电机还未得电
①按下启动按钮→常开触点I0.0闭合+常闭触点I0.1闭合→线圈Q0.0得电→电机启动
②按钮都无动作→常开触点Q0.0闭合+常闭触点I0.1闭合→线圈Q0.0得电→电机保持
③按下停止按钮→常开触点Q0.0闭合+常闭触点I0.1断开→线圈Q0.0失电→电机停止
以上程序中的I、Q寄存器如果换成M寄存器也可以使用如下LAD代码:
变量含义:
M0.0+上升沿——启动按钮
M0.1+上升沿——停止按钮
M0.2——电机
提示:本节内容如果觉得理解吃力的小伙伴,如果排除博主文笔不好的原因,可能需要自己去补一下PLC的相关知识。
三、一键启停电路
首先让我们思考一个问题,如何将两个按钮简化为一个按钮?
在基本的起保停电路中,我们利用不同的变量对应两个按钮,如果只用一个变量代表按钮,那么还必须有一个中间变量用于区分当前的系统状态,即“电机转动”与“电机停止”。
1.基于置位/复位线圈实现一键启停_1
我们先从思路比较简单的置位/复位线圈起保停电路开始做改动
变量含义:
M0.0+上升沿——按钮
M0.7——电机
这样的改动看似符合了我们的要求:
①电机停止+按钮按下→常闭触点M0.7闭合+常开触点M0.0上升沿识别→M0.7置位
②电机运行+按钮按下→常开触点M0.7闭合+常开触点M0.0上升沿识别→M0.7复位
但实际运行起来的结果不能说差强人意吧,只能说是相差甚远——不管如何按下按钮电机都不会启动。
上述问题的出现是由于我们对程序扫描的原理还不熟悉,博主认为上述程序需要以线圈为单元进行分析:当前扫描周期开始时电机停止,即M0.7未得电
①第一个线圈:电机停止+按钮按下→常闭触点M0.7闭合+常开触点M0.0上升沿识别→M0.7置位
②第二个线圈:电机停止+按钮按下+M0.7置位→常开触点M0.7闭合+常开触点M0.0上升沿识别→M0.7复位
在一个扫描周期中线圈复位又置位,但是注意这里变量的值会先暂存只有等所有程序都扫描完成后,才能将变量的值更新,这也是为什么我们发现实际变量并没有变化!
知道了问题的原因,那就可以针对性的进行改进了。
已知不能直接让代表电机的线圈M0.7直接与按钮相连,博主这里采用增加一个中间变量的方式(已验证):
以线圈为单元进行分析:当前扫描周期开始时M0.7未得电
第一个线圈程序:M0.0按钮按下+常闭触点M0.7闭合→M0.1线圈置位
第二个线圈程序:M0.0按钮按下+常开触点M0.7断开→M0.1线圈不复位
第三个线圈程序:常开触点M0.1闭合→M0.7线圈得电当前扫描周期开始时M0.7已得电
第一个线圈程序:M0.0按钮未按下+常闭触点M0.7断开→M0.1线圈不置位
第二个线圈程序:M0.0按钮未按下+常开触点M0.7闭合→M0.1线圈不复位
第三个线圈程序:常开触点M0.1闭合→M0.7线圈得电当前扫描周期开始时M0.7已得电
第一个线圈程序:M0.0按钮按下+常闭触点M0.7断开→M0.1线圈不置位
第二个线圈程序:M0.0按钮按下+常开触点M0.7闭合→M0.1线圈不复位
第三个线圈程序:常开触点M0.1闭合→M0.7线圈得电
2.基于置位/复位线圈实现一键启停_2
如果小伙伴们能理解第一种的改进,那么第二种会好理解很多。
重新梳理第一种的改进:
首先,我们确定标志位
为电机运行状态
而且,我们知道电机运行状态
不能与电机输出
直接相连
所以,我们用一个中间变量
作为按钮
输出的一个中转站控制电机输出
思考一下:
如果可以在按下按钮的启动电机时候屏蔽复位线圈,图6的好像也可以解决问题。
基于上述思考,我们还可以针对图6的问题进行一下改进:
变量含义:
M2.0+上升沿——按钮
M2.7——电机
以线圈为单元进行分析:当前扫描周期开始时M2.7未得电
第一个线圈程序:M2.0按钮按下+常闭触点M2.7闭合→M2.7线圈置位
第二个线圈程序:M2.0按钮按下+常闭触点M2.7闭合→M2.1线圈得电
第三个线圈程序:M2.0按钮按下+常闭触点M2.1断开→M2.7线圈不复位当前扫描周期开始时M2.7已得电
第一个线圈程序:M2.0按钮未按下+常闭触点M2.7断开→M2.7线圈不置位
第二个线圈程序:M2.0按钮未按下+常闭触点M2.7断开→M2.1线圈失电
第三个线圈程序:M2.0按钮未按下+常闭触点M2.1闭合+常开触点M2.7闭合→M2.7线圈不复位当前扫描周期开始时M2.7已得电
第一个线圈程序:M2.0按钮按下+常闭触点M2.7断开→M2.7线圈不置位
第二个线圈程序:M2.0按钮按下+常闭触点M2.7断开→M2.1线圈失电
第三个线圈程序:M2.0按钮按下+常闭触点M2.1闭合+常开触点M2.7闭合→M2.7线圈复位
3.基于普通线圈实现一键启停_3
针对普通线圈实现的起保停,在改进前我们先将图2.2的电路进行如下改进:
图9的改进是基于停止按钮的核心功能——断开保持电路的电流,故只要断开触点
在保持触点
与电机输出
之间都可以实现断开功能
变量含义:
M1.0+上升沿——按钮
M1.7——电机
以线圈为单元进行分析:当前扫描周期开始时M1.7未得电
第一个线圈程序:M1.0按钮按下→M1.1得电
第二个线圈程序:M1.1常开触点闭合+M1.7常闭触点闭合→M1.7线圈得电当前扫描周期开始时M0.7已得电
第一个线圈程序:M1.0按钮不按下→M1.1不得电
第二个线圈程序:M1.1常闭触点闭合+M1.7常开触点闭合→M1.7线圈得电当前扫描周期开始时M0.7已得电
第一个线圈程序:M1.0按钮不按下→M1.1不得电
第二个线圈程序:M1.1常闭触点闭合+M1.7常开触点闭合→M1.7线圈得电
问题 :
有些小伙伴可能有疑惑,为什么之前两种改进增加的标志位都是两个,如图8的常闭触点M2.7与常开触点M2.7,这个为什么是只在原来基础上增加了一个常闭触点M1.7?
解答:
图9中起保持作用的常开触点Q0.0(同图10的常开触点M1.7)其实也有表示当前系统状态的作用,故这里只需要添加一个常闭触点M1.7
4.基于取反字节指令实现一键启停_4
以上三种改进都是只用到了基础的线圈和触点,指令比较简单但是逻辑上比较难以理解,后面五种改进就属于指令上比较复杂,但逻辑上简单。
该指令实现将输入的数据按位取反的功能:
变量含义:
M3.0+上升沿——按钮
M3.7——电机
以线圈为单元进行分析:当前扫描周期开始时3.7未得电
取反程序:M3.0按钮按下→VB3取反
线圈程序:VB3=1→V3.0=1→M3.7线圈得电当前扫描周期开始时3.7已得电
取反程序:M3.0按钮未按下→VB3不取反
线圈程序:VB3=1→V3.0=1→M3.7线圈得电当前扫描周期开始时3.7已得电
取反程序:M3.0按钮按下→VB3取反
线圈程序:VB3=0→V3.0=0→M3.7线圈失电
5.基于异或字节指令实现一键启停_5
基于上述指令实现一键启停:
变量含义:
M4.0+上升沿——按钮
M4.7——电机
以线圈为单元进行分析:当前扫描周期开始时4.7未得电
异或程序:M4.0按钮按下→VB4与1异或
线圈程序:VB4=1→V4.0=1→M4.7线圈得电当前扫描周期开始时4.7已得电
异或程序:M4.0按钮按下→VB4不与1异或
线圈程序:VB4=1→V4.0=1→M4.7线圈得电当前扫描周期开始时4.7已得电
异或程序:M4.0按钮按下→VB4与1异或
线圈程序:VB4=0→V4.0=0→M4.7线圈失电
6.基于置位优先指令实现一键启停_6
基于上述指令实现一键启停:
变量含义:
M5.0+上升沿——按钮
M5.7——电机
以线圈为单元进行分析:当前扫描周期开始时5.7未得电
置位优先程序:M5.0按钮按下+常闭触点M5.7闭合+置位优先指令→M5.7置位当前扫描周期开始时5.7未得电
置位优先程序:M5.0按钮未按下+常开触点M5.7闭合+置位优先指令→M5.7不复位当前扫描周期开始时5.7已得电
置位优先程序:M5.0按钮按下+常开触点M5.7闭合+置位优先指令→M5.7复位
7.基于复位优先指令实现一键启停_7
变量含义:
M6.0+上升沿——按钮
M6.7——电机
以线圈为单元进行分析:当前扫描周期开始时6.7未得电
置位优先程序:M6.0按钮按下+常闭触点M6.7闭合+复位优先指令→M6.7置位当前扫描周期开始时6.7未得电
置位优先程序:M6.0按钮未按下+常开触点M6.7闭合+复位优先指令→M6.7不复位当前扫描周期开始时6.7已得电
置位优先程序:M6.0按钮按下+常开触点M6.7闭合+复位优先指令→M6.7复位
8.基于计数器指令实现一键启停_8
软件自带的帮助文档中只有减计数器,不过原理都差不多。
基于上述指令实现一键启停:
变量含义:
M7.0+上升沿——按钮
M7.7——电机
以线圈为单元进行分析:当前扫描周期开始时7.7未得电(C7=0)
计数程序:M7.0按钮按下→C7=1
置位线圈:C7=1→M7.7置位
复位线圈:C7=1→M7.7不复位当前扫描周期开始时7.7已得电(C7=1)
计数程序:M7.0按钮不按下→C7=1
置位线圈:C7=1→M7.7不置位
复位线圈:C7=1→M7.7不复位当前扫描周期开始时7.7未得电(C7=1)
计数程序:M7.0按钮按下→C7=2→C7常开触点闭合→置位C7→C7=0
置位线圈:C7=0→M7.7不置位
复位线圈:C7=0→M7.7复位
总结
到这里博主总共在这里总结了我自己见过的八种一键启停电路,并分享了自己的思考过程与原理分析,如果有错误也请大佬们在评论区指正,
一点感想
警告:以下就是一些个人的直抒胸臆了
这应该算是我写的第一篇长文,分享自己在学习过程种的思考历程与想法。写这篇的原因有以下:
①在学习的过程中也看到了网上的许多资料,虽然有许多靠谱的答案,但总感觉不明白原理就感觉不是很畅快,如果以上思路是正确的希望能帮到一些同样有困扰的小伙伴,如果不正确也希望能帮助大家思考;
②本科与研究生偏向理论的研究让我在工作中遇到了很多问题,向老前辈们请教的时候总想问点为什么,但是迎来的大多是略带不屑与不耐烦的回复,希望能我的思路和答案可以帮助到大家,而不是获得“冷嘲热讽”的回答;
③许多问题在我看来可以直接获取思路与答案进行快速学习,希望我的问题与答案能帮助部分小伙伴减少在准备工作上花费的时间,进而将大部分精力花在真正重要或者困难的部分;
④自己的一点小私心,在帮助他人的过程中获得一点自我满足 记录一下自己的思考,方便之后忘记了回来看看。