程序塊調(diào)用與 EN/ENO 機制
從 STL 程序塊調(diào)用的程序塊不提供 EN 和 ENO 參數(shù)。無論創(chuàng)建程序塊時采用何種編程語言,都可通過狀態(tài)字的 BR 位將錯誤語句傳送到 STL 程序塊中。
通過關(guān)聯(lián)狀態(tài)字的 BR 位 和邏輯運算結(jié)果 (RLO),即可對被調(diào)用程序塊的錯誤狀態(tài)進行評估。被調(diào)用的程序塊開始執(zhí)行時,RLO 的信號狀態(tài)即為“1”。如果在程序塊執(zhí)行后未將 RLO 顯式地設(shè)置為“0”,則其信號狀態(tài)將保持為“1”。要將錯誤語句傳送回調(diào)用程序塊,則需將 的信號狀態(tài)顯式地復(fù)位為“0”。并通過指令“SAVE:將 RLO 保存在 BR 位中“和”JNB:若 RLO = 0 則跳轉(zhuǎn),并保存 RLO”,對錯誤語句進行置位。
在 STL 中,可對 BR 位進行錯誤分析。在編程語言 LAD、FBD 和 SCL 中,可根據(jù) BR 位生成使能輸出 ENO。
如果狀態(tài)字中 BR 位的值為“0”,則表示在 STL 程序塊調(diào)用過程中發(fā)生了錯誤(調(diào)用程序塊是一個 STL 程序塊)。
CPU 中指令的執(zhí)行 | BR 位 | 返回值 | 整數(shù)的符號 |
---|---|---|---|
存在錯誤 | 0 | 小于“0” | 負數(shù)(符號位為“1”) |
無錯誤 | 1 | 大于或等于“0” | 正數(shù)(符號位為“0”) |
通過 EN/ENO 機制執(zhí)行程序序列的示例
下文中舉例說明了如何使用 EN/ENO 機制執(zhí)行數(shù)值相加的程序段:
STL | 說明 |
---|---|
A "TagEnable" | // 查詢操作數(shù)“TagEnable”的信號狀態(tài)是否為“1”,并與當(dāng)前的 RLO 進行 AND 運算。 |
JNB MyLABEL |
// 評估使能輸入 EN // 如果 RLO =“0”,則跳轉(zhuǎn)至跳轉(zhuǎn)標(biāo)簽“MyLABEL”處,并將當(dāng)前的 RLO 保存到 BR 位中。不執(zhí)行以下操作。 // 如果 RLO =“1”,則執(zhí)行以下操作。 |
L "Tag_Input_1" | // 加載加法運算中的第一個值。 |
L "Tag_Input_2" | // 加載加法運算的第二個值。 |
+I | // 添加值 |
T "Tag_Result" | // 將合計值傳送給操作數(shù)“Tag_Result”。 |
AN OV | // 查詢是否發(fā)生溢出。 |
SAVE | // 將 RLO 的信號狀態(tài)傳送到 BR 位。 |
CLR | /// 將 RLO 復(fù)位為“0”,并結(jié)束邏輯序列。 |
MyLABEL:A BR |
// 跳轉(zhuǎn)標(biāo)簽“MyLABEL” // 查詢 BR 位。 |
= "Tag_Output" | // 將 RLO 的信號狀態(tài)分配給操作數(shù)“Tag_Output”。 |
查詢操作數(shù)“TagEnable”將確定前導(dǎo)邏輯運算 (RLO) 的結(jié)果。指令“JNB:若 RLO = 0 則跳轉(zhuǎn),并保存 RLO”將 RLO 的值保存在 BR 位中。另外,該指令還將對 RLO 的值進行評估,并根據(jù)其信號狀態(tài)指向以下操作:
如果 RLO 為“0”,則程序在跳轉(zhuǎn)標(biāo)簽“MyLABEL”處以 BR 位的查詢結(jié)果繼續(xù)執(zhí)行。而不執(zhí)行加法運算。將操作數(shù)“Tag_Output”的值分配給當(dāng)前的 RLO。
如果 RLO 為“1”,則執(zhí)行加法運算。通過對溢出位 (OV) 的查詢,可判斷加法運算過程中是否存在錯誤。查詢結(jié)果將保存在 BR 中。指令“CLR:將 RLO 復(fù)位為 0”將 RLO 復(fù)位為“0”,并結(jié)束邏輯序列。之后,系統(tǒng)將查詢 BR 位并將其分配給操作數(shù)“Tag_Output”。通過 BR 位的信號狀態(tài)以及操作數(shù)“Tag_Output”可判斷加法運算是否成功執(zhí)行沒有任何錯誤。
通過 EN/ENO 機制調(diào)用程序塊的示例
下圖中舉例說明了如何通過 EN/ENO 回路調(diào)用程序塊:
STL | 說明 |
---|---|
A "TagEnable" | // 查詢操作數(shù)“TagEnable”的信號狀態(tài)是否為“1”,并與當(dāng)前的 RLO 進行 AND 運算。 |
JNB MyLABEL |
// 評估使能輸入 EN // 如果 RLO =“0”,則跳轉(zhuǎn)至跳轉(zhuǎn)標(biāo)簽“MyLABEL”處,并將當(dāng)前的 RLO 保存到 BR 位中。不執(zhí)行以下操作。 // 如果 RLO =“1”,則執(zhí)行以下操作。 |
CALL "Block name", "Block name_DB" | // 調(diào)用程序塊。 |
MyLABEL:A BR |
// 跳轉(zhuǎn)標(biāo)簽“MyLABEL” // 查詢 BR 位并在 AND 運算后與 RLO 進行運算。 |
= "Tag_Output" | // 將 RLO 的信號狀態(tài)分配給操作數(shù)“Tag_Output”。 |
審核編輯:劉清
-
STL
+關(guān)注
關(guān)注
0文章
86瀏覽量
18773 -
狀態(tài)機
+關(guān)注
關(guān)注
2文章
493瀏覽量
28159 -
邏輯運算器
+關(guān)注
關(guān)注
0文章
4瀏覽量
2504
原文標(biāo)題:西門子博途:在 STL 中的 EN/ENO 機制仿真示例
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
ls1028A如何啟用eno3?
C++ STL的概念及舉例
STL算法在GIS中的應(yīng)用
multisim10仿真軟件中示波器如何看幅度及相位

通過各種指令中的EN/ENO機制,可以檢測運行錯誤
簡述西門子SCL語言-輸入?yún)?shù)EN/輸出參數(shù)ENO

STL的概述

如何顯示STL程序的程序狀態(tài)呢?

評論