跳到正文
Learn-LAD
示例库/自动咖啡机

自动咖啡机

咖啡机的多步流程:加热、冲泡与出液,由定时器和逻辑条件串联各阶段。

进阶 S7-1200 流程控制 定时器 TP TON

导入到我的 TIA 项目

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

TiaLink 设置

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

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

概述

按一下启动按钮,咖啡机按固定时序完成一个制作循环:先出咖啡 5 秒,再抽水 10 秒、加奶 8 秒、搅拌 5 秒;所有动作结束后自动复位,等待下一次启动。

Network 1 是启动自锁,Network 2 用四组并行定时器链排出一条出料时序,并用一个"全部完成"的探测把流程收尾。它是"顺序控制 + 并行时间轴"的典型写法。

信号表

信号 类型 含义 作用
Start button I 启动按钮 启动一个制作循环
Tag_1 M 运行标志 自锁;所有动作的总使能
Tag_2 M 结束标志 3 秒脉冲,复位 Tag_1
Coffee dispenser Q 咖啡出口 5 秒
Water valve/pump Q 水阀/水泵 第 5 秒起 10 秒
Milk dispenser Q 奶出口 第 15 秒起 8 秒
Stirrer motor Q 搅拌电机 第 21 秒起 5 秒
定时器 TON/TP 8 个 负责各步延时与动作时长

工作流程

  1. 按 Start button → Tag_1 置位并自锁;
  2. 第 0~5 秒:Coffee dispenser 出咖啡;
  3. 第 5~15 秒:Water valve/pump 抽水;
  4. 第 1523 秒:Milk dispenser 加奶;第 2126 秒 Stirrer motor 搅拌(与加奶部分重叠);
  5. 所有输出都停止后,Tag_2 输出 3 秒脉冲 → 复位 Tag_1;若启动按钮仍按住则开始下一轮。

MainOB

Network 1 — 启动自锁与结束复位

Network 1:Start button、Tag_1、Tag_2、Tag_1

目的:记住"正在制作",并在流程结束后自动解锁。

条件 → 动作:按下 Start button → Tag_1 置位;Tag_1 自己的触点与按钮并联保持。只要 Tag_2=1(结束脉冲),Tag_1 立即复位。

为什么:这是标准的起保停自锁,Tag_2 的常闭触点串在回路里充当"自动停止"条件——流程完成后不需要人工按停止。

注意:Tag_2 是脉冲(保持 3 秒后自动消失),所以复位后如果启动按钮还按着,Tag_1 会再次置位、循环重新开始。

逻辑:Tag_1 = (Start button OR Tag_1) AND NOT Tag_2

Network 2 — 出料时序与收尾

Network 2:Tag_1、Coffee dispenser、Water valve/pump、Milk dispenser、Stirrer motor、Coffee dispenser、Water valve/pump、Milk dispenser

目的:在 Tag_1 有效期间按时序驱动四个执行机构,并在全部完成后产生结束脉冲。

条件 → 动作:四条链以 Tag_1 为共同条件,分别用 TON 延时后触发 TP:

  • Coffee dispenser:立即输出 5 秒;
  • Water valve/pump:5 秒后输出 10 秒;
  • Milk dispenser:15 秒后输出 8 秒;
  • Stirrer motor:21 秒后输出 5 秒。

当 Tag_1=1 且四个输出全部为 0 时,最后一个 TP 延时 3 秒 → Tag_2 脉冲,触发 Network 1 复位。

为什么:每条链都是"TON 定时 → TP 定长",参数一目了然;收尾用"所有输出都停止"作为完成条件,而不是死等一个总时长,这样即使个别动作时间调整,结束判断依然正确。

注意:TP 的脉冲时长固定,条件中途断开不会缩短它;要立即中断整个流程,需要复位 Tag_1(当前程序没有急停/取消输入)。

逻辑(节选): Coffee dispenser = TP(IN = Tag_1, PT = T#5s).Q

Water valve/pump = TP(IN = TON(IN = Tag_1, PT = T#5s).Q, PT = T#10s).Q

Tag_2 = TP(IN = Tag_1 AND NOT Coffee dispenser AND NOT Water valve/pump AND NOT Milk dispenser AND NOT Stirrer motor, PT = T#3s).Q

常见问题

  • 某一台设备不动:对照它的 TON 延时检查时间轴;每个动作都由"延时 + 脉冲"两段组成。
  • 流程结束后自动重复:Tag_2 复位 Tag_1 后,如果启动按钮仍被按住就会重新启动;松开按钮即可单次运行。
  • 想取消制作:当前没有取消输入;可以加一个停止按钮,把它的常闭触点串进 Network 1。

变体与扩展

  • 加急停/取消:在 Network 1 的自锁回路上串一个停止按钮。
  • 配方化:把各个 TON/TP 的 PT 换成配方变量,做不同饮品。
  • 加液位/温度联锁:把传感器条件串进对应输出,实现缺料保护。

变量与数据块

变量表:Default tag table

名称数据类型地址注释
Start buttonBool%I0.0
Coffee dispenserBool%Q0.0
Water valve/pumpBool%Q0.1
Milk dispenserBool%Q0.2
Stirrer motorBool%Q0.3
Tag_1Bool%M0.0
Tag_2Bool%M0.1
系统实例 DB(8 个)

TIA 自动生成的定时器/计数器实例 DB,导入示例时会一并导入。

IEC_Timer_0_DB 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool
IEC_Timer_0_DB_1 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool
IEC_Timer_0_DB_2 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool
IEC_Timer_0_DB_3 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool
IEC_Timer_0_DB_4 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool
IEC_Timer_0_DB_5 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool
IEC_Timer_0_DB_6 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool
IEC_Timer_0_DB_7 实例 DB(IEC_TIMER)
名称数据类型起始值注释
Static
PTTime
ETTime
INBool
QBool

下一步