顺序功能图——(二)设计机组延时关机程序

关键字:顺序功能图;S7-200 SMART;梯形图;功能测试。

系列文章目录

基于S7-200 SMART实现一键启停
基于7-200 SMART实现Modbus TCP通信
基于S7-200 SMART实现MATLAB写入与读取PLC数据



前言

  基于顺序功能图设计PLC的程序是一种常用且有效的程序设计方式,本文将基于该方法实现机组延时关机程序。


一、机组延时关机程序的功能分解

  在设计一段程序之前,我们首先需要明确该程序的功能,比如说常见的起保停程序——按下启动按钮后电机启动,按下停止按钮后电机停止转动。这里对延时关机有以下要求:

  • 正常运行时①、②号机工作,指示灯不工作
  • 电源接通后①、②号机同时工作
  • 电源断开后,首先PLC控制一号机按钮关闭①号机
  • 在①号机关闭后进行计时
  • 在①号机关闭一段时间后后PLC控制指示灯运行信号开启指示灯并进行计时
  • 在指示灯开启一段时间后后PLC控制②号机运行信号关闭②号机,关机流程结束
  • 如果在上述流程中电源接通,则PLC进行控制恢复正常运行状态

可以检测到的信号是电源信号,可以控制的信号是①号机按钮信号、②号机运行信号、指示灯运行信号。

二、机组延时关机程序的顺序功能图

1.控制流程描述

  根据已知的描述,我们可以得到以下五种控制情况:

  1. 正常关机:机组正常运行状态时断开电源,断开电源导致进入①号机关闭状态,进入该状态 T 1 T_1 T1时间后进入指示灯开启状态,进入该状态 T 2 T_2 T2时间后关闭②号机状态
  2. 关闭电源后在指示灯启动前再接通电源:机组正常运行状态时断开电源,断开电源导致进入①号机关闭状态,①号机关闭 T 1 T_1 T1时间内接通电源导致进入①号机重开机准备状态,进入该状态 T 3 T_3 T3时间后进入①号机重开机状态,进入该状态 T 1 T_1 T1时间后进入机组正常运行状态
  3. 关闭电源后在指示灯启动前再接通电源,在恢复正常运行前再次断开电源:机组正常运行状态时断开电源,断开电源导致进入①号机关闭状态,①号机关闭 T 1 T_1 T1时间内接通电源导致进入①号机重开机准备状态,进入该状态 T 3 T_3 T3时间后进入①号机重开机状态,进入该状态 T 1 T_1 T1时间内断开电源导致进入①号机重关机准备状态,进入该状态 T 3 T_3 T3时间后进入①号机关闭状态
  4. 关闭电源后在指示灯启动后PLC关闭前接通电源:机组正常运行状态时断开电源,断开电源导致进入①号机关闭状态,进入该状态 T 1 T_1 T1时间后进入指示灯开启状态,进入该状态 T 2 T_2 T2时间内接通电源导致进入①号机重开机准备状态,进入该状态 T 3 T_3 T3时间后进入①号机重开机状态,进入该状态 T 1 T_1 T1时间后进入机组正常运行状态
  5. 关闭电源后在指示灯启动后PLC关闭前接通电源,在恢复正常运行前再次断开电源:机组正常运行状态时断开电源,断开电源导致进入①号机关闭状态,进入该状态 T 1 T_1 T1时间后进入指示灯开启状态,进入该状态 T 2 T_2 T2时间内接通电源导致进入①号机重开机准备状态,进入该状态 T 3 T_3 T3时间后进入①号机重开机状态,进入该状态 T 1 T_1 T1时间内断开电源导致进入①号机重关机准备状态,进入该状态 T 3 T_3 T3时间后进入①号机关闭状态

2.状态

  在上述五个控制情况中总共出现了七种状态——机组正常运行状态、①号机关闭状态、指示灯开启状态、关闭②号机状态、①号机重开机准备状态、①号机重开机状态、①号机重关机准备状态,分别用 x M G _ R U N xMG\_RUN xMG_RUN x M 1 _ O F F xM1\_OFF xM1_OFF x L _ O N xL\_ON xL_ON x M 2 _ O F F xM2\_OFF xM2_OFF x M 1 _ P R O N xM1\_PRON xM1_PRON x M 1 _ R O N xM1\_RON xM1_RON x M 1 _ P R O F F xM1\_PROFF xM1_PROFF表示,命名的方式参考数据类型+元件名+元件状元 x x x表示字位类型数据。上述七种状态下的各种变量的情况如图2.1:
Alt

图2.1 不同状态下的变量

其中 x M 1 B xM1B xM1B x M 2 R xM2R xM2R x L xL xL T 37 _ I N T37\_IN T37_IN T 38 _ I N T38\_IN T38_IN T 39 _ I N T39\_IN T39_IN x M 1 R xM1R xM1R分别表示①号机的按钮信号、②号机的运行信号、指示灯的接通信号、定时器T37的使能信号、定时器T38的使能信号、定时器T39的使能信号和①号机的运行信号。需要注意的是当①号机开机时①号机按钮信号的上升沿将关闭①号机,①号机关机时①号机按钮信号的上升沿将开启①号机,类似于电脑的一键启停按钮i。剩下的六个变量都是通过电平控制相关元件,例如 x M 2 R = 0 xM2R=0 xM2R=0则②号机停机、 x M 2 R = 1 xM2R=1 xM2R=1则②号机开机。

3.顺序功能图

  在绘制顺功能图前我们需要了解到,顺序设计的程序有许多不同的设计方式——普通线圈实现、置位/复位线圈实现、顺控指令实现、功能指令实现,根据不同的指令实现顺序功能图略有不同,这里博主采用最简单的普通线圈实现。在普通线圈实现时在不同状态中只需要考虑会置1的变量,故图2.1可以优先省略如图2.2:
Alt

图2.2 不同状态下的省略变量

根据五种不同情况的控制流程以及图2.2可以得到基于不同线圈的顺序功能图如下:
Alt

图2.3 基于普通线圈实现的顺序功能图

其中 x P O W xPOW xPOW表示总电源信号, S M 0.1 SM0.1 SM0.1表示PLC接通后第一个只在第一个扫描周期接通的触点, T 37 T37 T37 T 38 T38 T38 T 39 T39 T39表示以100ms为单位的延时接通定时器。以上变量都是电平变量,例如 T 37 = 0 T37=0 T37=0表示定时器未定时结束、 T 37 = 1 T37=1 T37=1表示定时器定时结束。

三、机组延时关机程序

  首先根据顺序功能图得到状态转移公式:
x M G _ R U N = ( S M 0.0 + x M 2 _ O F F × x P O W ↑ + x M 1 _ R O N × T 37 ↑ + x M G _ R U N ) × x M 1 _ O F F ‾ x M 1 _ O F F = ( x M G _ R U N × x P O W ↓ + x M 1 _ P R O F F × T 39 ↑ + x M 1 _ O F F ) × x L _ O N ‾ × x M 1 _ P R O N ‾ x L _ O N = ( x M 1 _ O F F × T 37 ↑ + x L _ O N ) × x M 1 _ P R O N ‾ × x M 2 _ O F F ‾ x M 2 _ O F F = ( x L _ O N × T 38 ↑ + x M 2 _ O F F ) × x M G _ R U N ‾ x M 1 _ P R O N = ( x M 1 _ O F F × T 37 ‾ × x P O W ↑ + x L _ O N × T 38 ‾ × x P O W ↑ + x M 1 _ P R O N ) × x M 1 _ R O N ‾ x M 1 _ R O N = ( x M 1 _ P R O N × T 39 ↑ + x M 1 _ R O N ) × x M G _ R U N ‾ × x M 1 _ P R O F F ‾ x M 1 _ P R O F F = ( x M 1 _ R O N × T 37 ‾ × x P O W ↓ + x M 1 _ P R O F F ) × x M 1 _ O F F ‾ (1) \begin{align} xMG\_RUN &=\left(SM0.0+{xM2\_OFF×xPOW\uparrow}+{xM1\_RON×T37\uparrow}+xMG\_RUN \right)×\overline{xM1\_OFF} \\ xM1\_OFF &=\left({xMG\_RUN×xPOW\downarrow}+{xM1\_PROFF×T39\uparrow}+xM1\_OFF\right)×\overline{xL\_ON}×\overline{xM1\_PRON} \\ xL\_ON &=\left({xM1\_OFF×T37\uparrow}+xL\_ON\right)×\overline{xM1\_PRON}×\overline{xM2\_OFF} \\ xM2\_OFF &=\left({xL\_ON ×T38\uparrow}+xM2\_OFF\right)×\overline{xMG\_RUN} \\ xM1\_PRON &=\left({xM1\_OFF×\overline{T37}×xPOW\uparrow}+{xL\_ON×\overline{T38}×xPOW\uparrow}+xM1\_PRON\right)×\overline{xM1\_RON} \\ xM1\_RON &=\left({xM1\_PRON×T39\uparrow}+xM1\_RON\right)×\overline{xMG\_RUN}×\overline{xM1\_PROFF} \\ xM1\_PROFF &=\left({xM1\_RON×\overline{T37}×xPOW\downarrow}+xM1\_PROFF\right)×\overline{xM1\_OFF} \end{align} \tag{1} xMG_RUNxM1_OFFxL_ONxM2_OFFxM1_PRONxM1_RONxM1_PROFF=(SM0.0+xM2_OFF×xPOW+xM1_RON×T37+xMG_RUN)×xM1_OFF=(xMG_RUN×xPOW+xM1_PROFF×T39+xM1_OFF)×xL_ON×xM1_PRON=(xM1_OFF×T37+xL_ON)×xM1_PRON×xM2_OFF=(xL_ON×T38+xM2_OFF)×xMG_RUN=(xM1_OFF×T37×xPOW+xL_ON×T38×xPOW+xM1_PRON)×xM1_RON=(xM1_PRON×T39+xM1_RON)×xMG_RUN×xM1_PROFF=(xM1_RON×T37×xPOW+xM1_PROFF)×xM1_OFF(1)以及输出公式:
x M 1 B = x M 1 _ O F F + x M 1 _ R O N x M 2 R = x M G _ R U N + x M 1 _ O F F + x M 1 _ O F F + x M 1 _ P R O N + x I M 1 _ R O N + x M 1 _ P R O F F x L = x L _ O N T 37 _ I N = x M 1 _ O F F + x M 1 _ R O N T 38 _ I N = x L _ O N T 39 _ I N = x M 1 _ P R O N + x M 1 _ P R O F F x M 1 R = x M G _ R U N + x M 1 _ R O N + x M 1 _ P R O F F (2) \begin{align} xM1B &=xM1\_OFF+xM1\_RON \\ xM2R &=xMG\_RUN+xM1\_OFF+xM1\_OFF+xM1\_PRON+xIM1\_RON+xM1\_PROFF \\ xL &=xL\_ON \\ T37\_IN &=xM1\_OFF+xM1\_RON \\ T38\_IN &=xL\_ON \\ T39\_IN &=xM1\_PRON+xM1\_PROFF \\ xM1R &=xMG\_RUN+xM1\_RON+xM1\_PROFF \end{align} \tag{2} xM1BxM2RxLT37_INT38_INT39_INxM1R=xM1_OFF+xM1_RON=xMG_RUN+xM1_OFF+xM1_OFF+xM1_PRON+xIM1_RON+xM1_PROFF=xL_ON=xM1_OFF+xM1_RON=xL_ON=xM1_PRON+xM1_PROFF=xMG_RUN+xM1_RON+xM1_PROFF(2)随后基于乘号是触点串联、加号是触点并联、等号左边是线圈、等号右边是触点、取非是常闭触点、不取非是常开触点进行编程:
Alt

图3.1 数据块给变量赋常数值

Alt

图3.2 符号表定义变量

Alt

图3.3 第1段程序

Alt

图3.4 第2段程序

Alt

图3.5 第3段程序

Alt

图3.6 第4段程序

Alt

图3.7 第5段程序

Alt

图3.8 第6段程序

Alt

图3.9 第7段程序

Alt

图3.10 第8段程序

Alt

图3.11 第9段程序

Alt

图3.12 第10段程序

Alt

图3.13 第11段程序

Alt

图3.14 第12段程序

四、测试流程

  程序编写后可以测试一下,针对上述的五个控制流程:
T E S T : x M G _ R U N ⟶ x P O W = 1 → 0 x M 1 _ O F F → x L _ O N → x M 2 _ O F F ⟶ x P O W = 1 → 0 x M G _ R U N → L O O P T E S T 2 : x M G _ R U N ⟶ x P O W = 1 → 0 x M 1 _ O F F ⟶ T 37 = 0 & & x P O W = 0 → 1 x M 1 _ P R O N → x M 1 _ R O N → x M G _ R U N → L O O P T E S T 3 : x M G _ R U N ⟶ x P O W = 1 → 0 x M 1 _ O F F ⟶ T 37 = 0 & & x P O W = 0 → 1 x M 1 _ P R O N → x M 1 _ R O N ⟶ T 37 = 0 & & x P O W = 1 → 0 x M 1 _ P R O F F → x M 1 _ O F F → L O O P T E S T 4 : x M G _ R U N ⟶ x P O W = 1 → 0 x M 1 _ O F F → x L _ O N ⟶ T 38 = 0 & & x P O W = 0 → 1 x M 1 _ P R O N → x M 1 _ R O N → x M G _ R U N → L O O P T E S T 5 : x M G _ R U N ⟶ x P O W = 1 → 0 x M 1 _ O F F → x L _ O N ⟶ T 38 = 0 & & x P O W = 0 → 1 x M 1 _ P R O N → x M 1 _ R O N ⟶ T 37 = 0 & & x P O W = 1 → 0 x M 1 _ P R O F F → x M 1 _ O F F → L O O P (3) \begin{align} TEST:xMG\_RUN &\stackrel{xPOW=1→0}{\longrightarrow} xM1\_OFF \to xL\_ON \to xM2\_OFF \stackrel{xPOW=1→0}{\longrightarrow} xMG\_RUN \to LOOP \\ TEST2:xMG\_RUN &\stackrel{xPOW=1→0}{\longrightarrow} xM1\_OFF \stackrel{T37=0\&\&xPOW=0→1}{\longrightarrow} xM1\_PRON \to xM1\_RON \to xMG\_RUN \to LOOP \\ TEST3: xMG\_RUN &\stackrel{xPOW=1→0}{\longrightarrow} xM1\_OFF \stackrel{T37=0\&\&xPOW=0→1}{\longrightarrow} xM1\_PRON \\ &\to xM1\_RON \stackrel{T37=0\&\&xPOW=1→0}{\longrightarrow} xM1\_PROFF \to xM1\_OFF \to LOOP \\ TEST4:xMG\_RUN &\stackrel{xPOW=1→0}{\longrightarrow} xM1\_OFF \to xL\_ON \stackrel{T38=0\&\&xPOW=0→1}{\longrightarrow} xM1\_PRON \\ &\to xM1\_RON \to xMG\_RUN \to LOOP \\ TEST5:xMG\_RUN &\stackrel{xPOW=1→0}{\longrightarrow} xM1\_OFF \to xL\_ON \stackrel{T38=0\&\&xPOW=0→1}{\longrightarrow} xM1\_PRON \\ &\to xM1\_RON \stackrel{T37=0\&\&xPOW=1→0}{\longrightarrow} xM1\_PROFF \to xM1\_OFF \to LOOP \end{align} \tag{3} TEST:xMG_RUNTEST2:xMG_RUNTEST3:xMG_RUNTEST4:xMG_RUNTEST5:xMG_RUNxPOW=10xM1_OFFxL_ONxM2_OFFxPOW=10xMG_RUNLOOPxPOW=10xM1_OFFT37=0&&xPOW=01xM1_PRONxM1_RONxMG_RUNLOOPxPOW=10xM1_OFFT37=0&&xPOW=01xM1_PRONxM1_RONT37=0&&xPOW=10xM1_PROFFxM1_OFFLOOPxPOW=10xM1_OFFxL_ONT38=0&&xPOW=01xM1_PRONxM1_RONxMG_RUNLOOPxPOW=10xM1_OFFxL_ONT38=0&&xPOW=01xM1_PRONxM1_RONT37=0&&xPOW=10xM1_PROFFxM1_OFFLOOP(3)
Alt

图3.15 重点提醒

注意,如图3.15的两部分第一部分是边沿触发,第二部分是电平触发,对应的是公式(1)中的第七个。如果将上述两个部分调换位置,则就编成所有变量都是边沿触发,就不是公式(1)中的第七个表达的含义了。博主在编程中一开始就是将第二部分放在了第一部分前面,导致测试的时候出现了不正确的流程:
x M G _ R U N ⟶ x P O W = 1 → 0 x M 1 _ O F F ⟶ T 37 = 0 & & x P O W = 0 → 1 x M 1 _ P R O N → x M 1 _ R O N → x M 1 _ P R O F F → x M 1 _ P R O N → S T O P (4) \begin{align} xMG\_RUN &\stackrel{xPOW=1→0}{\longrightarrow} xM1\_OFF \stackrel{T37=0\&\&xPOW=0→1}{\longrightarrow} xM1\_PRON \\ &\to xM1\_RON \to xM1\_PROFF \to xM1\_PRON \to STOP \end{align} \tag{4} xMG_RUNxPOW=10xM1_OFFT37=0&&xPOW=01xM1_PRONxM1_RONxM1_PROFFxM1_PRONSTOP(4)

五、一些思考

  这个案例也不算什么经典案例,但也确实是博主遇到的问题之一,在一开始只能想到正常的关机流程,完成编程以后开始思考如果关机信号是误动作,也就是有断开电源后的电源接通,该怎么办?
  我们关闭①号机用的是一键启停式,如果按钮的高电平还没结束又需要一个上升沿,来满足①号机关机后的启动,那就需要先让①号机按钮信号回到低电平,再触发一个高电平,这也就是①号机重开机准备状态的作用——让①号机按钮信号恢复低电平,类似的①号机重关机准备状态也是处于这样的思考进行设计的。
  当然也有其他的办法解决这个问题,博主这里限于自己的思考能力,只给出了上述的一种解决办法,有小伙伴有更好的思路欢迎交流。

总结

  本文针对机组的延时关机程序的设计思路进行了整理,包括从设计要求、顺序功能图设计、程序编写、程序测试、后续思考五部分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hvp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值