跳到正文
Learn-SCL
SCL 示例库/SCL 指南/SCL ENO 与错误处理:EN、RET_VAL、STATUS 怎么用

SCL ENO 与错误处理:EN、RET_VAL、STATUS 怎么用

SCL 指令的 EN/ENO、RET_VAL、STATUS 和 RETURN 怎么配合;什么时候用 ENO,什么时候必须自己判断错误。

错误处理

一句话:ENO 表示指令是否无错误执行;数学/转换/通信等指令可能返回 RET_VAL/STATUS。安全相关逻辑不要只看 ENO,要显式判断错误码并进入安全状态。

SCL 里的“错误处理”不是一个开关,而是三层:调用前检查、调用后判断返回值、失败时进入安全状态。ENO、RET_VAL、STATUS 只是其中几种信号,不能替代工艺判断。

EN / ENO 是什么

典型用法是“执行后检查”:

SCL
1#Ok := FALSE;
2IF #Enable THEN
3   // 调用可能失败的指令/块
4   // 具体 ENO 接法以该指令帮助为准
5   #Ok := TRUE;
6END_IF;

如果指令帮助里没有 ENO,就不要硬写;用返回值/状态或自己的条件判断。

RET_VAL / STATUS

通信、文件、系统指令常用 RET_VAL/STATUS 报告错误:

SCL
1#Ret := Some_Instruction(...);
2IF #Ret <> 0 THEN
3   #Error := TRUE;
4   #ErrorCode := #Ret;
5END_IF;

调用前检查

很多错误可以在调用前避免:

SCL
1IF #Divisor <> 0 THEN
2   #Result := #Dividend / #Divisor;
3   #Ok := TRUE;
4ELSE
5   #Result := 0.0;
6   #Ok := FALSE;
7END_IF;

RETURN 与错误分支

RETURN 可以提前退出当前块,适合 guard clause:

SCL
1IF #Error THEN
2   #Result := -1;
3   RETURN;
4END_IF;
5#Result := #NormalResult;

注意:RETURN 后面的代码不会执行,清理/输出复位要放在它之前。只想退出循环用 EXIT,跳过本次循环用 CONTINUE。

安全相关

常见坑

下一步

常见问题

ENO=0 就一定要停机吗?

不一定。ENO 只表示本条指令执行失败;要按工艺决定是报警、重试还是进入安全状态,不能一概而论。

RET_VAL 和 STATUS 有什么区别?

RET_VAL 通常是指令的返回值/错误码;STATUS 是块或指令的状态信息。不同指令含义不同,以 TIA 帮助为准。

下一步

浏览示例

把语法放回完整程序里看:边沿、定时器、状态机、缓冲站、阀门控制。

打开示例库 →

TiaLink

把示例导入你的 TIA Portal 工程,生成块、编译并读回核对。

了解 TiaLink →

PLC 云仿真

不装博途,用 MCP 逐扫描运行 SCL,做场景验收。

打开云仿真 →