通常在西门子PLC编程调试过程中,忽略了ENO的作用,其实使用使能输出 ENO,可检测和处理某些运行系统错误。后续指令的执行取决于该使能输出的信号状态。使用 EN/ENO 机制可避免程序崩溃。块状态将以布尔型变量的形式进行传递。
EN/ENO 机制可用于以下两个方面:
- 用于单个指令(指令 ENO)
- 用于程序块调用(块 ENO)
LAD 和 FBD 支持 EN/ENO 机制,可调用程序代码中的简单指令和高级指令。
使用 EN/ENO 机制时,可对以下指令调用进行影响,并使用指令“RET:返回”定制到程序块外的跳转。同时,还可为程序块的使能输出 ENO 赋值(0 或 1)。该特性通常用于 LAD 和 FBD 程序块。在 SCL 程序块中,也可使用该功能,无需再使用指令“RET”对 SCL 程序块的使能输出 ENO 进行影响。
在程序段边界处,该使能输出的信号状态将重复性地置位为“1”。例如,在 LAD 程序块中,可通过以下方式识别:即使上一个程序段中最后一个指令的使能输出 ENO 返回信号状态“0”,左侧母线也始终提供电流。
指令“RET:返回”(LAD/FBD) 的功能
逻辑运算结果为 0 时,不执行该指令而执行下一个程序段。
逻辑运算结果为 1 时,将执行该指令并返回调用程序块。
ENO 块的信号状态可通过以下四个选项确定:
- RLO:RLO = 1 时,ENO 块将置位为 TRUE。
- TRUE:ENO 块将置位为 TRUE。
- FALSE:ENO 块将置位为 FALSE。
- Operand:由指定操作数的信号状态确定 ENO 块的信号状态。
编程与 I/O 访问错误
EN/ENO 机制无法编程和 I/O 访问错误。为此,可通过 OB 进行全局错误处理或使用“GET_ERROR”、“GET_ERR_ID”指令进行本地错误处理或(仅 S7-1200/1500)。如果指令成功执行无任何错误,则可评估相关的使能输出 ENO。
LAD 中的 EN/ENO 机制 |
对于 LAD/FBD 程序块,EN/ENO 机制只能与各指令处所激活的使能输出 ENO 一起使用。
指令中的 EN/ENO 机制
通过使能输入 EN,指令将根据具体条件执行。仅当使能输入 EN 的信号状态为“1”时,才执行该指令。
通过使能输出 ENO,可查询指令中的运行时错误并进行相应响应:
- 如果执行成功无任何错误,则使能输出 ENO 的信号状态为“1”。
- 满足以下某一条件时,使能输出 ENO 的信号状态为“0”:
- 使能输入 EN 的信号状态为“0”。
- 执行过程中出错。
程序块调用与 EN/ENO 机制
通过使能输入 EN 和使能输出 ENO,可调用所有的程序块。这适用于所有调用程序块,而无需考虑所使用的编程语言。即,调用 STL 或 SCL 程序块时即使没有默认或预组态的 EN/ENO 机制,LAD 或 FBD 的程序块调用仍可使用 EN/ENO 机制。
根据具体情况,可使用使能输入 EN 调用程序块。仅当使能输入 EN 处的信号状态为“1”时,才执行该程序块。
通过使能输出 ENO,可查询该程序块的错误状态:
- 系统在执行该程序块时,使能输出 ENO 将返回信号状态“1”。
- 如果未将被调用程序块中使能输出 ENO 的信号状态显式置位为“0”,则在发生错误时其信号状态将保持为“1”。使用指令“RET:返回”,可将 ENO 块的信号状态置位为“0”。
在 LAD 和 FBD 中启用和禁用 EN/ENO 机制 |
在 LAD 和 FBD 中,某些指令具有使能输出 ENO,因此使用 EN/ENO 机制。这样,可以查询指令中的运行时错误,并对错误做出反应。为了提高 CPU 的性能,可在默认设置中禁用 EN/ENO 机制。这意味着无法使用 ENO 值对指令中的运行时错误做出反应。但可在需要时,重新启用 EN/ENO 机制。
为了生成 ENO,可以为每条指令分别启用 EN/ENO 机制。如果对一条指令启用了 EN/ENO 机制,则后续在程序中添加其它指令时也会启用 EN/ENO 机制。如果不希望指令启用 ENO 评估,则可以随时再次禁用 EN/ENO 机制。之后添加到程序中的其它指令则不会插入 EN/ENO 机制。
如果启用使能输出 ENO,则运行时错误将不会导致 CPU 切换到 STOP 模式。
激活 EN/ENO 机制
按以下操作来激活指令的 EN/ENO 机制:
- 在程序中,右键单击待激活 EN/ENO 机制的指令。
- 在快捷菜单中,选择“生成 ENO”(Generate ENO) 命令。
- 将再次生成指令的 ENO 值。如果激活使能输出,则随后将插入其它指令。
禁用 EN/ENO 机制
按以下操作来禁用指令的 EN/ENO 机制:
- 在程序中,右键单击待禁用 EN/ENO 机制的指令。
- 在快捷菜单中,选择“不生成 ENO”(Do not generate ENO) 命令。
- 将不再生成指令的 ENO 值。如果未激活使能输出,随后也将插入其它指令。
影响 LAD/FBD 程序块的 ENO 块 |
说明
使用指令“RET:返回”,可跳出一个程序块,并影响 ENO 块的信号状态。
操作步骤
要影响 ENO 块的信号状态,请按以下步骤操作:
- 启用某个指令(如,加指令“ADD”)的 EN/ENO 机制。
- 对编程指令“RET:返回”进行取反,使能输出 ENO 处的信号状态将为 FALSE。
结果
发生错误时(如,结果发生溢出),使能输出 ENO 处将首先返回信号状态“0”。取反后,信号状态“0”将变为信号状态“1”。即,RLO 为 1 并执行“RET”指令,返回值 FALSE。该程序块的 ENO 块因此为 FALSE,并在上一个程序块调用完成后从该程序块返回到下一个指令处。该过程可在任何程序段(如,包含多个数学函数等)中编程。
但无需编程跳转,跳出该程序块。在一个程序段中,如果单个指令的使能输出 ENO 信号状态为“0”,则可确定不执行后续指令。因而,ENO 块将不受影响。
说明
ENO 块的影响
只能通过跳出该程序块,对 ENO 块的信号状态进行影响。
即使程序块中最后一个程序段内最后一个指令的使能输出 ENO 的信号状态为“0”,该 ENO 块也不受影响。
使用 EN/ENO 机制的指令示例
以下示例说明了使用 EN/ENO 电路和 RET 线圈 (Ret False) 的“Add”指令:
位于常开触点“TagEnable”后方的使能输入 EN 包含有前导逻辑运算的结果:
- 如果操作数“TagEnable”的信号状态为“0”,则不执行“Add”指令。使能输出 ENO 的信号状态将置位为“0”,并退出所调用的程序。此时,调用程序块的使能输出 ENO 信号状态也为“0”。
- 如果操作数“TagEnable”的信号状态为“1”,则使能输入“EN”的信号状态为“1”,并执行指令“Add”。该指令将两个数据类型为 INT 的值进行相加。即使预期结果超出 INT 的值范围(16 位:-32768 到 +32767),该指令仍将返回结果,只是该结果不在 INT 的值范围内。具体原因在于,INT 的第 16 位为符号位。因此,该结果不会指示发生了溢出错误。这也这是需要额外添加 ENO:= NOT(OV) 指令的原因所在。如果在程序块执行过程中发生了错误,则使能输出 ENO 的信号状态将置位为“0”,并退出所调用的程序块。此时,调用程序块的使能输出 ENO 信号状态也为“0”。
- 如果操作数“TagEnable”的信号状态为“1”,则使能输入“EN”的信号状态为“1”,并执行指令“Add”。如果该指令成功执行且没有任何错误,则使能输出 ENO 的信号状态将为“1”并在输出“TagResult”中输出执行结果。
使能输出 ENO 的影响示例
在以下示例中,说明了启用和禁用 ENO 使能输出时各指令的应用方式:
如果使用 SUB 指令激活使能输出 ENO,则所有后续指令也将激活使能输出 ENO。如果在执行 SUB 指令时发生运算错误,ADD 指令将不执行。
在第二个分支中,DIV 指令将禁用 ENO 使能输出。即使在执行过程中发生运行时错误,MUL 指令仍将正常运行。
通过 EN/ENO 机制调用程序块的示例
下图中举例说明了如何通过 EN/ENO 回路调用程序块:
如果操作数“TagEnable”的信号状态为“1”,则执行该程序块:
- 使能输出 ENO 的信号状态取决于程序块中具体的程序代码。
- 如果操作数“TagEnable”的信号状态为“0”,则不执行该程序块调用。使能输入 EN 和使能输出 ENO 的信号状态均为“0”。
FBD 中的 EN-/ENO 机制 |
使用 EN/ENO 机制的指令示例
以下示例说明了使用 EN/ENO 电路和 RET 线圈 (Ret False) 的“Add”指令:
位于常开触点“TagEnable”后方的使能输入 EN 包含有前导逻辑运算的结果:
- 如果操作数“TagEnable”的信号状态为“0”,则不执行“Add”指令。使能输出 ENO 的信号状态将置位为“0”,并退出所调用的程序。此时,调用程序块的使能输出 ENO 信号状态也为“0”。
- 如果操作数“TagEnable”的信号状态为“1”,则使能输入“EN”的信号状态为“1”,并执行指令“Add”。该指令将两个数据类型为 INT 的值进行相加。即使预期结果超出 INT 的值范围(16 位:-32768 到 +32767),该指令仍将返回结果,只是该结果不在 INT 的值范围内。具体原因在于,INT 的第 16 位为符号位。因此,该结果不会指示发生了溢出错误。这也这是需要额外添加 ENO:= NOT(OV) 指令的原因所在。如果在程序块执行过程中发生了错误,则使能输出 ENO 的信号状态将置位为“0”,并退出所调用的程序块。此时,调用程序块的使能输出 ENO 信号状态也为“0”。
- 如果操作数“TagEnable”的信号状态为“1”,则使能输入“EN”的信号状态为“1”,并执行指令“Add”。如果该指令成功执行且没有任何错误,则使能输出 ENO 的信号状态将为“1”并在输出“TagResult”中输出执行结果。
使能输出 ENO 的影响示例
在以下示例中,说明了启用和禁用 ENO 使能输出时各指令的应用方式:
如果使用 SUB 指令激活使能输出 ENO,则所有后续指令也将激活使能输出 ENO。如果在执行 SUB 指令时发生运算错误,ADD 指令将不执行。
DIV 指令可禁用 ENO 使能输出。即使在执行过程中发生运行时错误,MUL 指令仍将正常运行。
通过 EN/ENO 机制调用程序块的示例
下图中举例说明了如何通过 EN/ENO 回路调用程序块:
如果操作数“TagEnable”的信号状态为“1”,则执行该程序块:
- 使能输出 ENO 的信号状态取决于程序块中具体的程序代码。
- 如果操作数“TagEnable”的信号状态为“0”,则不执行该程序块调用。使能输入 EN 和使能输出 ENO 的信号状态均为“0”。
STL 中的 EN/ENO 机制 |
指令中的 EN/ENO 机制
EN/ENO 机制不适用于单个指令。该机制与语言特定的指令序列相对应,并使用状态字(BR 位)。
程序块调用与 EN/ENO 机制
从 STL 程序块调用的程序块不提供 EN 和 ENO 参数。无论创建程序块时采用何种编程语言,都可通过状态字的 BR 位将错误语句传送到 STL 程序块中。
通过关联状态字的 BR 位 和逻辑运算结果 (RLO),即可对被调用程序块的错误状态进行评估。被调用的程序块开始执行时,RLO 的信号状态即为“1”。如果在程序块执行后未将 RLO 显式地设置为“0”,则其信号状态将保持为“1”。要将错误语句传送回调用程序块,则需将 的信号状态显式地复位为“0”。并通过指令“SAVE:将 RLO 保存在 BR 位中“和”JNB:若 RLO = 0 则跳转,并保存 RLO”,对错误语句进行置位。
在 STL 中,可对 BR 位进行错误分析。在编程语言 LAD、FBD 和 SCL 中,可根据 BR 位生成使能输出 ENO。
如果状态字中 BR 位的值为“0”,则表示在 STL 程序块调用过程中发生了错误(调用程序块是一个 STL 程序块)。
CPU 中指令的执行 | BR 位 | 返回值 | 整数的符号 |
存在错误 | 0 | 小于“0” | 负数(符号位为“1”) |
无错误 | 1 | 大于或等于“0” | 正数(符号位为“0”) |
通过 EN/ENO 机制执行程序序列的示例
下文中举例说明了如何使用 EN/ENO 机制执行数值相加的程序段:
STL | 说明 |
A "TagEnable" | // 查询操作数“TagEnable”的信号状态是否为“1”,并与当前的 RLO 进行 AND 运算。 |
JNB MyLABEL | // 评估使能输入 EN // 如果 RLO =“0”,则跳转至跳转标签“MyLABEL”处,并将当前的 RLO 保存到 BR 位中。不执行以下操作。 // 如果 RLO =“1”,则执行以下操作。 |
L "Tag_Input_1" | // 加载加法运算中的第一个值。 |
L "Tag_Input_2" | // 加载加法运算的第二个值。 |
+I | // 添加值 |
T "Tag_Result" | // 将合计值传送给操作数“Tag_Result”。 |
AN OV | // 查询是否发生溢出。 |
SAVE | // 将 RLO 的信号状态传送到 BR 位。 |
CLR | /// 将 RLO 复位为“0”,并结束逻辑序列。 |
MyLABEL:A BR | // 跳转标签“MyLABEL” // 查询 BR 位。 |
= "Tag_Output" | // 将 RLO 的信号状态分配给操作数“Tag_Output”。 |
查询操作数“TagEnable”将确定前导逻辑运算 (RLO) 的结果。指令“JNB:若 RLO = 0 则跳转,并保存 RLO”将 RLO 的值保存在 BR 位中。另外,该指令还将对 RLO 的值进行评估,并根据其信号状态指向以下操作:
- 如果 RLO 为“0”,则程序在跳转标签“MyLABEL”处以 BR 位的查询结果继续执行。而不执行加法运算。将操作数“Tag_Output”的值分配给当前的 RLO。
- 如果 RLO 为“1”,则执行加法运算。通过对溢出位 (OV) 的查询,可判断加法运算过程中是否存在错误。查询结果将保存在 BR 中。指令“CLR:将 RLO 复位为 0”将 RLO 复位为“0”,并结束逻辑序列。之后,系统将查询 BR 位并将其分配给操作数“Tag_Output”。通过 BR 位的信号状态以及操作数“Tag_Output”可判断加法运算是否成功执行没有任何错误。
通过 EN/ENO 机制调用程序块的示例
下图中举例说明了如何通过 EN/ENO 回路调用程序块:
STL | 说明 |
A "TagEnable" | // 查询操作数“TagEnable”的信号状态是否为“1”,并与当前的 RLO 进行 AND 运算。 |
JNB MyLABEL | // 评估使能输入 EN // 如果 RLO =“0”,则跳转至跳转标签“MyLABEL”处,并将当前的 RLO 保存到 BR 位中。不执行以下操作。 // 如果 RLO =“1”,则执行以下操作。 |
CALL "Block name", "Block name_DB" | // 调用程序块。 |
MyLABEL:A BR | // 跳转标签“MyLABEL” // 查询 BR 位并在 AND 运算后与 RLO 进行运算。 |
= "Tag_Output" | // 将 RLO 的信号状态分配给操作数“Tag_Output”。 |
SCL 中的 EN/ENO 机制 |
SCL 中的 EN/ENO 机制概述
在 SCL 程序段中,可以通过赋值来改变 ENO。为此,请写入“ENO:=TRUE”或“ENO:=FALSE”,或使用 BOOL 数据类型的变量。当激活“自动置位 ENO”(Set ENO automatically) 块属性时,编译器会添加程序代码来计算 ENO,类似于编程语言 LAD 和 FBD。添加的程序代码会增加运行时间,因此默认情况下禁用“自动置位 ENO”(Set ENO automatically) 属性。
更多信息,请参见:“在 SCL 中启用和禁用“自动置位 ENO”(Set ENO automatically) 属性”
在 SCL 程序段中,无法为 FC 的 EN 参数赋值。但是可以在条件语句中调用 FC,这意味着需要将其置于“IF”指令中。这意味着块调用不会执行,也不会改变 ENO。此行为与编程语言 LAD 和 FBD 中的行为不同
在 SCL 中启用和禁用“自动置位 ENO”(Set ENO automatically) 属性
说明
当“自动置位 ENO”(Set ENO automatically) 属性设置为“TRUE”时,被调用块的 ENO 值将被转发到调用块的 ENO 值。
在块属性中启用 ENO 机制
可按照以下步骤,启用块属性中的“自动置位 ENO”(Set ENO automatically) 属性。
- 在项目浏览器中,打开“程序块”(Program blocks) 文件夹。
- 右键单击待显示属性的 SCL 块。
- 在快捷菜单中,选择“属性”(Properties) 命令。
- 该块的属性对话框随即打开。
- 在区域导航中,单击“属性”(Attributes) 组。
- 激活属性“自动置位 ENO”(Set ENO automatically)。
- 单击“确定”(OK) 进行确认。
结果:仅针对所选块启用“自动置位 ENO”(Set ENO automatically) 属性。
针对所有新程序块,将“自动置位 ENO”(Set ENO automatically) 属性设置为“TRUE”
可按照以下步骤,启用程序属性中的“自动置位 ENO”(Set ENO automatically) 属性。
- 在“选项”(Options) 菜单中,选择“设置”(Settings) 命令。
- 在工作区中,“设置”(Settings) 窗口随即显示。
- 在区域导航中,选择“PLC 编程”(PLC programming) 组。
- 选择“SCL(结构化控制语言)”(SCL (Structured Control Language)) 组。
- 激活属性“自动置位 ENO”(Set ENO automatically)。
结果:针对所有新程序块,启用“自动置位 ENO”(Set ENO automatically) 属性。
SCL 指令中使用使能输出 ENO
说明
要运行诸如数学函数等每个 SCL 指令,都必须查询使能输出 ENO。
操作步骤要查询使能输出 ENO,请按以下步骤操作:
- 激活 EN/ENO 机制。
- SCL 指令执行后,查询使能输出 ENO(如,#MyOutputBool := ENO;)
- 如果发生错误(如,结果溢出),则使能输出 ENO 将返回信号状态“0”。基于该信号状态时,指令可继续执行。例如,编程指令“RETURN”、故障显示或替换值。
- 执行下一个指令之前,先将使能输出 ENO 的信号状态复位为“1”(如,ENO :=1;)。
- 发生下一处错误时,该信号状态因此可复位为“0”。否则,使能输出 ENO 的信号状态将保持为“0”。
说明
跳转到一个 SCL 块中时,使能输出 ENO 的信号状态将自动置位为“1”。
影响 SCL 块的“ENO”
说明
SCL 程序块中 ENO 的最后一个赋值即此块的 ENO。另外,也可退出此程序块,并同时使用“RETURN”指令为此块的 ENO 赋值“TRUE”或“FALSE”。
操作步骤
可按照以下步骤影响此块的 ENO 的信号状态:
- 激活 ENO 机制。
- 然后编程:
- IF #n := 0 THEN
- RETURN FALSE;
- END_IF;
结果
当本地变量“#n”为“0”时,系统会返回到调用块。在这种情况下,块的 ENO 值为“FALSE”。
但无需对 RETURN 进行编程。SCL 编译器将当前 ENO 值转发到块的 ENO 值。这意味着,ENO 的最后一个赋值将来自块的 ENO。
ENO 的设置示例
以下示例显示了一个 SCL 块,用于在执行除法运算前检查除数是否为 0。此时,ENO 的值将设置为“FALSE”,同时不执行后续的除法运算。调用块可评估被调用块的 ENO 并确定是否继续执行此程序。
IF #Divisor = 0 THEN
ENO:=false;
RETURN;
END_IF;
#Quotient:=Dividend/Divisor;
通过 ENO 评估程序块调用的示例
以下示例显示了程序块 (A) 的调用过程,还程序块用于处理被调用块 (B) 的 ENO。
"BlockName_DB"( ENO => ENO );
IF ENO = false THEN
RETURN;
END_IF;
调用并处理程序块 (A)。被调用的程序块 (B) 反映了其 ENO 在此过程中的值。被调用的块 (B) 的 ENO 值将复制到调用块 (A) 的 ENO 中。随后将此 ENO 用于“IF”指令中。
被调用块 (B) 返回信号状态“ENO=FALSE”时,调用块 (A) 将不继续处理并返回信号状态“ENO=FALSE”。
GRAPH 中的 EN/ENO 机制 |
指令中的 EN/ENO 机制
这些指令的使能输出 ENO 无法访问。即,用户无法影响 GRAPH 函数块中使能输出 ENO 的状态。但通过诸如数学函数或 LAD/FBD 指令进行转换后,可在程序状态中显示使能输出 ENO。
程序块调用与 EN/ENO 机制
根据具体情况,可使用使能输入 EN 调用程序块。仅当使能输入 EN 处的信号状态为“1”时,才执行该程序块。
通过使能输出 ENO,可查询该程序块的错误状态:
- 被调用的程序块成功执行无错误时,使能输出 ENO 的信号状态为“1”。
- 如果被调用的程序块在执行过程中出错,则使能输出 ENO 的信号状态为“0”。
- 使能输出 ENO 不能显式置位或复位。
- 使能输出 ENO 不受指令 ENO 的影响。
在 GRAPH 中激活和禁用 EN/ENO 机制
说明
在进行程序状态测试过程中,将显示使能输出 ENO 的状态。如果操作成功,则值为 TRUE;操作失败,值为 FALSE。
有关使能输出 ENO 的状态显示方式,可在 GRAPH 程序块的以下位置处设置:
- 固定预处理指令
- 顺序视图 > 动作
- 固定后处理指令?
在块属性中启用 EN/ENO 机制,按以下步骤操作:
- 在项目浏览器中,打开“程序块”(Program blocks) 文件夹。
- 右键单击待显示属性的 GRAPH 块。
- 在快捷菜单中,选择“属性”(Properties) 命令。
- 该块的属性对话框随即打开。
- 在区域导航中,单击“属性”(Attributes) 组。
- 激活属性“自动置位 ENO”(Set ENO automatically)。
- 单击“确定”(OK) 进行确认。
结果:仅所选 GRAPH 块激活了 EN/ENO 机制。
GRAPH 中的 EN/ENO 机制示例
带有使能输出 ENO 的程序状态示例
下文中举例说明了顺序视图内相应动作下使能输出 ENO 的程序状态:
如果在执行过程中发生错误,则使能输出 ENO 的信号状态为 FALSE。
程序块调用示例
下图中举例说明了 LAD 程序块如何通过 EN/ENO 调用 GRAPH 程序块:
如果操作数“TagEnable”的信号状态为“1”,则执行该程序块:
- 如果操作数“TagEnable”的信号状态为“0”,则不执行所调用的程序块调用。使能输入 EN 和使能输出 ENO 的信号状态均为“0”。
- 如果操作数“TagEnable”的信号状态为“1”,则使能输入“EN”的信号状态为“1”,并执行所调用的程序块。使能输出 ENO 的信号状态取决于程序块内的程序内容。
块中不同程序段语言的 EN/ENO 机制 |
说明
在块中,可使用不同网络语言的 EN/ENO 机制。各种编程语言显示的错误状态也往往有所不同:
- 在 SCL 中,可使用 ENO 变量存储错误状态且可以查询。且只能使用 SCL 直接访问该变量。
- LAD/FBD/STL 语言中不包含特定的 ENO 变量。但 STL 语言可通过 BR 位读取相应的错误状态,而 LAD/FBD 则可通过 RET 线圈进行查询。
以下规则适用于读取整个块中的错误状态:
- 块中的最后一个程序段为 LAD/FBD 程序段:
- 如果没有使用 RET 线圈,则系统默认的错误状态为 TRUE。
- 块中的最后一个程序段为 STL 程序段:
- 由 BR 位确定错误状态。在 STL 程序段中,可在 BR 选项卡中编辑 BR 位。
- 块中的最后一个程序段为 SCL 程序段:
- 使用 ENO 变量确定块的错误状态。
ENO 块的影响
对于包含多个程序段的 LAD/FBD 的程序块(可能包含不同的编程语言,如 LAD、FBD、STL 或 SCL),ENO 块的信号状态取决于最后执行的程序段。
如果程序块中最后执行的程序段为 LAD 或 FBD 程序段,则 ENO 块的信号状态不一定会受影响。如果指令中已激活 EN/ENO 机制,则仅当使能输出 ENO 的信号状态为“0”且程序块可使用指令“RET:返回”时,才会受到影响。如果该指令未包含任何编程代码,则 ENO 块的信号状态始终为“1”。指令 ENO 的信号状态为“0”时(如果有),不会影响 ENO 块。这是因为,程序段开始处的信号状态通常为“1”。
这同样适用于另一个程序段(LAD、FBD 或 SCL)之前的 LAD 或 FBD 程序段。仅当使用指令“RET:返回”时,ENO 块的信号状态才会受到影响。否则,ENO 块的信号状态在转换到该程序段时将复位为“1”。
混合程序块中的最后一个程序段为 SCL 程序段,则 ENO 块通常受此影响。