程序塊調用與 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 | 小于“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”。 |
審核編輯:劉清
-
STL
+關注
關注
0文章
86瀏覽量
18338 -
狀態機
+關注
關注
2文章
492瀏覽量
27578 -
邏輯運算器
+關注
關注
0文章
4瀏覽量
2437
原文標題:西門子博途:在 STL 中的 EN/ENO 機制仿真示例
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論