PLC编程基础知识ENENO机制
通常在西门子PLC编程调试过程中,忽略了ENO的作用,其实使用使能输出ENO,可检测和处理某些运行系统错误。后续指令的执行取决于该使能输出的信号状态。使用ENENO机制可避免程序崩溃。块状态将以布尔型变量的形式进行传递。
ENENO机制可用于以下两个方面:用于单个指令(指令ENO)
用于程序块调用(块ENO)
LAD和FBD支持ENENO机制,可调用程序代码中的简单指令和高级指令。
使用ENENO机制时,可对以下指令调用进行影响,并使用指令RET:返回定制到程序块外的跳转。同时,还可为程序块的使能输出ENO赋值(0或1)。该特性通常用于LAD和FBD程序块。在SCL程序块中,也可使用该功能,无需再使用指令RET对SCL程序块的使能输出ENO进行影响。
在程序段边界处,该使能输出的信号状态将重复性地置位为1。例如,在LAD程序块中,可通过以下方式识别:即使上一个程序段中最后一个指令的使能输出ENO返回信号状态0,左侧母线也始终提供电流。
指令RET:返回(LADFBD)的功能
逻辑运算结果为0时,不执行该指令而执行下一个程序段。
逻辑运算结果为1时,将执行该指令并返回调用程序块。
ENO块的信号状态可通过以下四个选项确定:RLO:RLO1时,ENO块将置位为TRUE。TRUE:ENO块将置位为TRUE。FALSE:ENO块将置位为FALSE。Operand:由指定操作数的信号状态确定ENO块的信号状态。
编程与IO访问错误
ENENO机制无法编程和IO访问错误。为此,可通过OB进行全局错误处理或使用GETERROR、GETERRID指令进行本地错误处理或(仅S712001500)。如果指令成功执行无任何错误,则可评估相关的使能输出ENO。
LAD中的ENENO机制
对于LADFBD程序块,ENENO机制只能与各指令处所激活的使能输出ENO一起使用。
指令中的ENENO机制
通过使能输入EN,指令将根据具体条件执行。仅当使能输入EN的信号状态为1时,才执行该指令。
通过使能输出ENO,可查询指令中的运行时错误并进行相应响应:如果执行成功无任何错误,则使能输出ENO的信号状态为1。满足以下某一条件时,使能输出ENO的信号状态为0:使能输入EN的信号状态为0。执行过程中出错。
程序块调用与ENENO机制
通过使能输入EN和使能输出ENO,可调用所有的程序块。这适用于所有调用程序块,而无需考虑所使用的编程语言。即,调用STL或SCL程序块时即使没有默认或预组态的ENENO机制,LAD或FBD的程序块调用仍可使用ENENO机制。
根据具体情况,可使用使能输入EN调用程序块。仅当使能输入EN处的信号状态为1时,才执行该程序块。
通过使能输出ENO,可查询该程序块的错误状态:系统在执行该程序块时,使能输出ENO将返回信号状态1。如果未将被调用程序块中使能输出ENO的信号状态显式置位为0,则在发生错误时其信号状态将保持为1。使用指令RET:返回,可将ENO块的信号状态置位为0。在LAD和FBD中启用和禁用ENENO机制
在LAD和FBD中,某些指令具有使能输出ENO,因此使用ENENO机制。这样,可以查询指令中的运行时错误,并对错误做出反应。为了提高CPU的性能,可在默认设置中禁用ENENO机制。这意味着无法使用ENO值对指令中的运行时错误做出反应。但可在需要时,重新启用ENENO机制。
为了生成ENO,可以为每条指令分别启用ENENO机制。如果对一条指令启用了ENENO机制,则后续在程序中添加其它指令时也会启用ENENO机制。如果不希望指令启用ENO评估,则可以随时再次禁用ENENO机制。之后添加到程序中的其它指令则不会插入ENENO机制。
如果启用使能输出ENO,则运行时错误将不会导致CPU切换到STOP模式。
激活ENENO机制
按以下操作来激活指令的ENENO机制:在程序中,右键单击待激活ENENO机制的指令。在快捷菜单中,选择生成ENO(GenerateENO)命令。将再次生成指令的ENO值。如果激活使能输出,则随后将插入其它指令。
禁用ENENO机制
按以下操作来禁用指令的ENENO机制:在程序中,右键单击待禁用ENENO机制的指令。在快捷菜单中,选择不生成ENO(DonotgenerateENO)命令。将不再生成指令的ENO值。如果未激活使能输出,随后也将插入其它指令。影响LADFBD程序块的ENO块
说明
使用指令RET:返回,可跳出一个程序块,并影响ENO块的信号状态。
操作步骤
要影响ENO块的信号状态,请按以下步骤操作:启用某个指令(如,加指令ADD)的ENENO机制。对编程指令RET:返回进行取反,使能输出ENO处的信号状态将为FALSE。
结果
发生错误时(如,结果发生溢出),使能输出ENO处将首先返回信号状态0。取反后,信号状态0将变为信号状态1。即,RLO为1并执行RET指令,返回值FALSE。该程序块的ENO块因此为FALSE,并在上一个程序块调用完成后从该程序块返回到下一个指令处。该过程可在任何程序段(如,包含多个数学函数等)中编程。
但无需编程跳转,跳出该程序块。在一个程序段中,如果单个指令的使能输出ENO信号状态为0,则可确定不执行后续指令。因而,ENO块将不受影响。
说明
ENO块的影响
只能通过跳出该程序块,对ENO块的信号状态进行影响。
即使程序块中最后一个程序段内最后一个指令的使能输出ENO的信号状态为0,该ENO块也不受影响。
使用ENENO机制的指令示例
以下示例说明了使用ENENO电路和RET线圈(RetFalse)的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指令仍将正常运行。
通过ENENO机制调用程序块的示例
下图中举例说明了如何通过ENENO回路调用程序块:
如果操作数TagEnable的信号状态为1,则执行该程序块:使能输出ENO的信号状态取决于程序块中具体的程序代码。如果操作数TagEnable的信号状态为0,则不执行该程序块调用。使能输入EN和使能输出ENO的信号状态均为0。FBD中的ENENO机制
使用ENENO机制的指令示例
以下示例说明了使用ENENO电路和RET线圈(RetFalse)的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指令仍将正常运行。
通过ENENO机制调用程序块的示例
下图中举例说明了如何通过ENENO回路调用程序块:
如果操作数TagEnable的信号状态为1,则执行该程序块:使能输出ENO的信号状态取决于程序块中具体的程序代码。如果操作数TagEnable的信号状态为0,则不执行该程序块调用。使能输入EN和使能输出ENO的信号状态均为0。STL中的ENENO机制
指令中的ENENO机制
ENENO机制不适用于单个指令。该机制与语言特定的指令序列相对应,并使用状态字(BR位)。
程序块调用与ENENO机制
从STL程序块调用的程序块不提供EN和ENO参数。无论创建程序块时采用何种编程语言,都可通过状态字的BR位将错误语句传送到STL程序块中。
通过关联状态字的BR位和逻辑运算结果(RLO),即可对被调用程序块的错误状态进行评估。被调用的程序块开始执行时,RLO的信号状态即为1。如果在程序块执行后未将RLO显式地设置为0,则其信号状态将保持为1。要将错误语句传送回调用程序块,则需将的信号状态显式地复位为0。并通过指令SAVE:将RLO保存在BR位中和JNB:若RLO0则跳转,并保存RLO,对错误语句进行置位。
在STL中,可对BR位进行错误分析。在编程语言LAD、FBD和SCL中,可根据BR位生成使能输出ENO。
如果状态字中BR位的值为0,则表示在STL程序块调用过程中发生了错误(调用程序块是一个STL程序块)。
CPU中指令的执行
BR位
返回值
整数的符号
存在错误
0hr小于0
负数(符号位为1)
无错误
1hr大于或等于0
正数(符号位为0)
通过ENENO机制执行程序序列的示例
下文中举例说明了如何使用ENENO机制执行数值相加的程序段:
STL
说明
ATagEnable
查询操作数TagEnable的信号状态是否为1,并与当前的RLO进行AND运算。
JNBMyLABEL评估使能输入EN
如果RLO0,则跳转至跳转标签MyLABEL处,并将当前的RLO保存到BR位中。不执行以下操作。
如果RLO1,则执行以下操作。
LTagInput1
加载加法运算中的第一个值。
LTagInput2
加载加法运算的第二个值。
I
添加值
TTagResult
将合计值传送给操作数TagResult。
ANOV
查询是否发生溢出。
SAVE
将RLO的信号状态传送到BR位。
CLR
将RLO复位为0,并结束逻辑序列。
MyLABEL:ABR跳转标签MyLABEL
查询BR位。
TagOutput
将RLO的信号状态分配给操作数TagOutput。
查询操作数TagEnable将确定前导逻辑运算(RLO)的结果。指令JNB:若RLO0则跳转,并保存RLO将RLO的值保存在BR位中。另外,该指令还将对RLO的值进行评估,并根据其信号状态指向以下操作:如果RLO为0,则程序在跳转标签MyLABEL处以BR位的查询结果继续执行。而不执行加法运算。将操作数TagOutput的值分配给当前的RLO。如果RLO为1,则执行加法运算。通过对溢出位(OV)的查询,可判断加法运算过程中是否存在错误。查询结果将保存在BR中。指令CLR:将RLO复位为0将RLO复位为0,并结束逻辑序列。之后,系统将查询BR位并将其分配给操作数TagOutput。通过BR位的信号状态以及操作数TagOutput可判断加法运算是否成功执行没有任何错误。
通过ENENO机制调用程序块的示例
下图中举例说明了如何通过ENENO回路调用程序块:
STL
说明
ATagEnable
查询操作数TagEnable的信号状态是否为1,并与当前的RLO进行AND运算。
JNBMyLABEL评估使能输入EN
如果RLO0,则跳转至跳转标签MyLABEL处,并将当前的RLO保存到BR位中。不执行以下操作。
如果RLO1,则执行以下操作。
CALLBlockname,BlocknameDB
调用程序块。
MyLABEL:ABR跳转标签MyLABEL
查询BR位并在AND运算后与RLO进行运算。
TagOutput
将RLO的信号状态分配给操作数TagOutput。SCL中的ENENO机制
SCL中的ENENO机制概述
在SCL程序段中,可以通过赋值来改变ENO。为此,请写入ENO:TRUE或ENO:FALSE,或使用BOOL数据类型的变量。当激活自动置位ENO(SetENOautomatically)块属性时,编译器会添加程序代码来计算ENO,类似于编程语言LAD和FBD。添加的程序代码会增加运行时间,因此默认情况下禁用自动置位ENO(SetENOautomatically)属性。
更多信息,请参见:在SCL中启用和禁用自动置位ENO(SetENOautomatically)属性
在SCL程序段中,无法为FC的EN参数赋值。但是可以在条件语句中调用FC,这意味着需要将其置于IF指令中。这意味着块调用不会执行,也不会改变ENO。此行为与编程语言LAD和FBD中的行为不同
在SCL中启用和禁用自动置位ENO(SetENOautomatically)属性
说明
当自动置位ENO(SetENOautomatically)属性设置为TRUE时,被调用块的ENO值将被转发到调用块的ENO值。
在块属性中启用ENO机制
可按照以下步骤,启用块属性中的自动置位ENO(SetENOautomatically)属性。在项目浏览器中,打开程序块(Programblocks)文件夹。右键单击待显示属性的SCL块。在快捷菜单中,选择属性(Properties)命令。该块的属性对话框随即打开。在区域导航中,单击属性(Attributes)组。激活属性自动置位ENO(SetENOautomatically)。单击确定(OK)进行确认。
结果:仅针对所选块启用自动置位ENO(SetENOautomatically)属性。
针对所有新程序块,将自动置位ENO(SetENOautomatically)属性设置为TRUE
可按照以下步骤,启用程序属性中的自动置位ENO(SetENOautomatically)属性。在选项(Options)菜单中,选择设置(Settings)命令。在工作区中,设置(Settings)窗口随即显示。在区域导航中,选择PLC编程(PLCprogramming)组。选择SCL(结构化控制语言)(SCL(StructuredControlLanguage))组。激活属性自动置位ENO(SetENOautomatically)。
结果:针对所有新程序块,启用自动置位ENO(SetENOautomatically)属性。
SCL指令中使用使能输出ENO
说明
要运行诸如数学函数等每个SCL指令,都必须查询使能输出ENO。
操作步骤要查询使能输出ENO,请按以下步骤操作:激活ENENO机制。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机制。然后编程:IFn:0THENRETURNFALSE;ENDIF;
结果
当本地变量n为0时,系统会返回到调用块。在这种情况下,块的ENO值为FALSE。
但无需对RETURN进行编程。SCL编译器将当前ENO值转发到块的ENO值。这意味着,ENO的最后一个赋值将来自块的ENO。
ENO的设置示例
以下示例显示了一个SCL块,用于在执行除法运算前检查除数是否为0。此时,ENO的值将设置为FALSE,同时不执行后续的除法运算。调用块可评估被调用块的ENO并确定是否继续执行此程序。
IFDivisor0THEN
ENO:false;
RETURN;
ENDIF;
Quotient:DividendDivisor;
通过ENO评估程序块调用的示例
以下示例显示了程序块(A)的调用过程,还程序块用于处理被调用块(B)的ENO。
BlockNameDB(ENOENO);
IFENOfalseTHEN
RETURN;
ENDIF;
调用并处理程序块(A)。被调用的程序块(B)反映了其ENO在此过程中的值。被调用的块(B)的ENO值将复制到调用块(A)的ENO中。随后将此ENO用于IF指令中。
被调用块(B)返回信号状态ENOFALSE时,调用块(A)将不继续处理并返回信号状态ENOFALSE。GRAPH中的ENENO机制
指令中的ENENO机制
这些指令的使能输出ENO无法访问。即,用户无法影响GRAPH函数块中使能输出ENO的状态。但通过诸如数学函数或LADFBD指令进行转换后,可在程序状态中显示使能输出ENO。
程序块调用与ENENO机制
根据具体情况,可使用使能输入EN调用程序块。仅当使能输入EN处的信号状态为1时,才执行该程序块。
通过使能输出ENO,可查询该程序块的错误状态:被调用的程序块成功执行无错误时,使能输出ENO的信号状态为1。如果被调用的程序块在执行过程中出错,则使能输出ENO的信号状态为0。使能输出ENO不能显式置位或复位。使能输出ENO不受指令ENO的影响。
在GRAPH中激活和禁用ENENO机制
说明
在进行程序状态测试过程中,将显示使能输出ENO的状态。如果操作成功,则值为TRUE;操作失败,值为FALSE。
有关使能输出ENO的状态显示方式,可在GRAPH程序块的以下位置处设置:固定预处理指令顺序视图动作固定后处理指令
在块属性中启用ENENO机制,按以下步骤操作:在项目浏览器中,打开程序块(Programblocks)文件夹。右键单击待显示属性的GRAPH块。在快捷菜单中,选择属性(Properties)命令。该块的属性对话框随即打开。在区域导航中,单击属性(Attributes)组。激活属性自动置位ENO(SetENOautomatically)。单击确定(OK)进行确认。
结果:仅所选GRAPH块激活了ENENO机制。
GRAPH中的ENENO机制示例
带有使能输出ENO的程序状态示例
下文中举例说明了顺序视图内相应动作下使能输出ENO的程序状态:
如果在执行过程中发生错误,则使能输出ENO的信号状态为FALSE。
程序块调用示例
下图中举例说明了LAD程序块如何通过ENENO调用GRAPH程序块:
如果操作数TagEnable的信号状态为1,则执行该程序块:如果操作数TagEnable的信号状态为0,则不执行所调用的程序块调用。使能输入EN和使能输出ENO的信号状态均为0。如果操作数TagEnable的信号状态为1,则使能输入EN的信号状态为1,并执行所调用的程序块。使能输出ENO的信号状态取决于程序块内的程序内容。块中不同程序段语言的ENENO机制
说明
在块中,可使用不同网络语言的ENENO机制。各种编程语言显示的错误状态也往往有所不同:在SCL中,可使用ENO变量存储错误状态且可以查询。且只能使用SCL直接访问该变量。LADFBDSTL语言中不包含特定的ENO变量。但STL语言可通过BR位读取相应的错误状态,而LADFBD则可通过RET线圈进行查询。
以下规则适用于读取整个块中的错误状态:块中的最后一个程序段为LADFBD程序段:如果没有使用RET线圈,则系统默认的错误状态为TRUE。块中的最后一个程序段为STL程序段:由BR位确定错误状态。在STL程序段中,可在BR选项卡中编辑BR位。块中的最后一个程序段为SCL程序段:使用ENO变量确定块的错误状态。
ENO块的影响
对于包含多个程序段的LADFBD的程序块(可能包含不同的编程语言,如LAD、FBD、STL或SCL),ENO块的信号状态取决于最后执行的程序段。
如果程序块中最后执行的程序段为LAD或FBD程序段,则ENO块的信号状态不一定会受影响。如果指令中已激活ENENO机制,则仅当使能输出ENO的信号状态为0且程序块可使用指令RET:返回时,才会受到影响。如果该指令未包含任何编程代码,则ENO块的信号状态始终为1。指令ENO的信号状态为0时(如果有),不会影响ENO块。这是因为,程序段开始处的信号状态通常为1。
这同样适用于另一个程序段(LAD、FBD或SCL)之前的LAD或FBD程序段。仅当使用指令RET:返回时,ENO块的信号状态才会受到影响。否则,ENO块的信号状态在转换到该程序段时将复位为1。
混合程序块中的最后一个程序段为SCL程序段,则ENO块通常受此影响。
富艺斯委任沈清为中国区资深顾问,常驻上海南都记者获悉,富艺斯拍卖行于近日宣布委任沈清为中国区资深顾问,常驻上海。沈清将担任公司在中国内地的业务代表,并带领该区域的业务发展团队,拓展公司的客户群体以实现品牌扩张。富艺斯前中
中国漫画第一人丰子恺儿童漫画选8丰子恺是中国引进漫画概念的第一人,其漫画作品多以儿童为题材,富有童趣幽默睿智反映社会现象。头条创作挑战赛漫画新中国70年糖山楂东风稳唱歌归去郎骑竹马来沸水之声小爸爸我作漫画断断续续
中国十大国际机场,看看有没有你所在的城市,你又去过几个机场是供飞机起降的场地,在中国有很多的机场,而每个机场的规模大小,都各不相同,那么,中国的十大机场,你又知道几个北京首都国际机场北京首都国际机场,位于北京市朝阳区机场西路,是中国三
官方LeoVegas。News成为国米训练服新胸前广告赞助商直播吧2月5日讯国米官方宣布LeoVegas。News成为俱乐部训练服及赛前热身服胸前广告赞助商,双方签约至202425赛季。LeoVegas。News是一个著名的娱乐平台,他们提
专访张艺谋冬奥会冬残奥会开闭幕式的创意来源就是文化自信来源央视新闻客户端回忆起一年前的这场冰雪盛会,相信很多人都对开闭幕式印象深刻,中国文化和冰雪元素交相辉映,体现了自然之美人文之美运动之美,诠释了新时代中国可信可爱可敬的形象。我们也
创意的标杆幼儿园设计的空间导视系统随着教育连锁品牌的发展体系化规模化品牌化趋势今天我们从幼儿园教育品牌视觉角度欣赏下(指示牌导向系统设计)环境空间是如何设计别具一格的设计团队利用不同长短的圆管组合成各式各样的造型既
阴阳的开合枢伤寒论读书笔记三阳之开合枢太阳为开,在阳门里,太阳的作用是负责开。随着太阳主开功能的启动,阳门打开了,阳气得以逐渐升发释放出来。春夏万物逐渐发陈蕃秀,在人体,阳气方方面面的作用也得
实现表观法拉第效率200的阴阳极同时制氢辛辛那提大学孙宇杰团队NC利用铜银催化剂电催化甲醛氧化耦合水还原实现表观法拉第效率200的阴阳极同时制氢论文相关信息第一作者(或者共同第一作者)李国栋通讯作者(或者共同通讯作者)孙
南宁金大陆海鲜世界衡阳总店新年新气象阴阳菜单宰客没商量2023年2月4日,正直立春尹始万象更新,南宁市民韦某一家在预订的南宁市兴宁区虎邱西路9号A座6楼金大陆海鲜世界衡阳总店用餐,没想以南宁人为自豪的金大陆海鲜世界衡阳总店这个金牌老店
香奈儿2023春夏高定创意对话高级时装需要被保留下来,因为它的创造力和精湛技艺是时尚史上的关键所在。文CciliaPelloux1月24日,香奈儿(Chanel)在巴黎埃菲尔铁塔附近的巴黎大皇宫(GrandPa
杜兰特阴阳怪气奥尼尔最萌身高差最好的快船留给湖人凯尔特人死忠球迷,著名NBA评论员BillSimmons发推谈昨天的判罚不吹是对的,众所周知,手臂是球的一部分。众所周知,手臂也是身体的一部分,以后直接打架带个球就行了。詹姆斯转发