天天看點

PLC 程式設計基礎知識——處理程式錯誤-EN/ENO機制

作者:Look自動化

通常在西門子PLC程式設計調試過程中,忽略了ENO的作用,其實使用使能輸出 ENO,可檢測和處理某些運作系統錯誤。後續指令的執行取決于該使能輸出的信号狀态。使用 EN/ENO 機制可避免程式崩潰。塊狀态将以布爾型變量的形式進行傳遞。

EN/ENO 機制可用于以下兩個方面:

  • 用于單個指令(指令 ENO)
PLC 程式設計基礎知識——處理程式錯誤-EN/ENO機制
  • 用于程式塊調用(塊 ENO)
PLC 程式設計基礎知識——處理程式錯誤-EN/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 機制:

  1. 在程式中,右鍵單擊待激活 EN/ENO 機制的指令。
  2. 在快捷菜單中,選擇“生成 ENO”(Generate ENO) 指令。
  3. 将再次生成指令的 ENO 值。如果激活使能輸出,則随後将插入其它指令。

禁用 EN/ENO 機制

按以下操作來禁用指令的 EN/ENO 機制:

  1. 在程式中,右鍵單擊待禁用 EN/ENO 機制的指令。
  2. 在快捷菜單中,選擇“不生成 ENO”(Do not generate ENO) 指令。
  3. 将不再生成指令的 ENO 值。如果未激活使能輸出,随後也将插入其它指令。

影響 LAD/FBD 程式塊的 ENO 塊

說明

使用指令“RET:傳回”,可跳出一個程式塊,并影響 ENO 塊的信号狀态。

操作步驟

要影響 ENO 塊的信号狀态,請按以下步驟操作:

  1. 啟用某個指令(如,加指令“ADD”)的 EN/ENO 機制。
  2. 對程式設計指令“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”指令:

PLC 程式設計基礎知識——處理程式錯誤-EN/ENO機制

位于常開觸點“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 使能輸出時各指令的應用方式:

PLC 程式設計基礎知識——處理程式錯誤-EN/ENO機制

如果使用 SUB 指令激活使能輸出 ENO,則所有後續指令也将激活使能輸出 ENO。如果在執行 SUB 指令時發生運算錯誤,ADD 指令将不執行。

在第二個分支中,DIV 指令将禁用 ENO 使能輸出。即使在執行過程中發生運作時錯誤,MUL 指令仍将正常運作。

通過 EN/ENO 機制調用程式塊的示例

下圖中舉例說明了如何通過 EN/ENO 回路調用程式塊:

PLC 程式設計基礎知識——處理程式錯誤-EN/ENO機制

如果操作數“TagEnable”的信号狀态為“1”,則執行該程式塊:

  • 使能輸出 ENO 的信号狀态取決于程式塊中具體的程式代碼。
  • 如果操作數“TagEnable”的信号狀态為“0”,則不執行該程式塊調用。使能輸入 EN 和使能輸出 ENO 的信号狀态均為“0”。

FBD 中的 EN-/ENO 機制

使用 EN/ENO 機制的指令示例

以下示例說明了使用 EN/ENO 電路和 RET 線圈 (Ret False) 的“Add”指令:

PLC 程式設計基礎知識——處理程式錯誤-EN/ENO機制

位于常開觸點“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 使能輸出時各指令的應用方式:

PLC 程式設計基礎知識——處理程式錯誤-EN/ENO機制

如果使用 SUB 指令激活使能輸出 ENO,則所有後續指令也将激活使能輸出 ENO。如果在執行 SUB 指令時發生運算錯誤,ADD 指令将不執行。

DIV 指令可禁用 ENO 使能輸出。即使在執行過程中發生運作時錯誤,MUL 指令仍将正常運作。

通過 EN/ENO 機制調用程式塊的示例

下圖中舉例說明了如何通過 EN/ENO 回路調用程式塊:

PLC 程式設計基礎知識——處理程式錯誤-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) 屬性。

  1. 在項目浏覽器中,打開“程式塊”(Program blocks) 檔案夾。
  2. 右鍵單擊待顯示屬性的 SCL 塊。
  3. 在快捷菜單中,選擇“屬性”(Properties) 指令。
  4. 該塊的屬性對話框随即打開。
  5. 在區域導航中,單擊“屬性”(Attributes) 組。
  6. 激活屬性“自動置位 ENO”(Set ENO automatically)。
  7. 單擊“确定”(OK) 進行确認。

結果:僅針對所選塊啟用“自動置位 ENO”(Set ENO automatically) 屬性。

針對所有新程式塊,将“自動置位 ENO”(Set ENO automatically) 屬性設定為“TRUE”

可按照以下步驟,啟用程式屬性中的“自動置位 ENO”(Set ENO automatically) 屬性。

  1. 在“選項”(Options) 菜單中,選擇“設定”(Settings) 指令。
  2. 在工作區中,“設定”(Settings) 視窗随即顯示。
  3. 在區域導航中,選擇“PLC 程式設計”(PLC programming) 組。
  4. 選擇“SCL(結構化控制語言)”(SCL (Structured Control Language)) 組。
  5. 激活屬性“自動置位 ENO”(Set ENO automatically)。

結果:針對所有新程式塊,啟用“自動置位 ENO”(Set ENO automatically) 屬性。

SCL 指令中使用使能輸出 ENO

說明

要運作諸如數學函數等每個 SCL 指令,都必須查詢使能輸出 ENO。

操作步驟要查詢使能輸出 ENO,請按以下步驟操作:

  1. 激活 EN/ENO 機制。
  2. SCL 指令執行後,查詢使能輸出 ENO(如,#MyOutputBool := ENO;)
  3. 如果發生錯誤(如,結果溢出),則使能輸出 ENO 将傳回信号狀态“0”。基于該信号狀态時,指令可繼續執行。例如,程式設計指令“RETURN”、故障顯示或替換值。
  4. 執行下一個指令之前,先将使能輸出 ENO 的信号狀态複位為“1”(如,ENO :=1;)。
  5. 發生下一處錯誤時,該信号狀态是以可複位為“0”。否則,使能輸出 ENO 的信号狀态将保持為“0”。

說明

跳轉到一個 SCL 塊中時,使能輸出 ENO 的信号狀态将自動置位為“1”。

影響 SCL 塊的“ENO”

說明

SCL 程式塊中 ENO 的最後一個指派即此塊的 ENO。另外,也可退出此程式塊,并同時使用“RETURN”指令為此塊的 ENO 指派“TRUE”或“FALSE”。

操作步驟

可按照以下步驟影響此塊的 ENO 的信号狀态:

  1. 激活 ENO 機制。
  2. 然後程式設計:
  3. IF #n := 0 THEN
  4. RETURN FALSE;
  5. 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 機制,按以下步驟操作:

  1. 在項目浏覽器中,打開“程式塊”(Program blocks) 檔案夾。
  2. 右鍵單擊待顯示屬性的 GRAPH 塊。
  3. 在快捷菜單中,選擇“屬性”(Properties) 指令。
  4. 該塊的屬性對話框随即打開。
  5. 在區域導航中,單擊“屬性”(Attributes) 組。
  6. 激活屬性“自動置位 ENO”(Set ENO automatically)。
  7. 單擊“确定”(OK) 進行确認。

結果:僅所選 GRAPH 塊激活了 EN/ENO 機制。

GRAPH 中的 EN/ENO 機制示例

帶有使能輸出 ENO 的程式狀态示例

下文中舉例說明了順序視圖内相應動作下使能輸出 ENO 的程式狀态:

PLC 程式設計基礎知識——處理程式錯誤-EN/ENO機制

如果在執行過程中發生錯誤,則使能輸出 ENO 的信号狀态為 FALSE。

程式塊調用示例

下圖中舉例說明了 LAD 程式塊如何通過 EN/ENO 調用 GRAPH 程式塊:

PLC 程式設計基礎知識——處理程式錯誤-EN/ENO機制

如果操作數“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 塊通常受此影響。

繼續閱讀