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