前面第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讲 数学运算与工程量换算:加减乘除、比例缩放、显示修正怎么做