跳到正文
Learn-LAD
示例库/自动抽排控制

自动抽排控制

自动抽水与排水循环:按条件启动泵,并按时序在抽水与排水之间切换。

进阶 S7-1200 泵控制 定时器 循环

导入到我的 TIA 项目

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

TiaLink 设置

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

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

概述

按一次启动按钮,泵先抽水 20 秒,然后排水阀打开 10 秒;停止按钮随时可以中止。

程序由两个网络组成:Network 1 记住"已经启动"(起保停自锁),Network 2 用两个脉冲定时器把"抽水 → 排水"串成顺序动作。这是"自锁 + 脉冲定时器做顺序"的最小完整例子。

信号表

信号 类型 含义 作用
PB_start I 启动按钮 按一下启动流程
PB_stop I 停止按钮(常闭) 任何时候中止
Tag_1 M 运行标志 Network 1 自锁;Network 2 的总使能
Tag_2 M(Time) 抽水计时值 TP1 的 ET 输出(已抽水时间),地址 %MD0
Tag_3 M(Time) 排水计时值 TP2 的 ET 输出(已排水时间),地址 %MD4
Pump Q 抽水泵 抽水 20 秒
Drain valve Q 排水阀 排水 10 秒
IEC_Timer_0_DB TP 脉冲定时器 20 秒 抽水时长
IEC_Timer_0_DB_1 TP 脉冲定时器 10 秒 排水时长

工作流程

  1. 按 PB_start → Tag_1 置位并自锁;
  2. Tag_1=1 触发 20 秒脉冲定时器 → Pump 抽水 20 秒,已计时值写入 Tag_2;
  3. 20 秒脉冲结束,Pump 停;Pump 的常闭触点接通,触发 10 秒定时器 → Drain valve 排水 10 秒,已计时值写入 Tag_3;
  4. 排水结束,流程完成;按 PB_stop 可在任意时刻清零 Tag_1,两个输出立即断开。

MainOB

Network 1 — 起动、自锁与停止优先

Network 1:PB_start、Tag_1、PB_stop、Tag_1

目的:记住"已经启动"这个状态,并保证停止随时生效。

条件 → 动作:按下 PB_start,Tag_1 置位;松开后,Tag_1 自己的常开触点与 PB_start 并联把回路保持住,所以 Tag_1 一直是 1,直到 PB_stop 动作。

为什么:这就是典型的"起保停"自锁。PB_stop 用常闭触点串在回路里:按下它(或按钮接线断开)回路立即断开,属于停止优先、失效安全的接法。

注意:Tag_1 是内部标志,不直接驱动输出;真正的输出在 Network 2,由它当"总开关"。

逻辑:Tag_1 = (PB_start OR Tag_1) AND NOT PB_stop

Network 2 — 抽水 20 秒,再排水 10 秒

Network 2:Tag_1、PB_stop、Pump、Pump、PB_stop、Drain valve

目的:在 Tag_1 有效期间完成抽水和排水的定时输出。

条件 → 动作:

  • Pump = TP(20s, IN = Tag_1).Q AND NOT PB_stop:Tag_1 变 1 后泵立即启动,TP 输出保持 20 秒,所以泵抽水 20 秒后自动停;
  • Drain valve = TP(10s, IN = Tag_1 AND NOT Pump).Q AND NOT PB_stop:泵停后 Pump 的常闭触点接通,触发第二个 TP,排水阀打开 10 秒后自动关。

为什么:TP 是"脉冲定时器"——触发一次后输出固定保持 PT 那么久,不需要条件一直为 1(这一点和 TON 不同)。这里用 Pump 的常闭触点把"抽水结束"变成"排水开始"的触发条件,形成顺序链。两个定时器的 ET 分别写到 Tag_2/Tag_3,方便监控或做进度显示。

注意:TP 触发后,即使输入一直保持为 1 也不会重新开始;必须等脉冲结束、输入变 0 再变 1。所以流程跑完一轮后要重新按 PB_start(先停止再启动)才会再来一轮。

逻辑: Pump = IEC_Timer_0_DB.Q(IN = Tag_1, PT = T#20s) AND NOT PB_stop

Drain valve = IEC_Timer_0_DB_1.Q(IN = Tag_1 AND NOT Pump, PT = T#10s) AND NOT PB_stop

常见问题

  • 按了启动泵不动:先确认 PB_stop 的常闭触点是否处于接通状态(按钮按下或接线断开都会断开回路)。
  • 一轮结束后不自动重复:TP 需要新的触发沿;要循环请参考下面的扩展。
  • 想改时间:直接改两个 TP 的 PT,注意博途时间格式是 T#20s / T#10s。

变体与扩展

  • 循环抽排:在排水结束时自动把 Tag_1 复位再置位一次(例如用排水 TP 输出 Q 的下降沿触发),就能持续循环。
  • 进度显示:把 Tag_2/Tag_3 接到 HMI 上即可显示已抽水/已排水时间。
  • 多段顺序:按照同样的思路继续串联 TP,就能做"抽水 → 静置 → 排水 → …"的多步流程。

变量与数据块

变量表:Default tag table

名称数据类型地址注释
PB_startBool%I0.0
PB_stopBool%I0.1
PumpBool%Q0.0
Drain valveBool%Q0.1
Tag_1Bool%M0.0
Tag_2Time%MD0
Tag_3Time%MD4
系统实例 DB(2 个)

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

下一步