跳到正文
Learn-LAD
示例库/电磁阀与报警指示

电磁阀与报警指示

电磁阀、指示灯与报警的联动控制。

进阶 S7-1200 电磁阀 报警 指示灯

导入到我的 TIA 项目

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

TiaLink 设置

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

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

概述

按一次按钮:电磁阀和指示灯打开;再按一次:电磁阀关闭,同时报警输出。

程序用一串自锁标志实现"单按钮两步操作",是按次数切换状态的典型练习。

信号表

信号 类型 含义 作用
Pushbutton switch I 单按钮 每次按下推进一步
Solenoid Q 电磁阀 第 1 步打开
Pilot lamp Q 指示灯 与电磁阀同步
Alarm Q 报警 第 2 步打开
Tag_1 M 第 1 步标志 电磁阀/指示灯使能
Tag_2 M 已松开标志 等待第二次按下
Tag_3 M 第 2 步标志 关闭电磁阀、打开报警

工作流程

  1. 第 1 次按下 → Tag_1 置位并自锁,Solenoid/Pilot lamp=1;
  2. 松开 → Tag_2 置位;
  3. 第 2 次按下 → Tag_3 置位;
  4. Tag_3 复位 Tag_1(电磁阀/灯关闭),并驱动 Alarm=1;
  5. 之后 Tag_3 保持,继续按按钮不会改变状态。

MainOB

Network 1 — 第 1 步:打开电磁阀

Network 1:Pushbutton switch、Tag_1、Tag_3、Tag_1

条件 → 动作:按下 Pushbutton switch → Tag_1 置位并自锁;Tag_3=1 时复位。

逻辑:Tag_1 = (Pushbutton switch OR Tag_1) AND NOT Tag_3

Network 2 — 记录第一次松开

Network 2:Tag_1、Pushbutton switch、Tag_2、Tag_2

条件 → 动作:Tag_1=1 且按钮松开 → Tag_2 置位并保持。

为什么:用"已打开 + 已松开"区分第一次和第二次按下。

逻辑:Tag_2 = (Tag_1 AND NOT Pushbutton switch OR Tag_2)

Network 3 — 电磁阀与指示灯输出

Network 3:Tag_1、Solenoid、Pilot lamp

条件 → 动作:Tag_1=1 → Solenoid=1、Pilot lamp=1。

逻辑:Solenoid = Tag_1;Pilot lamp = Tag_1

Network 4 — 第 2 步:报警

Network 4:Tag_2、Pushbutton switch、Tag_3、Tag_3

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

为什么:Tag_3 同时承担"关阀"和"报警"两个动作。

逻辑:Tag_3 = (Tag_2 AND Pushbutton switch OR Tag_3)

Network 5 — 报警输出

Network 5:Tag_3、Alarm

条件 → 动作:Tag_3=1 → Alarm=1。

逻辑:Alarm = Tag_3

常见问题

  • 第二次按没反应:Tag_2 需要第一次松开后才置位;确认按钮确实松开过。
  • 报警一直响:Tag_3 没有复位条件;需要加复位按钮或在下次启动时清零。
  • 电磁阀和报警同时亮:检查 Tag_1 的复位条件 NOT Tag_3 是否接对。

变体与扩展

  • 加复位:增加复位按钮,同时清零 Tag_1/Tag_2/Tag_3。
  • 三态切换:继续追加自锁标志,实现"开-关-报警-复位"多态。
  • 改用计数器:用 CTU 记录按钮次数,用比较指令映射状态,扩展更清晰。

变量与数据块

变量表:Default tag table

名称数据类型地址注释
Pushbutton switchBool%I0.0
SolenoidBool%Q0.0
Pilot lampBool%Q0.1
AlarmBool%Q0.2
Tag_1Bool%M0.0
Tag_2Bool%M0.1
Tag_3Bool%M0.2

下一步