第四章 梯形图基础(二):置位/复位指令、边沿检测与定时器

各位同学,欢迎来到梯形图基础的第二讲。上一章我们聊了常开常闭触点、线圈这些基本元素,算是把梯形图的“单词”认全了。今天咱们要学的,是几个真正让程序“活”起来的指令——置位复位、边沿检测和定时器。

说实话,这三样东西,你如果玩明白了,那PLC编程就算入门一半了。我当年刚入行时,师傅丢给我一个项目,让我用起保停电路控制一个传送带。我折腾了半天,结果发现用置位复位指令两行就搞定了。嗯,从那天起我就知道,指令选对了,事半功倍。

本章核心知识点速览:

  • 置位(S)与复位(R)指令——让输出“锁住”状态
  • 边沿检测指令——捕捉信号的“一瞬间”
  • 定时器指令——让程序学会“等待”
梯形图基础(二) 置位/复位指令 边沿检测指令 定时器指令 S(置位) R(复位) 上升沿(P) 下降沿(N) TON(通电延时) TOF(断电延时) 核心思想:让程序具备“记忆”和“时间感知”能力 置位复位 → 保持状态 | 边沿检测 → 捕捉变化 | 定时器 → 延时控制

一、置位与复位指令——让输出“记住”状态

先问大家一个问题:如果你按一下按钮,灯亮了,手松开后灯还亮着,怎么实现?

用我们上一章学的知识,你可能想到自锁电路。没错,自锁能实现。但自锁有个缺点——程序写起来啰嗦,而且一旦逻辑复杂了,容易出问题。我个人习惯,在这种需要“保持状态”的场景下,直接用置位复位指令。

置位(Set,简称S):当条件满足时,把某个位强制设为1,并且一直保持,直到被复位。

复位(Reset,简称R):当条件满足时,把某个位强制设为0。

说白了,置位就是“开锁”,复位就是“关锁”。锁一旦开了,你不去关它,它就一直开着。

💡 我的经验:在西门子博途(TIA Portal)中,置位指令通常用S线圈表示,复位用R线圈。三菱PLC里则是SET和RST。不同品牌叫法不同,但本质一样。

来看一个最简单的例子:

// 梯形图表示(西门子风格)
// 网络1:当I0.0接通时,置位Q0.0
   I0.0        Q0.0
---| |--------( S )
   1

// 网络2:当I0.1接通时,复位Q0.0
   I0.1        Q0.0
---| |--------( R )
   1

这段程序什么意思?你按下启动按钮(I0.0),Q0.0就亮了,手松开也不灭。直到你按下停止按钮(I0.1),Q0.0才灭。

我在项目中遇到过一个问题:有同事用置位复位指令时,把S和R写在了同一个网络里。结果呢?如果两个条件同时满足,到底置位还是复位?不同PLC处理方式不一样,有的优先置位,有的优先复位。这就埋下了隐患。

⚠️ 避坑指南:我曾经在一个包装线项目里,就因为S和R同时触发,导致气缸动作混乱,差点撞坏模具。后来我定了个规矩:置位和复位永远写在不同的网络里,并且用互锁逻辑保证它们不会同时为真

二、边沿检测指令——捕捉信号的“一瞬间”

你想想看,一个按钮按下去,从0变成1,这个过程在PLC扫描周期里可能只持续几个毫秒。但如果你用普通的常开触点去检测,只要按钮按着,触点就一直通。有时候我们需要的不是“持续通”,而是“刚按下的那一瞬间”。

这就是边沿检测的用武之地。

上升沿(Positive Edge,简称P或R_TRIG):检测信号从0变1的那一瞬间,产生一个扫描周期的脉冲。

下降沿(Negative Edge,简称N或F_TRIG):检测信号从1变0的那一瞬间。

说白了,边沿检测就是“抓拍”。它不关心信号持续多久,只关心变化的那一下。

指令类型 触发条件 输出脉冲宽度 典型应用场景
上升沿(P) 信号从0→1 一个扫描周期 按钮按下触发、启动信号
下降沿(N) 信号从1→0 一个扫描周期 按钮松开触发、故障复位

来看个实际例子:

// 梯形图表示(西门子风格)
// 网络1:检测I0.0的上升沿,触发M0.0
   I0.0      M0.0
---|P|-------(   )
   1

// 网络2:M0.0只接通一个扫描周期,用于触发计数器
   M0.0      C1
---| |-------( CU )
   1

这段程序里,每次你按下按钮(I0.0从0变1),M0.0就亮一下,然后立刻灭掉。这个脉冲用来驱动计数器C1,每按一次,计数器加1。如果你用普通触点,按着不放,计数器会一直加,那就乱套了。

💡 我的习惯:在SCL语言里,边沿检测需要配合R_TRIGF_TRIG功能块使用。我个人更推荐在梯形图里用边沿检测,因为直观;在SCL里处理复杂逻辑时,再用功能块方式。

我记得有一次调试一个输送带项目,操作工反映“有时候按一下启动,设备会连续动作两次”。查了半天,发现是按钮触点抖动,一个上升沿被检测成了两个。后来加了硬件滤波和软件去抖,问题才解决。嗯,边沿检测虽好,但信号抖动是个大敌。

⚠️ 避坑指南:我曾经在一个项目中,用下降沿检测急停按钮的复位信号。结果急停按钮本身有机械抖动,复位时产生了多个下降沿,导致安全逻辑误动作。后来我在程序里加了延时确认,才彻底解决。记住:边沿检测对信号质量要求高,机械触点一定要做去抖处理

三、定时器指令——让程序学会“等待”

工业现场,很多动作不是瞬间完成的。电机启动需要时间、气缸伸出需要时间、加热需要时间……这时候,定时器就派上用场了。

PLC里的定时器,说白了就是一个“倒计时闹钟”。你给它设定一个时间,它开始计时,时间到了就给你一个信号。

最常用的两种定时器:

TON(通电延时定时器):输入端接通后,开始计时,时间到,输出接通。输入端断开,输出立即断开,计时器复位。

TOF(断电延时定时器):输入端接通时,输出立即接通。输入端断开后,开始计时,时间到,输出断开。

你想想看,TON就像你按下微波炉的启动键,它开始倒计时,时间到了“叮”一声。TOF呢,就像你关掉风扇,它不会立刻停,而是继续转一会儿才停。

定时器类型 输入接通时 输入断开时 典型应用
TON 开始计时,时间到输出ON 输出OFF,计时器复位 电机启动延时、故障报警延时
TOF 输出立即ON 开始计时,时间到输出OFF 风扇延时停止、冷却延时

来看一个TON的梯形图例子:

// 梯形图表示(西门子风格)
// 网络1:启动定时器
   I0.0        T1
---| |--------( TON )
   PT: 5000ms

// 网络2:定时时间到,输出Q0.0
   T1.Q        Q0.0
---| |--------(   )
   1

这段程序什么意思?你按下I0.0,T1开始计时,5秒后T1.Q接通,Q0.0亮。如果你在5秒内松开I0.0,T1复位,Q0.0永远不会亮。

我在项目中遇到过一个问题:有同事用TON做电机启动延时,结果电机启动后,他忘了把定时器复位。下次启动时,定时器还在上次的计时状态,导致逻辑混乱。其实TON在输入端断开时会自动复位,但如果你用TOF,就要注意了——TOF不会自动复位,需要手动处理。

💡 我的建议:初学者先用TON,逻辑简单,不容易出错。等你把TON玩熟了,再尝试TOF。另外,定时器的精度问题也要注意——普通定时器精度在10ms左右,如果需要高精度计时,要用IEC定时器或系统时钟。

⚠️ 避坑指南:我曾经在一个项目中,用TON做安全门的延时检测。安全门打开后,需要在5秒内关闭,否则报警。结果发现,如果操作工反复开关门,定时器会不断复位重启,永远到不了5秒。后来我改用TOF+上升沿检测的组合,才解决了这个问题。记住:选对定时器类型,比写对定时器参数更重要

四、混合编程小技巧——把指令串起来用

学完这三个指令,你可能会想:它们能组合起来用吗?当然可以。而且,真正的工业程序,就是这些指令的组合。

举个例子:一个传送带,按下启动按钮,电机延时3秒启动;按下停止按钮,电机立即停止,但风扇继续转5秒散热。

用我们刚学的指令,可以这样实现:

// 梯形图(西门子风格)
// 网络1:启动按钮上升沿,置位电机启动标志
   I0.0(启动)    M0.0
---|P|----------( S )
   1

// 网络2:停止按钮上升沿,复位电机启动标志,置位风扇延时标志
   I0.1(停止)    M0.0          M0.1
---|P|----------( R )---------( S )
   1             1

// 网络3:电机启动标志接通,启动电机延时定时器
   M0.0          T1
---| |----------( TON )
   PT: 3000ms

// 网络4:定时时间到,启动电机
   T1.Q          Q0.0(电机)
---| |----------(   )
   1

// 网络5:风扇延时标志接通,启动风扇延时定时器
   M0.1          T2
---| |----------( TOF )
   PT: 5000ms

// 网络6:风扇延时定时器输出,控制风扇
   T2.Q          Q0.1(风扇)
---| |----------(   )
   1

你看,置位复位用来保持状态,边沿检测用来捕捉按钮动作,定时器用来控制延时。三个指令一组合,一个完整的控制逻辑就出来了。

我个人习惯,在写这种混合逻辑时,先用纸笔画个时序图,把每个信号的变化时间点标清楚。画清楚了再写程序,基本不会出错。

总结一下今天的内容:

  • 置位复位指令让输出“记住”状态,适合需要保持的场景
  • 边沿检测指令捕捉信号的瞬间变化,适合触发类逻辑
  • 定时器指令让程序学会等待,适合延时控制
  • 三个指令组合使用,可以构建出复杂的工业控制逻辑

好了,今天就聊到这儿。这些指令看着简单,但真正用好,需要你在项目里多练、多踩坑。下次遇到需要“保持”、“捕捉”、“延时”的场景,你脑子里能立刻想到用哪个指令,那就算真正掌握了。


专注资料整理