跳到正文
Learn-SCL
SCL 示例库/SCL 指令手册/SCL RETURN — 提前返回

SCL RETURN — 提前返回

提前退出当前 FC/FB;FC 可返回一个值。

控制流 S7-1200/1500 TIA V19 别名:RETURN 语句 / 提前返回 / FC 返回值

在 TIA 里试一下

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

TiaLink 设置

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

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

一句话

答案:RETURN; 立即退出当前 FC/FB/OB,回到调用块;RETURN 后面的语句不再执行,块末尾的 RETURN 可以省略。

RETURN; 立即退出当前 FC/FB/OB,回到调用块;RETURN 后面的语句不再执行。块末尾的 RETURN 可以省略。

最小示例

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

FB_Return_Demo FB

最小示例 · 27 行 · 源文件 blocks/FB_Return_Demo.scl

查看 FB_Return_Demo 的块接口
区块名称类型说明
输入ValueInt
输出ResultInt
输出DoneBool
blocks/FB_Return_Demo.scl
1FUNCTION_BLOCK "FB_Return_Demo"
2{ S7_Optimized_Access := 'TRUE' }
3VERSION : 0.1
4   VAR_INPUT
5      Value : Int;              // 输入值
6   END_VAR
7 
8   VAR_OUTPUT
9      Result : Int;             // 计算结果
10      Done : Bool;              // 是否正常完成
11   END_VAR
12 
13BEGIN
14   REGION 参数检查
15      #Done := FALSE;
16      IF #Value < 0 THEN
17         #Result := -1;         // 先写输出,再提前返回
18         RETURN;
19      END_IF;
20   END_REGION
21 
22   REGION 正常计算
23      #Result := #Value * 2;
24      #Done := TRUE;
25   END_REGION
26END_FUNCTION_BLOCK
27 

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

SCL 写法

SCL
1IF #Value < 0 THEN
2   #Result := -1;
3   RETURN;
4END_IF;

FC 带返回值时,先把返回值写到函数名对应的返回变量,再 RETURN;:

SCL
1#FC_Check := FALSE;
2IF #Error THEN
3   RETURN;
4END_IF;
5#FC_Check := TRUE;

怎么工作

位置 行为
在 IF 分支里 条件成立时退出整个块
在 FOR/WHILE/REPEAT 里 退出整个块,不只是退出循环
在块末尾 可以省略,执行到 END_FUNCTION_BLOCK 也会返回
在 FC 里 返回调用块;返回值取返回变量当前值
  • RETURN 是“提前退出”,不是“跳过本次循环”;跳过本次循环用 CONTINUE。
  • 退出循环但继续执行块内后面的代码,用 EXIT。
  • RETURN 之前的输出赋值会保留;RETURN 之后的赋值不会执行。
  • 在 OB 里 RETURN 会结束本次 OB 调用,后面的程序不执行;一般只在明确的保护逻辑里用。

常用场景

1. 参数检查/保护

输入非法、设备未就绪、安全条件不满足时,先写安全输出,再 RETURN,避免继续执行后面的动作。

2. 提前结束计算

找到了目标值、误差已满足、已经处理完,不需要继续循环/计算时提前返回;比多层 IF 嵌套更清晰。

3. FC 的错误返回

FC 先设默认返回值,检查失败时直接 RETURN;;调用方只读返回值,不需要额外的 Done 输出。

常见坑

  • RETURN 后还有必须执行的代码:清理、输出复位、计数器更新要放在 RETURN 之前。
  • 把 RETURN 当 EXIT:RETURN 退出整个块,不是只退出循环;只想退出循环用 EXIT。
  • FC 返回值未赋值:RETURN; 不会自动给返回值;先写 #FC_Name := ...。
  • 输出未初始化:提前返回时,后面的输出可能保持上一次的值;在块开头给安全默认值。
  • 在 OB 里随意 RETURN:会跳过 OB 后面的程序;确认这是你想要的行为。
  • RETURN 在循环里:会直接退出块,循环后面的代码也不会执行;需要区分 EXIT/CONTINUE/RETURN。

和 LAD 的区别

LAD 用跳转/标签或 RET 指令实现提前返回;SCL 的 RETURN 是文本语句,更适合 guard clause(先检查、失败就返回)。两者逻辑可以对应,但 SCL 更容易把保护条件写在块开头。LAD 侧可参考 程序控制指令。

云仿真验证

PLC 云仿真:PASS(3 次扫描)。场景:负数提前返回,正常值继续计算。结果来自 PLC 云仿真 的 scl_run_scenario;页面构建时执行同一份 SCL 源码和场景。

查看云仿真回归输出
云仿真回归输出
PASS  负数提前返回,正常值继续计算 (3 step(s), 3 scan(s))
RESULT: ALL PASS (3 scan(s))

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

验证状态

项目结果日期证据
构建期语法/结构校验PASS2026-11-02parse + validate
PLC 云仿真PASS(3 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/Program_control_operations/RETURN__Exit_block.md。中文讲解、SCL 示例、时序图和验证场景由 Learn-SCL 编写。

RETURN 退出当前块、继续调用块的规则以 TIA Portal V19 帮助为事实核对;中文讲解、SCL 示例和验证场景由 Learn-SCL 编写。

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

常见问题

RETURN 和 EXIT 有什么区别?

RETURN 退出整个块;EXIT 只退出当前循环,循环后面的代码还会继续执行。

FC 里 RETURN 怎么返回值?

FC 的返回值写在函数名对应的返回变量里(例如 `#FC_Name := ...`),再 `RETURN;` 退出;不要依赖未赋值的返回变量。

RETURN 后面的代码会执行吗?

不会。RETURN 立即结束当前块;需要执行的清理/输出赋值要放在 RETURN 之前。

← 返回 SCL 指令手册