脉冲捕捉功能是工业自动化系统中处理高速数字信号的关键能力,尤其在电机编码器反馈、流量计脉冲输出、安全光幕响应、高速计数等场景中,常需捕获宽度远小于PLC扫描周期(典型值为1–10 ms)的窄脉冲——例如宽度仅几十微秒(μs)甚至几微秒的单次脉冲。若仅依赖常规输入映像区扫描,此类脉冲极大概率被完全遗漏,导致计数丢失、位置偏差、安全响应失效等严重后果。本文提供一套完整、可落地的窄脉冲捕捉实操方案,覆盖硬件选型、信号调理、配置逻辑、验证方法及典型故障排除,所有步骤均可通过文字描述精准执行,无需依赖特定品牌示意图。
一、理解问题本质:为什么普通输入无法捕获窄脉冲
PLC的常规数字输入(DI)工作在“周期性采样”模式下:CPU按固定扫描周期(如5 ms)读取输入模块的当前电平状态,并更新输入映像区。该过程可简化为以下时序模型:
设扫描周期为 $T_s$,脉冲宽度为 $t_w$,脉冲起始时刻相对于扫描起点的偏移为 $\tau$($0 \leq \tau < T_s$)。
脉冲能被可靠捕获的充要条件是:在至少一个扫描周期内,输入端口电平在整个采样窗口内保持有效电平(如高电平)。
由于采样通常在扫描周期初完成(单次快照),实际有效捕获窗口仅为一个无限窄的时间点。因此,可靠捕获概率 $P_{\text{miss}}$ 近似为:
$$ P_{\text{miss}} \approx 1 - \frac{t_w}{T_s} $$
当 $t_w = 20\ \mu s$,$T_s = 5\ \text{ms}$ 时,$P_{\text{miss}} \approx 99.6\%$。即平均每250次脉冲仅1次可能被偶然捕获。
结论:必须绕过周期性扫描机制,采用硬件级边沿触发+锁存方式,将脉冲事件转化为可被程序查询的“已发生”标志。
二、硬件层:选择具备真正脉冲捕捉能力的输入通道
并非所有标称“高速计数”或“脉冲输入”的端口都支持窄脉冲捕捉。关键识别三要素:
-
是否内置硬件锁存器(Latch)
锁存器在检测到指定边沿(上升沿/下降沿)时,立即保存该事件,并维持标志位直至软件清零。这是避免漏脉冲的物理基础。 -
是否支持最小脉冲宽度指标(Min Pulse Width)
查阅模块技术手册,在“Digital Input Specifications”章节查找明确标注的Min. pulse width参数。合格值应 ≤ 1 μs(高端模块可达100 ns)。警惕仅标注“最高计数频率”的模块——频率高不等于能捕获窄脉冲(例如 1 MHz 频率对应周期 1 μs,但要求脉冲宽度 ≥ 500 ns 才稳定)。 -
是否独立于主扫描周期运行
真正的捕捉通道使用独立时钟(通常为模块内部高频时钟,如 10–100 MHz),与CPU扫描完全解耦。
✅ 推荐硬件类型(以主流品牌为例):
- 西门子 S7-1200/1500 的
HF DI模块(如6ES7 223-1PL32-0XB0),其通道支持1 μs最小脉冲宽度,带硬件中断请求。 - 罗克韦尔 CompactLogix 的
1769-IF4或专用高速计数模块1769-HSC,标称0.5 μs最小宽度。 - 三菱 FX5U 的
FX5-485-BD通信板附带高速输入,或专用FX5-ENET模块的硬件中断引脚,支持0.1 μs边沿检测。
❌ 避免使用:
- 普通 DI 模块(如 S7-1200 标准
6ES7 223-1BH30-0XB0)的所有通道。 - 未明确标注
Min. pulse width或仅写High-speed而无具体数值的模块。
三、信号调理:确保脉冲满足硬件电气要求
再强的捕捉功能,也依赖干净、达标的输入信号。忽略此步是现场调试失败的最常见原因。
-
电平匹配
确认传感器输出电平与PLC输入通道额定电平一致。常见组合:- NPN 型接近开关 → PLC 漏型输入(24 V DC,源型接线)
- PNP 型光电开关 → PLC 源型输入(24 V DC,漏型接线)
若不匹配,必须加装电平转换器(如SITOP PSU8600隔离模块或分立光耦电路),禁止直接串联电阻“凑合”。
-
抗干扰强化
窄脉冲极易受电磁干扰(EMI)影响,产生误触发。执行以下操作:
敷设屏蔽双绞线,屏蔽层单端接地(接PLC侧接地端子,传感器端悬空);
缩短走线长度,高速信号线总长建议 ≤ 5 m;
在PLC输入端并联滤波电容:对地并联10 nF陶瓷电容(仅适用于非安全回路;安全应用须遵循 SIL 认证要求,禁用被动滤波)。 -
脉冲整形(必要时)
若原始脉冲存在振铃、缓慢上升沿(如机械触点抖动、长线反射),需整形:
选用施密特触发器芯片(如74HC14),其迟滞特性可消除抖动;
配置阈值:确保整形后脉冲上升/下降时间 ≤ 50 ns,且宽度收缩不超过原始宽度的10%。
四、配置实操:以西门子 S7-1200 为例的完整设置流程
以下步骤基于 TIA Portal V18 及固件 V4.5+,其他品牌逻辑高度相似,仅参数名称略有差异。
-
硬件组态中启用高速输入功能
在设备视图中,双击 DI 模块 → 切换至“Properties”选项卡 → 展开“General” → 勾选Enable high-speed counter function→ 在Input assignment表格中,为欲使用的通道(如I0.0)点击“…”按钮 → 弹出窗口中选择Edge detection→ 设置Detection type为Rising edge(或Falling edge,依信号逻辑定)→ 勾选Latch input signal→ 点击“OK”。 -
分配硬件中断组织块(OB)
右键项目树中的“Program blocks” → 插入新块 → 类型选Hardware interrupt OB→ 名称设为OB40(标准硬件中断OB编号)→ 点击“OK”。
此OB将在每次捕获到设定边沿时自动调用,无需主程序轮询。 -
在 OB40 中编写捕捉响应逻辑
打开OB40,插入以下指令(使用 LAD 或 SCL 均可,此处以 SCL 为例):
// 获取触发通道号(根据硬件配置,此处假设 I0.0 对应通道 0)
IF "HW_IO".DI[0].EdgeDetected THEN
// 脉冲已捕获,执行业务逻辑
"PulseCounter" := "PulseCounter" + 1; // 累加计数器
"LastPulseTime" := TONR(TIME#0MS); // 记录时间戳(需配合时钟存储器)
// 关键:立即清除锁存标志,准备下一次捕获
"HW_IO".DI[0].ResetLatch := TRUE;
END_IF;
- 关键参数确认(不可跳过)
在“Properties”→“Interrupts”中检查:Interrupt priority设为16(高于主循环OB1的默认优先级12);Execution mode设为Event-driven;Maximum number of events设为100(防中断堆积,根据预期最大脉冲密度调整)。
五、验证与测试:三步法确认捕捉可靠性
-
静态验证:用函数信号发生器注入标准脉冲
- 设置发生器输出方波:幅度 24 Vpp,占空比 1%,频率 1 kHz(即脉宽 10 μs);
- 将输出接入已配置通道;
- 在 TIA Portal 在线监控中,观察
HW_IO.DI[0].EdgeDetected位是否每个周期均置位1次(持续10秒以上无丢失); - 若丢失,检查接线、电平、屏蔽及模块供电纹波(用示波器测 PLC 24 V 输入端,纹波应 < 100 mVpp)。
-
动态验证:模拟真实工况抖动
- 改用发生器输出随机脉冲序列:脉宽在
1–50 μs间随机变化,间隔在1–100 ms间随机; - 运行1分钟,比对发生器理论脉冲数与
PulseCounter实际值,误差必须为0。
- 改用发生器输出随机脉冲序列:脉宽在
-
极限压力测试:满负荷连续捕捉
- 将发生器频率提升至模块标称最大频率(如 500 kHz),连续运行5分钟;
- 监控 CPU 负载率(应 < 70%),检查
OB40执行时间(TIA Portal “Diagnostics”→“Cycle time”中查看,应稳定 ≤ 50 μs); - 若出现
OB40堆积报警(诊断缓冲区提示“Interrupt queue overflow”),需降低中断优先级或优化 OB40 内部代码(删除非必要计算、避免调用复杂函数)。
六、典型故障与排除表
| 现象 | 可能原因 | 解决措施 |
|---|---|---|
EdgeDetected 位从不置位 |
1. 信号电平未达阈值<br>2. 边沿类型配置错误(上升沿 vs 下降沿)<br>3. 硬件中断未使能或优先级过低 | 1. 用万用表测输入端对地电压,确保有效电平时 ≥ 15 V DC<br>2. 在硬件组态中重新确认 Detection type<br>3. 检查 OB40 是否存在于项目中且未被禁用 |
| 计数偶尔丢失(非完全丢失) | 1. OB40 执行超时导致后续中断被丢弃<br>2. 外部干扰引起误复位 | 1. 精简 OB40 代码,移除所有 MOVE 大数组、CALL 复杂 FC 操作<br>2. 加强屏蔽与接地,更换为带共模扼流圈的信号线 |
| 捕捉到虚假脉冲(无输入时触发) | 1. 输入端悬空未上拉/下拉<br>2. 电源地与信号地未单点连接 | 1. 在传感器端或 PLC 输入端并联 4.7 kΩ 上拉(源型)或下拉(漏型)电阻<br>2. 使用短而粗的导线,将传感器外壳、屏蔽层、PLC PE 端子连接至同一接地排 |
七、进阶技巧:实现亚微秒级时间戳与脉宽测量
若需分析脉冲时序(如编码器 Z 相与 A 相时间差),可在 OB40 中嵌入时钟同步:
- 启用系统时钟存储器:在 CPU 属性 → “System memory” 中勾选
Enable system memory,地址设为MB0; - 在 OB40 首行读取微秒级时间戳:
"Timestamp_us" := "SYS_CLK".Microsecond; // 返回 0–999999 的微秒值 - 两次捕获间计算差值:
IF "PrevTimestamp" <> 0 THEN "PulseInterval_us" := ("Timestamp_us" - "PrevTimestamp" + 1000000) MOD 1000000; END_IF; "PrevTimestamp" := "Timestamp_us";此方法可分辨最小
1 μs间隔,精度由 CPU 内部时钟决定(S7-1200 为 1 μs)。
启用硬件锁存、配置专用中断、严控信号质量、三步验证闭环——四者缺一不可。任何环节妥协,都将导致窄脉冲捕捉从“功能可用”退化为“概率事件”。

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