簡(jiǎn)介
使用使能輸出 ENO,可檢測(cè)和處理某些運(yùn)行系統(tǒng)錯(cuò)誤。后續(xù)指令的執(zhí)行取決于該使能輸出的信號(hào)狀態(tài)。使用 EN/ENO 機(jī)制可避免程序崩潰。塊狀態(tài)將以布爾型變量的形式進(jìn)行傳遞。
EN/ENO 機(jī)制可用于以下兩個(gè)方面:
LAD 和 FBD 支持 EN/ENO 機(jī)制,可調(diào)用程序代碼中的簡(jiǎn)單指令和高級(jí)指令。
使用 EN/ENO 機(jī)制時(shí),可對(duì)以下指令調(diào)用進(jìn)行影響,并使用指令“RET:返回"定制到程序塊外的跳轉(zhuǎn)。同時(shí),還可為程序塊的使能輸出 ENO 賦值(0 或 1)。該特性通常用于 LAD 和 FBD 程序塊。在 SCL 程序塊中,也可使用該功能,無(wú)需再使用指令“RET"對(duì) SCL 程序塊的使能輸出 ENO 進(jìn)行影響。
在程序段邊界處,該使能輸出的信號(hào)狀態(tài)將重復(fù)性地置位為“1"。例如,在 LAD 程序塊中,可通過(guò)以下方式識(shí)別:即使上一個(gè)程序段中最后一個(gè)指令的使能輸出 ENO 返回信號(hào)狀態(tài)“0",左側(cè)母線也始終提供電流。
指令“RET:返回"(LAD/FBD) 的功能
邏輯運(yùn)算結(jié)果為 0 時(shí),不執(zhí)行該指令而執(zhí)行下一個(gè)程序段。
邏輯運(yùn)算結(jié)果為 1 時(shí),將執(zhí)行該指令并返回調(diào)用程序塊。
ENO 塊的信號(hào)狀態(tài)可通過(guò)以下四個(gè)選項(xiàng)確定:
RLO:RLO = 1 時(shí),ENO 塊將置位為 TRUE。
TRUE:ENO 塊將置位為 TRUE。
FALSE:ENO 塊將置位為 FALSE。
Operand:由操作數(shù)的信號(hào)狀態(tài)確定 ENO 塊的信號(hào)狀態(tài)。
編程與 I/O 訪問(wèn)錯(cuò)誤
EN/ENO 機(jī)制無(wú)法編程和 I/O 訪問(wèn)錯(cuò)誤。為此,可通過(guò) OB 進(jìn)行全局錯(cuò)誤處理或使用“GET_ERROR"、“GET_ERR_ID"指令進(jìn)行本地錯(cuò)誤處理或(僅 S7-1200/1500)。如果指令成功執(zhí)行無(wú)任何錯(cuò)誤,則可評(píng)估相關(guān)的使能輸出 ENO。
所有編程語(yǔ)言中的程序塊調(diào)用 (S7-300/400)
以下示例適用于 S7-300/400 系列 CPU:如果調(diào)用的程序塊中不含任何指令,則 BR 位和 ENO 使能輸出均不受影響。BR 位的信號(hào)狀態(tài)將保持為一個(gè)常量結(jié)果。此時(shí),所有語(yǔ)句都無(wú)法成功調(diào)用該程序塊。
說(shuō)明
SCL 程序塊中的最后一個(gè)指令 ENO 通常會(huì)影響 ENO 塊。
另外,也可跳出該程序塊,并同時(shí)使用指令“RETURN"為 ENO 塊賦值“1"或“0"。
操作步驟
要影響 ENO 塊的信號(hào)狀態(tài),請(qǐng)按以下步驟操作:
激活 EN/ENO 機(jī)制。
然后編程:
IF ENO := 0 THEN
RETURN;
END_IF;
結(jié)果
發(fā)生錯(cuò)誤時(shí)(如,結(jié)果發(fā)生溢出),使能輸出 ENO 將先返回信號(hào)狀態(tài)“0",如一個(gè)加指令。該 ENO 塊因此為 FALSE,并在上一個(gè)程序塊調(diào)用完成后從該程序塊跳到下一個(gè)指令處。在一個(gè) SCL 程序段(如,包含多個(gè)數(shù)學(xué)函數(shù)等)中,可對(duì)該操作步驟進(jìn)行多次編程。
但無(wú)需編程跳轉(zhuǎn),跳出該程序塊。在 SCL 程序塊中,如果單個(gè)指令的使能輸出 ENO 信號(hào)狀態(tài)為“0",則可確定不執(zhí)行后續(xù)指令。為此,指令 ENO 將在后續(xù)的 IF 指令中與以下指令進(jìn)行關(guān)聯(lián)。
說(shuō)明 ENO 塊的影響 通過(guò) SCL 程序塊,最后一個(gè)指令 ENO 的信號(hào)狀態(tài)將在該塊結(jié)束處傳送到 ENO 塊中。 因此,指令 ENO 可直接影響 ENO 塊。 |
在 SCL 中使用 EN/ENO 機(jī)制的示例
使用 EN/ENO 機(jī)制的指令示例
要在指令中使用 EN/ENO 機(jī)制,則需激活塊屬性“自動(dòng)設(shè)置 ENO"。下文中舉例說(shuō)明了如何在“a + b"運(yùn)算中使用使能輸出 ENO:
"MyOutputREAL":= #a + #b; |
"MyOutputBOOL":= ENO; |
如果執(zhí)行“a/b"運(yùn)算后成功無(wú)錯(cuò)誤,則操作數(shù)“MyOutputBool"的信號(hào)狀態(tài)為“1"。發(fā)生錯(cuò)誤時(shí),使能輸出 ENO 的信號(hào)狀態(tài)為“0"。
通過(guò) EN/ENO 機(jī)制調(diào)用程序塊的示例
以下示例顯示了程序塊的調(diào)用過(guò)程。為此,需激活 EN/ENO 機(jī)制,且必須事先編程一個(gè)影響塊 ENO 的指令:
IF ENO := 1 THEN |
"Block name_DB"(); |
END_IF; |
僅當(dāng)使能輸出 ENO 的信號(hào)狀態(tài)為“1"時(shí),才調(diào)用并執(zhí)行該程序塊。如果激活了 EN/ENO 機(jī)制,則被調(diào)用的程序塊還將返回一個(gè) ENO 塊。該 ENO 塊之后將在被調(diào)用的程序塊中使用。
聯(lián)系方式
郵箱:15214375780@163.com 地址:上海市松江區(qū)高技路655號(hào)4棟413-415