跳到正文
Learn-LAD
示例库/按钮翻转输出

按钮翻转输出

按一下开、再按一下关:用两个中间标志和自锁实现单按钮翻转。

入门 S7-1200 翻转 边沿检测 单按钮

导入到我的 TIA 项目

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

TiaLink 设置

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

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

概述

同一个按钮,按一下电机启动,再按一下停止——这就是"单按钮翻转(Toggle)"。

程序用两个中间标志 Tag_1/Tag_2 区分"当前是按下来启动"还是"按下来停止",再用自锁保持电机状态。它是按钮复用和状态判断的经典练习。

信号表

信号 类型 含义 作用
PB I 单按钮 按一下翻转一次
Motor Q 电机输出 翻转的目标状态
Tag_1 M 启动脉冲 电机停止时按下按钮产生
Tag_2 M 停止脉冲 电机运行时按下按钮产生

工作流程

  1. 电机停止(Motor=0)时按下 PB → Tag_1=1(Tag_2=0);
  2. Network 2 中 Tag_1 置位 Motor,松开按钮后由 Motor 自锁;
  3. 电机运行(Motor=1)时再按 PB → Tag_2=1(Tag_1=0);
  4. Tag_2 的常闭触点断开自锁回路,Motor 复位;松开按钮,等待下一次。

MainOB

Network 1 — 按状态分流

Network 1:PB、Motor、Tag_1、Motor、Tag_2

目的:根据电机当前状态,决定这次按钮是"启动"还是"停止"。

条件 → 动作:

  • PB=1 且 Motor=0 → Tag_1=1(启动脉冲);
  • PB=1 且 Motor=1 → Tag_2=1(停止脉冲)。

为什么:用 Motor 的常开/常闭触点把同一个按钮分成两路,互不干扰。Tag_1/Tag_2 只在按住按钮期间为 1,不需要自锁。

注意:Motor 既是输出线圈,又作为条件触点使用——这是允许的,读图时注意它在不同网络里的角色。

逻辑: Tag_1 = PB AND NOT Motor

Tag_2 = PB AND Motor

Network 2 — 翻转保持

Network 2:Tag_1、Motor、Tag_2、Motor

目的:用启动/停止脉冲控制电机的自锁与复位。

条件 → 动作:Tag_1=1 置位 Motor;Motor 自身触点保持;Tag_2=1 时常闭触点断开,Motor 复位。

为什么:(Tag_1 OR Motor) AND NOT Tag_2 是"启动优先、停止覆盖"的翻转结构;两个脉冲不会同时为 1(由 Network 1 的状态判断保证)。

注意:按住按钮不放时,Tag_2 会一直为 1,电机保持停止;要再次启动,必须先松开按钮。

逻辑:Motor = (Tag_1 OR Motor) AND NOT Tag_2

常见问题

  • 按了没反应:确认按钮是否真的产生了 0→1 的变化,以及 Motor 的当前状态是否与预期一致。
  • 一直无法启动:可能上次停止后按钮没松开,Tag_2 仍为 1;松开再按。
  • 想要"按一下就翻转"更稳的写法:用上升沿指令(PBox/R_TRIG)产生单次脉冲,再配合一个状态位取反。

变体与扩展

  • 边沿触发版:PBox 检测按钮上升沿,用一个 Tag 位做 XOR 翻转,减少对按钮按住时长的依赖。
  • 多档控制:用计数器记录按钮次数,实现"按一下开、两下关、三下自动"等多档逻辑。
  • 加停止/急停:在 Network 2 的自锁回路上串常闭停止触点,保证安全优先。

变量与数据块

变量表:Default tag table

名称数据类型地址注释
PBBool%I0.0
MotorBool%Q0.0
Tag_1Bool%M0.0
Tag_2Bool%M0.1

下一步