跳到正文
Learn-LAD
示例库/按钮控制电磁阀

按钮控制电磁阀

按任一开关打开电磁阀;全部松开后再次按任一开关关闭电磁阀。

入门 S7-1200 电磁阀 自锁 单按钮

导入到我的 TIA 项目

通过 TiaLink 把本示例的 2 个对象导入你当前打开的 TIA Portal 项目。导入前会先预检,默认不覆盖同名对象,导入后不会自动保存。

TiaLink 设置

默认 http://localhost:8080。也可以在本页地址后加 ?tialink= 临时指定。

TiaLink 启动时若设置了 --api-token,这里要填相同的值;只保存在本机浏览器 localStorage,不会上传。

概述

按任意一个开关,电磁阀打开;把两个开关都松开后,再按任意一个开关,电磁阀关闭。

程序用三个自锁标志实现"两个开关都能开、两个开关都能关"的单按钮切换逻辑,是双按钮/多按钮控制同一设备的练习。

信号表

信号 类型 含义 作用
Switch 1 / Switch 2 I 两个控制开关 任意一个都能开/关电磁阀
Solenoid Q 电磁阀 打开/关闭
Tag_1 M 打开标志 任一开关按下时置位
Tag_2 M 已全部松开 等待下一次按下
Tag_3 M 关闭标志 复位打开标志
PB I 点表中的按钮 程序未使用

工作流程

  1. 按下 Switch 1 或 Switch 2 → Tag_1 置位并自锁,Solenoid=1;
  2. 松开两个开关 → Tag_2 置位;
  3. 再次按下任意开关 → Tag_3 置位;
  4. Tag_3 复位 Tag_1 → Solenoid=0;Tag_3 保持,之后按开关不再动作。

MainOB

Network 1 — 打开标志

Network 1:Switch 1、Switch 2、Tag_1、Tag_1

条件 → 动作:Switch 1 或 Switch 2 按下 → Tag_1 置位并自锁。

为什么:两个开关并联,任意一个都能启动;Tag_1 保持电磁阀的打开状态。

逻辑:Tag_1 = (Switch 1 OR Switch 2 OR Tag_1)

Network 2 — 电磁阀输出与"已松开"标志

Network 2:Tag_1、Tag_3、Solenoid、Switch 1、Switch 2、Tag_2、Tag_2

条件 → 动作:Tag_1=1 且 Tag_3=0 → Solenoid=1;Tag_1=1 且两个开关都松开 → Tag_2 置位并保持。

为什么:Tag_2 用来确认"手已经离开开关",这样下一次按下才能被识别为"关闭"动作,而不是误判为持续按住。

逻辑: Solenoid = Tag_1 AND NOT Tag_3

Tag_2 = (Tag_1 AND NOT Switch 1 AND NOT Switch 2 OR Tag_1 AND Tag_2)

Network 3 — 关闭标志

Network 3:Tag_2、Switch 1、Switch 2、Tag_3、Tag_3

条件 → 动作:Tag_2=1 且再次按下 Switch 1 或 Switch 2 → Tag_3 置位并保持。

为什么:Tag_3 同时承担"关闭电磁阀"和"锁定下一次操作"的作用;没有它,松开开关后电磁阀可能又被打开。

逻辑:Tag_3 = (Tag_2 AND Switch 1 OR Tag_2 AND Switch 2 OR Tag_3)

常见问题

  • 第二次按没反应:需要先把两个开关都松开(Tag_2 置位)再按。
  • 电磁阀关不掉:检查 Tag_3 是否置位、Tag_2 是否在松开后建立。
  • 想重新开始:当前 Tag_3 没有复位条件;加复位按钮或在下次启动时清零。

变体与扩展

  • 加复位:用复位按钮清零 Tag_1/Tag_2/Tag_3,恢复初始状态。
  • 单个开关版:只保留一个开关,就是最简的单按钮翻转。
  • 加状态灯:用 Tag_1/Tag_3 驱动开/关指示灯。

变量与数据块

变量表:Default tag table

名称数据类型地址注释
Switch 1Bool%I0.0
Switch 2Bool%I0.1
SolenoidBool%Q0.0
PBBool%I0.2
Tag_1Bool%M0.0
Tag_2Bool%M0.1
Tag_3Bool%M0.2

下一步