PLC 基础课 第12讲 上升沿、下降沿、单次触发:为什么按一次按钮,程序会执行好几遍?

浏览量:4 次 发布时间:2026-04-14 20:38 作者:明扬工控商城 下载docx

最近更新:PLC 基础课 第11讲 数学运算与工程量换算:加减乘除、比例缩放、显示修正怎么做



前面第11讲,我们讲了数学运算与工程量换算。
那一讲解决的是一个“算”的问题:
现场原始值怎么变成工程值,参数怎么修正,数据怎么缩放,显示值和控制值怎么分开。

但 PLC 真正写到现场项目里,很多人很快就会遇到另一个特别常见、也特别让人头疼的问题:

明明按钮只按了一次,怎么程序执行了好几遍
明明想让计数器只加 1,结果一下加了十几次
明明只想跳一步,结果顺控一下跳过两步
明明只想保存一次参数,结果反复覆盖
明明只想记录一次报警,结果日志里刷了很多条
明明只想电机启动一次,结果相关逻辑连续触发

很多初学者碰到这种情况,第一反应往往是:

是不是按钮坏了
是不是 PLC 出问题了
是不是触点抖动了
是不是程序哪里短路了

其实很多时候,问题并不在硬件,而在你对 PLC 的一个非常关键的底层机制还没有真正建立起来。
这个机制就是:

PLC 是扫描执行的。

也就是说,只要某个条件一直成立,PLC 就会在每一个扫描周期里,反复看到它、反复执行它。
于是,本来你以为“按一次只执行一次”的事情,在 PLC 看来,可能已经执行了几十次、上百次。

所以这一讲,我们要真正讲透三个特别关键的概念:

上升沿
下降沿
单次触发

如果你把这一讲吃透,后面做计数、顺控、参数写入、报警记录、按钮功能、模式切换、脉冲命令、一次性动作时,程序会稳很多。
也能真正理解:

为什么 PLC 里有些逻辑要“持续有效”,有些逻辑却必须“只触发一次”。

前面第9讲讲的是数据放哪里,
第10讲讲的是怎么判断,
第11讲讲的是怎么换算,
这一讲讲的是:

条件成立以后,到底是持续执行,还是只执行一个扫描瞬间。

这一步非常关键。

一 先把最根上的问题讲清楚:PLC 不是“看到一次就算一次”

很多初学者脑子里对 PLC 的想象,容易是这样的:

按钮按下
PLC 知道了
执行一次
结束

这其实更像人脑的直觉,不像 PLC 的工作方式。

PLC 实际上是这样工作的:

先读输入
再执行程序
再刷新输出
然后马上进入下一轮
再读输入
再执行程序
再刷新输出
不停循环

这个循环速度通常很快。
快的时候,一个扫描周期可能只有几毫秒,甚至更短。

这意味着什么?

意味着当你用手按住一个按钮 0.2 秒,在人看来只是“按了一下”,
但在 PLC 看来,可能已经扫描了几十次。

如果你的程序写的是:

只要 X0 成立,就给 D100 加 1

那你手按一下按钮,PLC 在这 0.2 秒里可能执行了几十轮加 1。
最后 D100 当然不是加 1,而是加了一串数字。

所以你首先必须真正理解:

PLC 的世界里,条件不是“出现过没有”,而是“这一轮扫描时它还在不在”。

只要它还在,PLC 就会继续执行。

二 什么叫“电平触发”,什么叫“沿触发”

这是这一讲最重要的一组概念。

1 电平触发

所谓电平触发,就是:

只要条件成立,就一直执行。

比如:

X0 一直接通
那么对应逻辑就会在每个扫描周期都执行一次

这类逻辑适合什么?

适合持续状态控制。
例如:

按钮一直按着,点动电机一直动
液位低信号一直存在,补液允许一直成立
自动模式开关一直打在自动,自动模式标志一直成立
某条件满足时,运行指令持续有效

也就是说,电平触发适合“状态型逻辑”。

2 沿触发

所谓沿触发,就是:

不是看条件现在有没有一直成立,
而是看它有没有在某个瞬间,从一种状态跳到另一种状态。

最常见的有两种:

从 0 变成 1
这叫上升沿

从 1 变成 0
这叫下降沿

沿触发只关心“变化的那一瞬间”,
而不是后面持续保持的那段时间。

这类逻辑适合什么?

适合一次性命令。
例如:

按钮按下瞬间,计数加 1
启动命令来的瞬间,步骤切换
故障刚出现时,记录一次报警
工件经过检测点的一瞬间,只记一次
复位按钮按下的一瞬间,清一次数据
参数确认键按下的一瞬间,保存一次

也就是说,沿触发适合“事件型逻辑”。

这两个字你一定要记住:

状态
事件

PLC 编程里,很多混乱就是因为把状态逻辑和事件逻辑混了。

三 什么叫上升沿

上升沿,就是一个信号从 0 变成 1 的那一瞬间。

比如原来按钮没按,X0 = 0。
你按下去以后,X0 = 1。
从 0 变到 1 的这个瞬间,就是上升沿。

注意重点:

不是按钮整个按住期间都叫上升沿,
而是刚刚按下去、状态第一次跳变的那一下,才叫上升沿。

如果后面你一直按着,X0 还是 1,
那已经不是上升沿了,只是持续为 1。

上升沿最适合干什么

最常见的,就是“按一次只执行一次”的逻辑。

比如:

按钮按一下,计数器加 1
启动确认只触发一次
步骤号加 1
开始记录一条数据
参数写入一次
报警记录一次
保存一次批号
发一次启动脉冲给某些设备

因为你只想要“刚刚按下去那一瞬间”,而不想让 PLC 在你按住的几十个扫描周期里反复执行。

四 什么叫下降沿

下降沿,就是一个信号从 1 变成 0 的那一瞬间。

比如按钮原来按着,X0 = 1。
你松开以后,X0 = 0。
从 1 变到 0 的这个瞬间,就是下降沿。

下降沿没有上升沿那么常见,但在现场也很有用。

下降沿常见用法

按钮松开时执行一次动作
工件离开检测位时记一次
某夹具释放的瞬间切下一步
急停解除时做某种恢复
某持续信号结束时记录时长
某阀关闭完成信号消失时触发后续动作

你可以这样理解:

上升沿更像“开始”
下降沿更像“结束”

当然这不是绝对的,但很多应用场景确实有这种味道。

五 为什么按一次按钮,程序会执行好几遍

这一段一定要讲透,因为这是很多人真正学上升沿的起点。

假设你写了这样一个逻辑:

X0 按下时,D100 加 1

表面上看很合理。
但如果 X0 直接作为条件,不加上升沿处理,那么只要按钮按住,PLC 每扫一轮就加一次。

比如你的 PLC 扫描周期是 10 毫秒。
你按按钮 0.2 秒。
那 PLC 大概执行了 20 次扫描。
结果 D100 不是加 1,而是可能加了 20。

这就叫:

你以为自己在发一个命令,PLC 却把它当成了一个持续状态。

而“加 1”这类动作,本质上不是状态,应该是事件。
所以它更适合放在上升沿里。

也就是说,要改成:

X0 从 0 变 1 的那一刻,D100 加 1

这样不管你按多久,只会在最开始那一个扫描触发一次。

六 一个按钮,在 PLC 里到底有哪几种理解方式

这部分特别有助于建立工程思维。

假设 X0 是一个启动按钮。
同样是这个按钮,你可以有三种完全不同的用法。

第一种 把它当状态

只要 X0 一直按着,某动作就一直成立。

例如点动。

按住按钮,电机转
松开按钮,电机停

这时候就不需要上升沿。
因为你本来就希望它持续有效。

第二种 把它当一次命令

按钮按下那一瞬间,只执行一次。

例如:

按一下加 1
按一下切换步骤
按一下保存一次
按一下触发一次复位

这时候就应该考虑上升沿。

第三种 把它当结束信号

按钮松开时,执行一次。

例如:

松开按钮时确认本次输入
松开按钮时停止记录
松开按钮时触发另一步

这时候可以考虑下降沿。

所以不是按钮本身决定用什么方式,
而是你想让按钮承担什么角色。

七 什么叫单次触发

单次触发,可以简单理解成:

某个条件变化到来时,只让它生效一个扫描周期。

这通常就是通过上升沿或下降沿来实现的。

很多 PLC 品牌里,会有专门的上升沿、下降沿指令;
有些也可以自己用辅助位去做。
但不管写法怎么变,本质都一样:

原始信号可能会持续很多个扫描周期,
但单次触发只在变化瞬间给你一个很短的“脉冲”。

这个脉冲通常只保持一个扫描周期。
正因为只保持一轮,后面的逻辑就不会反复执行。

你可以把它理解成:

把一个“长按住的信号”,切成一个“只冒一下头的小脉冲”。

这就是单次触发的核心意义。

八 上升沿为什么特别适合计数

计数是最经典的应用场景。

假设输送线上有一个光电开关 X10,产品经过一次,光电挡一次。
如果你的程序写成:

只要 X10 有信号,计数器就加 1

那一个产品经过检测点时,光电可能挡住几十毫秒。
PLC 会在这几十毫秒里扫描很多轮。
结果一个产品可能被数成十几个。

这显然不对。

正确思路一般是:

当 X10 出现上升沿时,计数器加 1

也就是产品刚进入检测区、光电刚被挡住的那一瞬间,只记一次。

当然有时也会用下降沿,比如产品离开检测区再记一次。
具体要看工艺位置和传感器安装方式。
但核心思路都是一样的:

计数通常需要“变化一次记一次”,而不是“存在期间一直记”。

九 上升沿为什么特别适合步骤切换

顺控程序里,这个问题更常见。

比如一个自动设备分 4 个步骤:

步骤 1 等待工件
步骤 2 气缸伸出
步骤 3 夹紧
步骤 4 加工完成复位

假设在步骤 1 中,你写了这样一句逻辑:

只要启动按钮 X0 成立,就让步骤号加 1

如果没有做单次触发,会发生什么?

因为 X0 按住期间,PLC 会连续很多轮执行。
结果步骤号可能不是从 1 变成 2,
而是一下从 1 跳到 3、4,甚至更后面。

于是现场就会表现成:

按一下启动,顺控像“跳格子”一样乱跳。

这类问题非常典型。

所以顺控里很多“步骤号加 1”“从当前步跳到下一步”的动作,
都很适合放在上升沿触发里。

也就是说:

启动条件满足的那一瞬间,只跳一步。
而不是条件一直满足,就一直往后狂跳。

十 参数保存、配方切换、数据清零,为什么也特别适合单次触发

很多人刚开始学 PLC,只把沿触发理解成按钮计数。
其实在工程上,数据类操作也特别需要它。

比如触摸屏上有一个“参数保存”按钮。
操作员按一下,希望 PLC 把当前参数复制到一组配方寄存器里。

如果你直接写成:

只要保存按钮位成立,就执行数据传送

那只要按钮保持一会儿,PLC 就会在多个扫描周期里反复执行数据传送。
有时候看起来问题不大,但有时会引发:

重复覆盖
多次记录
状态异常
和其他写入逻辑冲突

更稳妥的方式通常是:

保存按钮的上升沿到来时,执行一次保存

同样的道理还包括:

清零按钮
复位按钮
配方调用按钮
确认按钮
手动执行一步按钮
历史记录存档按钮

这些本质上都属于:

一次命令型动作。

所以用单次触发会更稳。

十一 为什么报警记录通常要看“第一次出现”,而不是“故障一直存在”

这一点很工程。

假设某故障条件是:

压力小于下限

如果你程序写成:

只要低压故障存在,就写一条报警记录

那只要低压持续 5 秒,PLC 就会在这 5 秒里疯狂写记录。
最后报警列表里会刷出很多重复内容。

但现场真正想看到的,通常是:

故障刚出现时,记一条
故障恢复时,必要的话再记一条恢复记录

所以这里最合理的思路通常是:

低压故障上升沿出现时,记录“低压报警开始”
低压故障下降沿出现时,记录“低压报警恢复”

你看,这时候上升沿和下降沿就都派上用场了。

这也是为什么沿触发不仅仅是“按键处理”,
它本质上是事件捕捉工具。

十二 一个非常关键的底层理解:上升沿其实是在比较“这次扫描”和“上次扫描”

很多人学上升沿时,容易把它当成一个神奇功能。
其实它背后的逻辑并不神秘。

PLC 怎么知道“刚刚从 0 变成 1”了?
它一定要有比较。

说白了,就是:

上一次扫描,这个信号是 0
这一次扫描,这个信号是 1
那就说明出现了上升沿

同样地:

上一次扫描是 1
这一次扫描是 0
那就说明出现了下降沿

所以沿触发的本质,就是拿“当前状态”和“前一轮状态”做对比。

你以后理解了这一点,很多 PLC 指令就不再神秘。
不管品牌怎么写,本质都绕不开这个思路。

十三 为什么机械按钮和现场传感器还要考虑抖动

前面讲的是扫描逻辑。
但现场里还有另一个实际问题:
有些信号本身并不干净。

比如机械按钮,按下和松开的瞬间,触点可能会抖几下。
某些机械式行程开关、继电器触点、浮球开关,也可能有这种情况。
有些振动环境下的传感器信号,也可能边沿不干净。

这意味着什么?

意味着 PLC 可能会看到:

0
1
0
1
0
1

在很短时间内来回抖几次。
如果你直接用上升沿去计数,理论上可能把一次动作识别成好几次。

所以工程上常见的做法是:

先消抖
再取沿

或者:

上升沿后加一个短暂屏蔽时间
或者用定时确认

也就是说,沿触发虽然很好用,但不是说一用就万无一失。
现场信号质量也要考虑进去。

十四 一个按钮逻辑,什么时候不该用上升沿

这一点也要讲清楚,不然容易走到另一个极端。

很多人学完上升沿以后,觉得特别好用,就什么都想套上升沿。
这也不对。

如果你的逻辑本质上需要“持续成立”,那就不该硬改成单次触发。

比如:

点动按钮
长按排料
手动伸出按钮
手动回缩按钮
安全门关闭允许
自动模式选择开关
气压正常允许运行

这些更偏向状态逻辑。
只要条件存在,就应该持续有效。
如果你给它们硬加上升沿,反而会出问题。

例如点动本来是按住就动、松开就停。
你如果改成上升沿,只会在按下那一瞬间给一个脉冲,电机根本不会按你的期望持续运行。

所以一定要反复问自己:

这是状态,还是事件?

这是这一讲最核心的编程判断标准。

十五 一个完整的小例子:为什么“按钮加一”必须用上升沿

咱们把这个最基础的案例完整走一遍。

场景要求

按一下按钮,产品编号加 1
再按一下,再加 1
每按一次,只允许加一次

错误写法的后果

如果写成:

X0 成立时,D100 = D100 + 1

那只要按钮按住几十毫秒,PLC 就会连续加很多次。
现场表现就是:

按一下,编号跳很快
有时候一下多加几位

正确思路

用 X0 的上升沿去触发加法。
也就是:

只有 X0 从 0 变 1 的那一刻,D100 才加 1

这样不管按钮按住多久,都只在最开始那一个扫描加一次。

工程意义

这类逻辑不只是按钮编号。
凡是:

一次确认
一次翻页
一次切配方
一次确认保存
一次复位
一次清零
一次计数

都要想到这个模式。

十六 另一个典型例子:手动单步调试为什么必须注意单次触发

自动设备调试时,经常有一个功能叫“单步执行”。
也就是按一次“下一步”,设备只走一步,方便观察。

假设当前步骤号存在 D10。
你写了一个“下一步按钮”X1,想让它一按就 D10 加 1。

如果没用上升沿,
只要 X1 按住稍久一点,D10 就可能连续加好多次,直接从第 1 步跳到第 4 步、第 5 步。
调试根本没法做。

所以单步调试、本步确认、手动前进一步,这类逻辑几乎都天然适合上升沿。

因为你要的是:

按一下,走一步
不是:

按住期间,PLC 想走多少步就走多少步

十七 下降沿在什么场景下会更自然

前面我们说了,上升沿更像“开始”,下降沿更像“结束”。
咱们把这个思路再落到几个现场例子上。

1 按钮松开后才确认

有些场景里,操作员按住是在准备,松开才算最终确认。
比如点动调整结束后,松开按钮时记录当前位置。

2 工件离开检测位时计数

如果传感器安装位置决定“离开时再记数”更准确,那就可以取下降沿。

3 某状态结束后进入下一步

比如夹紧保持期间不允许切下一步,
只有夹紧信号消失,也就是解除结束时,才进入后续逻辑。
这时候下降沿就更合适。

4 报警恢复记录

前面提到过。
报警出现用上升沿记录一次,
报警解除用下降沿记录一次。

所以不要把下降沿理解成“没用的东西”。
它在“结束事件”里非常实用。

十八 一个很实用的工程思路:先把“持续状态”和“触发脉冲”分开

很多程序写乱,就是因为同一个信号既拿来表示状态,又拿来直接做一次性动作,没有分层。

更稳的做法是:

原始输入是一回事
持续状态是一回事
单次触发脉冲又是一回事

比如一个启动按钮 X0。

你可以这样理解:

X0 原始输入
M10 启动按钮状态有效
M11 启动按钮上升沿脉冲

然后:

需要持续作用的地方,用 M10
需要只执行一次的地方,用 M11

这样程序就清楚很多。

尤其项目一大以后,这种“状态层”和“事件层”分开,会很有帮助。

十九 为什么顺控里经常会把“条件成立”和“跳步动作”拆开

这是程序层次感的重要体现。

比如某一步的跳转条件是:

工件到位
并且气压正常
并且自动模式成立
并且没有报警

这是一组持续条件。
它们可能会持续成立一段时间。

但“进入下一步”这个动作本身,不应该持续执行,
它应该只在条件首次满足的时候跳一次。

所以更好的写法通常是:

先把“本步跳转条件成立”整理成一个状态位
然后再对这个状态位取上升沿
再用这个上升沿去执行“步骤号加 1”

这样有两个好处:

第一,程序逻辑更清楚
第二,不会因为条件持续成立而反复跳步

这就是从“堆逻辑”变成“设计逻辑”的差别。

二十 沿触发和计时、计数、数据传送经常一起用

这一点你以后会越来越有感觉。

1 和计数器一起用

上升沿来一次,计数加一次
最经典

2 和定时器一起用

某事件刚发生时,启动一次定时过程
比如上升沿到来后启动 T0

3 和数据传送一起用

按钮确认一次,把一组参数拷贝到另一组
通常也适合用单次触发

4 和置位复位一起用

故障刚来时置位
复位按钮上升沿到来时复位
这种写法也很多

所以你会发现,沿触发不是孤立存在的。
它经常是很多“动作指令”的前置条件。

二十一 一个完整小案例:输送线产品计数为什么要先取沿再加数

咱们把一个工程场景讲完整一点。

场景要求

输送线上产品经过光电传感器
每通过一个产品,总产量加 1
如果当前批次到达 20 个,就触发分料动作
每个产品只允许记一次

变量设定

X10 光电检测
D100 总产量
D101 当前批次产量
M10 光电上升沿脉冲

逻辑思路

第一步,X10 被产品挡住时,原始输入变为 1
第二步,只在 X10 上升沿那一刻,产生 M10
第三步,M10 到来时,D100 加 1,D101 加 1
第四步,当 D101 大于等于 20 时,触发分料
第五步,分料完成后,D101 清零,重新开始下一批

为什么这里必须取沿

因为产品经过传感器时,不是只占一个扫描周期,
而是会挡住一小段时间。

如果不用上升沿,PLC 就会在挡住期间连续加数。
结果一个产品被当成多个产品。

这就是沿触发在计数类项目里的典型价值。

二十二 初学者最容易踩的几个坑

这一段你后面做项目时会很有感觉。

1 该用单次触发的地方,直接拿电平去驱动

结果就是重复执行、多次加数、多次跳步、多次记录。

2 本来是持续状态逻辑,却硬套上升沿

结果就是动作只闪一下,不持续。
比如点动、电机手动按钮、夹具手动保持等,都容易出问题。

3 没考虑扫描周期,只按人的直觉写程序

人觉得“按一下就是一次”,PLC 不这么想。
PLC 只看每一轮扫描你还在不在。

4 忘了信号可能抖动

机械按钮、继电器、某些开关量信号,如果不做消抖,沿触发可能被误判多次。

5 步骤切换没拆成“条件成立”和“跳步一次”

结果顺控乱跳,特别常见。

6 报警记录没有区分“刚发生”和“持续存在”

结果日志一堆重复记录。

7 数据传送和参数保存没有做单次触发

结果多轮重复覆盖,后期排查很难受。

二十三 怎么判断一个逻辑到底该不该用上升沿

给你一个特别实用的判断方法。

你只要问自己一句话:

这个动作,是希望在条件成立期间一直有效,还是只希望它发生一次?

如果答案是“一直有效”,那通常更偏向电平逻辑。
如果答案是“只发生一次”,那通常就要考虑上升沿或下降沿。

再换一种问法:

这是状态,还是事件?

比如:

自动模式成立 —— 状态
电机运行允许 —— 状态
液位低信号 —— 状态
按钮点动 —— 状态

而这些更像事件:

按一下确认
来一个产品
跳一步
保存一次
记录一次
复位一次
清零一次

这个判断一旦建立起来,你以后写程序会稳很多。

二十四 本课小结

这一课你最少要真正吃透下面这些点。

第一,PLC 是按扫描周期循环执行程序的。
一个按钮在人看来是“按一下”,在 PLC 看来可能已经持续了很多轮扫描。

第二,电平触发表示只要条件成立,就持续执行;沿触发表示只在状态变化的瞬间执行。

第三,上升沿是从 0 变成 1 的那一瞬间,下降沿是从 1 变成 0 的那一瞬间。

第四,计数、跳步、参数保存、清零、复位、报警记录这类“一次命令型动作”,通常更适合用上升沿或下降沿,而不是直接用电平。

第五,点动、手动保持、模式选择、运行允许这类“持续状态型逻辑”,通常不该乱用上升沿。

第六,沿触发的本质,是比较当前扫描状态和上一轮扫描状态。

第七,现场信号可能存在抖动,所以有时要先消抖,再取沿,或者配合定时确认。

第八,真正写程序时,要反复区分:这是状态,还是事件。

二十五 学完这一课后,你应该能做到什么

学完这一课,你至少应该能做到这些事情:

知道为什么按钮按一次,程序可能会执行很多遍
知道为什么加 1、计数、跳步这些动作不能随便直接挂在电平条件后面
知道上升沿和下降沿分别适合什么场景
知道什么时候该让逻辑持续有效,什么时候只让它触发一次
知道为什么顺控程序里经常要用单次触发
知道报警记录为什么更适合捕捉“刚发生”和“刚恢复”的瞬间

如果这些你已经顺了,后面程序的稳定性会一下提高一个层次。

二十六 下节预告

下一课我们继续往下走,讲的是:

PLC 基础课 第13讲
置位、复位、翻转、保持:什么时候该用 SET/RST,什么时候不能乱用

这一课会把很多初学者“越写越乱”的根源讲清楚。
因为沿触发解决的是“动作触发一次还是持续触发”,
而置位、复位、保持解决的是:

一个状态成立以后,是不是要记住,什么时候解除,谁来解除。


明扬工控商城

推荐阅读:

PLC 基础课 第15讲 手动、自动、急停、复位:设备模式切换逻辑该怎么设计

PLC 基础课 第13讲 置位、复位、翻转、保持:什么时候该用 SET/RST,什么时候不能乱用

PLC 基础课 第12讲 上升沿、下降沿、单次触发:为什么按一次按钮,程序会执行好几遍?

PLC 基础课 第11讲 数学运算与工程量换算:加减乘除、比例缩放、显示修正怎么做

热门标签:
PLC 基础课 第12讲 上升沿、下降沿、单次触发:为什么按一次按钮,程....docx

将本文的Word文档下载到电脑

推荐度:

下载

全部评论

请登录
产业新闻-明扬资讯网
科技资讯-明扬资讯网