前两天在为头条写的一个关于FC的ENO的使用容易产生误解的地方,很多朋友私信询问关于这方面的问题。

今天跟大家详细来聊聊这个问题:

首先,关于ENO的机制的问题大家可以参考“S7-300 和 S7-400 编程的梯形图(LAD)参考手册”,这个手册可以在西门子全球资源库下载。

那么他的机制是什么呢?

1、ENO = EN AND NOT (框错误) 什么意思呢?也就是说当EN 与 FC块没有错误,这样的话ENO=EN(也就是说EN为1则ENO为1)、

那么当FC块中有错误呢?

即使EN为1,ENO=EN(1)and NOT 1=0;

这就解释了我微头条中的那个小程序(如下图所示),因为超过了范围,所以,FC105有错误。

西门子step7编程(在西门子STEP7编程中关于FC的ENO使用的容易产生的误解)(1)

2、EN/ENO 机制用于:

• 数学运算指令、

• 传送和转换指令、

• 移位和循环移位指令、

• 块调用。

该机制不用于:

• 比较、

• 计数器、

• 定时器。

3、在框的实际指令周围,为 EN/ENO 机制生成附加的 STL 指令,这些指令依赖于现有的在此之前和之后的逻辑运算。 使用一个加法器实例,

a、. 连接了 EN 和 ENO 的加法器

1 A I 0.0 // EN 连接

2 JNB _001 // 将 RLO 移入 BR,并在 RLO = 0 时跳转

3 L in1 // 框参数

4 L in2 // 框参数

5 I // 实际加法

6 T out // 框参数

7 AN OV // 错误识别

8 SAVE // 将错误存入 BR

9 CLR // 首次检查

10 _001: A BR // 将 BR 移位到 RLO 中

11 = Q 4.0

在第 1 行后,RLO 包含在此之前的逻辑运算的结果。 JNB 指令将 RLO 复制到 BR 位,并设置第一个校验位。

• 当 RLO = 0 时,程序跳转到第 10 行,继续执行 A BR。 不执行加法指令。 在第 10 行,重新将 BR复制到 RLO 中,然后给输出赋值 0。

• 当 RLO = 1 时,程序不跳转,表示执行加法指令。 在第 7 行中,程序判断是否在执行加法指令期间发生了错误,然后在第 8 行存储到 BR 中。 第 9 行设置第一个校验位。 现在,在第 10 行中将BR 位复制回 RLO,因此,输出显示是否成功执行了加法指令。第 10 行和第 11 行不改变 BR 位,因此,也显示是否成功执行了加法指令。

,