跳到正文
Learn-SCL
SCL 示例库/SCL 指令手册/SCL F_TRIG — 下降沿检测

SCL F_TRIG — 下降沿检测

检测 1→0 的下降沿,Q 只在一个扫描周期为 1;需要实例。

边沿 S7-1200/1500 TIA V19 别名:Detect negative signal edge / 下降沿 / F_TRIG / Negative edge

在 TIA 里试一下

通过 TiaLink 把本页示例(FB_FTrig_Demo)作为“外部源”导入你当前打开的 TIA Portal 项目:预检、生成块、编译,并清理外部源。导入后不会自动保存;FB 导入后需要在 OB 里调用。

TiaLink 设置

默认 http://localhost:8080。也可以在本页地址后加 ?tialink= 临时指定。

TiaLink 启动时若设置了 --api-token,这里要填相同的值;只保存在本机浏览器 localStorage,不会上传。

一句话

答案:用 #Trig(CLK := #Signal) 调用 F_TRIG,读 #Trig.Q;Q 只在 CLK 从 1 变 0 的那个扫描周期为 1。

F_TRIG 检测信号的 1→0 下降沿:CLK 从 1 变 0 的那个扫描周期,Q 为 1;下一周期自动回 0。SCL 里用 #Trig(CLK := #Signal) 调用,再用 #Trig.Q 读结果。

参数

参数方向类型存储区说明
CLK输入BOOLI, Q, M, D, L, P被检测的信号。F_TRIG 比较本周期的 CLK 与实例里保存的上一周期值。
Q输出BOOLI, Q, M, D, L, P下降沿输出。CLK 从 1 变 0 的那个扫描周期为 1,下一周期自动回 0。

参数表以 TIA Portal V19 帮助为事实核对;S7-1200/1500 有差异时在类型列并列显示。存储区是 TIA 允许的范围,实际可用范围还受块接口和优化属性影响。

最小示例

下面是一个完整块,页面展示的源码就是 TiaLink 导入的同一份源码。页面的场景已在 PLC 云仿真里跑过,输出见“云仿真验证”。

FB_FTrig_Demo FB

最小示例 · 22 行 · 源文件 blocks/FB_FTrig_Demo.scl

查看 FB_FTrig_Demo 的块接口
区块名称类型说明
输入SignalBool
输出FallingBool
静态TrigF_TRIG
blocks/FB_FTrig_Demo.scl
1FUNCTION_BLOCK "FB_FTrig_Demo"
2{ S7_Optimized_Access := 'TRUE' }
3VERSION : 0.1
4   VAR_INPUT
5      Signal : Bool;        // 被检测的信号
6   END_VAR
7 
8   VAR_OUTPUT
9      Falling : Bool;       // 下降沿:只在一个扫描周期为 1
10   END_VAR
11 
12   VAR
13      Trig : F_TRIG;        // 边沿实例,保存上一周期的 CLK
14   END_VAR
15 
16BEGIN
17   REGION 检测下降沿
18      #Trig(CLK := #Signal);
19      #Falling := #Trig.Q;
20   END_REGION
21END_FUNCTION_BLOCK
22 

块接口表由源码自动生成;# 前缀表示块内局部变量,实际工程里也可以是全局标签或 DB 变量。

SCL 写法

SCL
1VAR
2   Trig : F_TRIG;
3END_VAR
4 
5#Trig(CLK := #Signal);
6#Falling := #Trig.Q;

也可以直接声明全局实例 DB,或用 Q => 把输出接到变量:

SCL
1"F_TRIG_DB"(CLK := "TagIn", Q => "TagOut");

怎么工作

本周期 CLK 上一周期 CLK Q
1 1 0
0 1 1(仅本周期)
0 0 0
1 0 0
  • 实例里保存上一周期的 CLK;每次调用先比较,再更新。
  • Q 是单周期脉冲,不能直接当持续使能。
  • 调用被跳过时上一周期状态不更新,下次调用可能把跨周期变化误判成边沿。
F_TRIG 时序图:信号从 1 变 0 时 Q 只在一个扫描周期为 1
F_TRIG 比较当前 CLK 和实例保存的上一周期值;Q 只在 1→0 的扫描周期为 1。

常用场景

1. 停止/复位事件

按钮松开、设备停止、传感器离开时产生一个单周期事件;用 F_TRIG 抓下降沿,避免在信号保持为 0 期间反复触发。

2. 计数下降沿

某些流量计或编码器用下降沿计数;把 F_TRIG 的 Q 接到 CTD 的 CD 或 CTU 的 CU。

3. 状态机离开条件

状态机里“离开某状态”只需要一次动作时,用 F_TRIG 把条件消失变成单周期事件。

常见坑

  • 用 NOT Signal AND Signal 做下降沿:同一个变量不可能同时为 1 和 0;必须和上一周期比较。
  • Q 只亮一个周期:不要拿 Q 直接驱动需要保持的输出;用置位/自锁/状态机。
  • 实例复用:多个信号共用一个 F_TRIG 实例会互相覆盖。
  • 跳过调用:把 F_TRIG 放在不执行的分支里,边沿可能丢失。
  • 首次扫描:实例初始上一周期值为 0;如果信号初始就是 0,第一次调用不会被当成下降沿(上一周期也是 0);如果初始为 1,则下一次变 0 才触发。
  • 和 R_TRIG 混用:需要同时检测两个沿时用两个独立实例,不要试图用一个实例兼顾。

和 LAD 的区别

LAD 里 F_TRIG 是带 CLK 和 Q 的盒;SCL 里必须显式调用实例并读 Q,更适合把边沿结果当布尔变量参与 IF/CASE。梯形图版本见 Learn-LAD 的 F_TRIG 页。

云仿真验证

PLC 云仿真:PASS(5 次扫描)。场景:下降沿只出现一个扫描周期。结果来自 PLC 云仿真 的 scl_run_scenario;页面构建时执行同一份 SCL 源码和场景。

查看云仿真回归输出
云仿真回归输出
PASS  下降沿只出现一个扫描周期 (5 step(s), 5 scan(s))
RESULT: ALL PASS (5 scan(s))

云仿真验证语法、结构和逐扫描行为,不等同于 TIA 编译;TIA 状态见下方“验证状态”。

验证状态

项目结果日期证据
构建期语法/结构校验PASS2026-11-02parse + validate
PLC 云仿真PASS(5 scans)2026-11-02scl_run_scenario / scl_validate
TIA 导入编译待实测—TiaLink + TIA Portal(待实测)

“待实测”表示还没有在 TIA Portal 里导入编译,不代表代码有问题;上机前请先在测试项目编译。云仿真在 tia.hubwiz.com/sim 执行,不替代 TIA 编译。

来源与说明

参数、行为和数据类型的核对来源:TIA Portal V19 帮助的 Instructions/Instructions/Basic_instructions/SCL/Bit_logic_operations/F_TRIG__Detect_negative_signal_edge.md。中文讲解、SCL 示例、时序图和验证场景由 Learn-SCL 编写。

边沿语义和实例要求以 TIA Portal V19 帮助为事实核对;中文讲解、SCL 示例和验证场景由 Learn-SCL 编写。

Siemens 文档与截图的版权归 Siemens;本站只引用事实参数,不复制官方描述段落和图片。官方参考:Siemens TIA Portal。

常见问题

F_TRIG 和 R_TRIG 有什么区别?

R_TRIG 检测 0→1 上升沿,F_TRIG 检测 1→0 下降沿;Q 都只在一个扫描周期为 1,都需要实例保存上一周期状态。

F_TRIG 的 Q 为什么只亮一下就没了?

这是设计行为:Q 只在一个扫描周期为 1。要驱动持续动作,用 Q 去置位一个 Bool 或进状态机保持。

多个信号能共用一个 F_TRIG 实例吗?

不能。实例里只保存一个上一周期值,多个信号共用会互相覆盖,边沿可能丢失或误判。

← 返回 SCL 指令手册