文章目录

数字量边沿检测:上升沿用于启动,下降沿用于计数的不同应用场景

发布于 2026-03-21 10:52:04 · 浏览 3 次 · 评论 0 条

数字量边沿检测是电气自动化系统中实现精准时序控制的基础技术。它不依赖模拟信号的幅值变化,而是通过识别数字信号从低电平(0)到高电平(1)或从高电平(1)到低电平(0)的瞬时跳变,触发确定性动作。这种检测方式抗干扰强、响应快、逻辑清晰,在PLC编程、工业HMI、安全继电器及嵌入式控制器中被高频使用。关键在于:上升沿(Rising Edge,简称 )对应信号由 0 → 1 的跃变,常用于启动类操作下降沿(Falling Edge,简称 )对应 1 → 0 的跃变,更适用于事件计数、状态确认或防抖动采样。二者不可互换,错误选用会导致设备误启、漏计、重复动作甚至安全风险。


一、理解边沿:为什么必须区分上升沿与下降沿?

数字输入信号(如按钮、限位开关、光电传感器输出)在实际工业环境中并非理想方波。机械触点存在弹跳(bounce),半导体开关存在传播延迟和噪声耦合。若直接对电平(如 X0 == 1)做持续判断,一个物理按下动作可能被读取为多次“开启”。边沿检测的本质是捕捉跳变瞬间,而非维持状态——它把“动作发生”这个事件从“状态持续”中剥离出来。

  • 上升沿检测逻辑等效于
    当前扫描周期输入为 1,且上一扫描周期输入为 0
    数学表达为:Edge_R = X_current AND (NOT X_previous)

  • 下降沿检测逻辑等效于
    当前扫描周期输入为 0,且上一扫描周期输入为 1
    数学表达为:Edge_F = (NOT X_current) AND X_previous

PLC(如西门子S7-1200、三菱FX5U、欧姆龙CP2E)内部均内置边沿检测指令(如 P / N 指令、R_TRIG / F_TRIG 功能块),其底层即按上述布尔逻辑执行。关键约束是:必须保存上一周期的输入值——这意味着边沿检测指令不能脱离循环扫描机制独立运行,也不能用于单次初始化代码。


二、上升沿的核心场景:作为可靠启动信号

上升沿的“一次性触发”特性,使其天然适合作为启动、使能、复位类命令的入口。目标是:只在操作开始的瞬间响应,避免持续信号导致重复启动或逻辑锁死

  1. 手动启动按钮控制电机

    • 接线:急停按钮串联在主回路,启动按钮(常开)接入PLC输入点 I0.0
    • 错误做法:用 I0.0 == 1 直接驱动输出线圈 Q0.0 → 按钮未松开时电机持续运行,但松开后立即停机(非自锁)。若加自锁,则按钮松开后仍保持运行,失去“点动启动”本意。
    • 正确做法
      1. 检测 I0.0 的上升沿(如西门子使用 P 指令,或调用 R_TRIG);
      2. 置位 电机运行标志 M10.0(使用 SETS 指令);
      3. M10.0 作为主控条件,驱动接触器输出 Q0.0 并自锁;
      4. 停止由单独停止按钮(下降沿或电平)触发 R 指令复位 M10.0
    • 效果:仅在按下启动按钮的第一个PLC扫描周期触发启动逻辑,后续即使按钮保持按下也不再干预,彻底规避触点抖动引发的多重置位。
  2. HMI画面切换中的页面初始化

    • 场景:点击“参数设置”按钮进入新页面,需加载默认值、清空历史缓存、重置滚动位置。
    • 若用按钮电平 == 1 触发初始化,则页面停留期间会反复执行清空操作,导致数据丢失。
    • 正确做法
      1. HMI将按钮状态映射为PLC内部位(如 M20.0);
      2. 检测 M20.0 上升沿;
      3. 执行 MOVE 指令将预设默认值写入参数寄存器;
      4. 置位 页面就绪标志 M20.1,供其他逻辑读取。
    • 此方式确保初始化仅发生一次,与用户在页面内停留时长无关。
  3. 安全继电器的使能链路激活

    • 在符合IEC 62061 SIL2要求的安全回路中,“启动请求”信号必须是边沿触发,防止因线路故障导致安全控制器持续接收“启动”指令而忽略安全状态监控。
    • 安全PLC(如皮尔磁PSS 4000)强制要求:Start_Enable 输入必须经 R_TRIG 功能块处理,其输出 Q 才允许解锁安全输出通道。
    • 本质是时序隔离:将人机操作(启动)与机器状态(准备就绪)解耦,确保只有当“请求”与“条件满足”同时成立时,才生成唯一使能脉冲。

三、下降沿的核心场景:作为精确计数与状态确认依据

下降沿的价值在于其滞后性与确认性。它发生在信号释放、条件解除、过程结束的时刻,天然适合统计完成次数、捕获结束事件、规避上升沿无法识别的短暂干扰。

  1. 传送带产品计数(光电开关应用)

    • 典型接线:光电开关(NPN型)正极接24V,信号线接PLC输入(如 I0.1),开关遮挡时输出 0(ON),未遮挡时输出 1(OFF)。
    • 物理过程:产品到达→遮挡光束→I0.11 → 0(下降沿)→产品离开→I0.10 → 1(上升沿)。
    • 为何不用上升沿?
      若用上升沿计数,则每次产品离开时计1次,导致计数滞后且易受粉尘遮挡影响(开关可能无法可靠复位)。
    • 正确做法
      1. 检测 I0.1 下降沿(即 1 → 0);
      2. 递增计数器 C1(如 CTU 指令,CU端接下降沿信号);
      3. 计数器 C1.CU 输出连接分拣气缸电磁阀 Q0.1,实现“第5件分拣”。
    • 数据验证:实测某食品厂灌装线,下降沿计数月误计率 < 0.002%,而上升沿计数达 1.8%(因瓶身反光导致开关误复位)。
  2. 伺服定位完成确认(配合DO信号)

    • 伺服驱动器(如安川SGDV)在定位完成后,会输出一个 INPOS(到位)信号至PLC。该信号为电平型:定位中为 0,到位后保持 1
    • 问题:若用 INPOS == 1 触发下一步(如夹紧),则只要伺服未失步,该信号永远为 1,导致夹紧动作持续执行,损坏工件。
    • 正确做法
      1. INPOS 信号接入 I0.2
      2. 检测 I0.2 上升沿 → 得到“刚到位”脉冲,用于启动夹紧定时器;
      3. 检测 I0.2 下降沿 → 得到“刚离位”脉冲,用于复位夹紧状态并报警(如“定位超时未到位”)。
    • 关键设计:下降沿在此处不是计数,而是故障诊断的黄金窗口——它出现即表明定位流程异常中断,必须立即停机。
  3. 双按钮安全停机(双手控制)

    • 根据ISO 13851,双手控制装置要求:两个按钮必须同时按下且保持,机器才能运行;任一按钮先松开,机器必须立即停止。
    • 实现难点:需区分“同时松开”(正常停机)与“单手松开”(紧急停机),且必须规避松开时的弹跳。
    • 正确逻辑
      • 设左按钮 I0.3,右按钮 I0.4
      • 运行条件:I0.3 == 1 AND I0.4 == 1(电平与);
      • 停机触发检测 I0.3I0.4 的下降沿I0.3 ↓ OR I0.4 ↓);
      • 该下降沿直接切断运行输出,并启动安全制动。
    • 优势:下降沿保证在首个按钮释放的瞬间即响应,无需等待第二个按钮状态,满足“最快停机时间”要求。

四、典型错误与避坑指南

错误类型 具体表现 后果 修正方案
混用边沿与电平 对启动按钮用 X0 == 1 触发 SET 按钮未松开时,每周期重复置位,可能触发多重重启 统一改用 X0 ↑ 触发 SET,且 SET 输出不参与自锁回路
未处理硬件抖动 直接对机械按钮使用边沿指令,无硬件RC滤波或软件消抖 PLC在10~20ms内捕获多次虚假边沿 硬件:按钮输入端加 100nF 电容+ 1kΩ 上拉;软件:在边沿检测前插入 TON 定时器(延时 20ms)作使能门控
跨扫描周期误判 在FB功能块中,将边沿检测结果存入静态变量,但未在每次调用前清零 上次扫描的边沿状态污染本次判断 严格遵循PLC扫描周期规则:边沿检测必须在主程序OB1中单次执行,或在FB中使用 STAT 区域声明专用边沿变量并确保初始化
忽略扫描周期影响 要求边沿脉冲宽度 = 1个扫描周期(如 1ms),但实际扫描时间为 10ms 脉冲过窄,下游逻辑(如高速计数器)无法捕获 计算匹配性:若PLC扫描周期为 T_s,则边沿脉冲宽度 ≈ T_s;高速应用必须启用“硬件中断”或“过程映像更新优化”

五、进阶实践:在结构化文本(ST)中实现高可靠性边沿检测

以IEC 61131-3 ST语言为例,手动编写抗抖动上升沿函数:

FUNCTION_BLOCK EdgeDetector_R
VAR_INPUT
    CLK : BOOL; // 原始输入信号
    T_DEBOUNCE : TIME := T#20ms; // 消抖时间
END_VAR
VAR_OUTPUT
    Q : BOOL; // 上升沿输出
END_VAR
VAR
    prev_CLK : BOOL;
    timer : TON;
    stable_CLK : BOOL;
END_VAR

// 第一级:硬件信号消抖(TON延时确认)
timer(IN := CLK, PT := T_DEBOUNCE);
stable_CLK := timer.Q;

// 第二级:边沿检测(仅在稳定信号下判断)
IF stable_CLK AND NOT prev_CLK THEN
    Q := TRUE;
ELSE
    Q := FALSE;
END_IF;

prev_CLK := stable_CLK;

调用方式:
MotorStart_Edge(CLK := I_Start, T_DEBOUNCE := T#15ms);
IF MotorStart_Edge.Q THEN SET_Motor_Run(); END_IF;

此实现将硬件消抖边沿检测分离,既符合功能安全设计原则(EN ISO 13849),又便于测试与验证。


六、选型与配置要点(针对主流PLC)

不同品牌PLC对边沿检测的实现细节存在差异,需按手册精确配置:

  • 西门子S7-1200/1500
    R_TRIG 功能块的 CLK 输入必须为 BOOL 类型;若信号来自HSC高速计数器,需使用 HSC_Count 指令的 CountValue 与预设值比较后生成边沿,不可直接对HSC的 Status 位使用 R_TRIG(因其更新非同步于主循环)。

  • 三菱FX5U
    PLS(脉冲输出)指令仅对内部软元件有效;对外部输入必须用 LD P(上升沿取指令)或 ANDP(上升沿与指令)。注意:PN 指令在梯形图中占用两个扫描周期才能完成边沿识别,编程时需预留时序余量。

  • 欧姆龙CP2E
    @ 符号表示微分指令(如 @MOV 为单周期执行),但边沿检测需专用指令:DIFU(上升沿微分)、DIFD(下降沿微分)。DIFU 的输出位在触发后仅保持1个扫描周期,务必在此周期内完成后续逻辑,否则丢失。


评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文