通常在西門子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” | 負數(符号位為“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 塊通常受此影響。