程序塊調(diào)用與 EN/ENO 機(jī)制
從 STL 程序塊調(diào)用的程序塊不提供 EN 和 ENO 參數(shù)。無論創(chuàng)建程序塊時(shí)采用何種編程語言,都可通過狀態(tài)字的 BR 位將錯(cuò)誤語句傳送到 STL 程序塊中。
通過關(guān)聯(lián)狀態(tài)字的 BR 位 和邏輯運(yùn)算結(jié)果 (RLO),即可對(duì)被調(diào)用程序塊的錯(cuò)誤狀態(tài)進(jìn)行評(píng)估。被調(diào)用的程序塊開始執(zhí)行時(shí),RLO 的信號(hào)狀態(tài)即為“1”。如果在程序塊執(zhí)行后未將 RLO 顯式地設(shè)置為“0”,則其信號(hào)狀態(tài)將保持為“1”。要將錯(cuò)誤語句傳送回調(diào)用程序塊,則需將 的信號(hào)狀態(tài)顯式地復(fù)位為“0”。并通過指令“SAVE:將 RLO 保存在 BR 位中“和”JNB:若 RLO = 0 則跳轉(zhuǎn),并保存 RLO”,對(duì)錯(cuò)誤語句進(jìn)行置位。
在 STL 中,可對(duì) BR 位進(jìn)行錯(cuò)誤分析。在編程語言 LAD、FBD 和 SCL 中,可根據(jù) BR 位生成使能輸出 ENO。
如果狀態(tài)字中 BR 位的值為“0”,則表示在 STL 程序塊調(diào)用過程中發(fā)生了錯(cuò)誤(調(diào)用程序塊是一個(gè) STL 程序塊)。
CPU 中指令的執(zhí)行 | BR 位 | 返回值 | 整數(shù)的符號(hào) |
---|---|---|---|
存在錯(cuò)誤 | 0 | 小于“0” | 負(fù)數(shù)(符號(hào)位為“1”) |
無錯(cuò)誤 | 1 | 大于或等于“0” | 正數(shù)(符號(hào)位為“0”) |
通過 EN/ENO 機(jī)制執(zhí)行程序序列的示例
下文中舉例說明了如何使用 EN/ENO 機(jī)制執(zhí)行數(shù)值相加的程序段:
STL | 說明 |
---|---|
A "TagEnable" | // 查詢操作數(shù)“TagEnable”的信號(hào)狀態(tài)是否為“1”,并與當(dāng)前的 RLO 進(jìn)行 AND 運(yùn)算。 |
JNB MyLABEL |
// 評(píng)估使能輸入 EN // 如果 RLO =“0”,則跳轉(zhuǎn)至跳轉(zhuǎn)標(biāo)簽“MyLABEL”處,并將當(dāng)前的 RLO 保存到 BR 位中。不執(zhí)行以下操作。 // 如果 RLO =“1”,則執(zhí)行以下操作。 |
L "Tag_Input_1" | // 加載加法運(yùn)算中的第一個(gè)值。 |
L "Tag_Input_2" | // 加載加法運(yùn)算的第二個(gè)值。 |
+I | // 添加值 |
T "Tag_Result" | // 將合計(jì)值傳送給操作數(shù)“Tag_Result”。 |
AN OV | // 查詢是否發(fā)生溢出。 |
SAVE | // 將 RLO 的信號(hào)狀態(tài)傳送到 BR 位。 |
CLR | /// 將 RLO 復(fù)位為“0”,并結(jié)束邏輯序列。 |
MyLABEL:A BR |
// 跳轉(zhuǎn)標(biāo)簽“MyLABEL” // 查詢 BR 位。 |
= "Tag_Output" | // 將 RLO 的信號(hào)狀態(tài)分配給操作數(shù)“Tag_Output”。 |
查詢操作數(shù)“TagEnable”將確定前導(dǎo)邏輯運(yùn)算 (RLO) 的結(jié)果。指令“JNB:若 RLO = 0 則跳轉(zhuǎn),并保存 RLO”將 RLO 的值保存在 BR 位中。另外,該指令還將對(duì) RLO 的值進(jìn)行評(píng)估,并根據(jù)其信號(hào)狀態(tài)指向以下操作:
如果 RLO 為“0”,則程序在跳轉(zhuǎn)標(biāo)簽“MyLABEL”處以 BR 位的查詢結(jié)果繼續(xù)執(zhí)行。而不執(zhí)行加法運(yùn)算。將操作數(shù)“Tag_Output”的值分配給當(dāng)前的 RLO。
如果 RLO 為“1”,則執(zhí)行加法運(yùn)算。通過對(duì)溢出位 (OV) 的查詢,可判斷加法運(yùn)算過程中是否存在錯(cuò)誤。查詢結(jié)果將保存在 BR 中。指令“CLR:將 RLO 復(fù)位為 0”將 RLO 復(fù)位為“0”,并結(jié)束邏輯序列。之后,系統(tǒng)將查詢 BR 位并將其分配給操作數(shù)“Tag_Output”。通過 BR 位的信號(hào)狀態(tài)以及操作數(shù)“Tag_Output”可判斷加法運(yùn)算是否成功執(zhí)行沒有任何錯(cuò)誤。
通過 EN/ENO 機(jī)制調(diào)用程序塊的示例
下圖中舉例說明了如何通過 EN/ENO 回路調(diào)用程序塊:
STL | 說明 |
---|---|
A "TagEnable" | // 查詢操作數(shù)“TagEnable”的信號(hào)狀態(tài)是否為“1”,并與當(dāng)前的 RLO 進(jìn)行 AND 運(yùn)算。 |
JNB MyLABEL |
// 評(píng)估使能輸入 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 運(yùn)算后與 RLO 進(jìn)行運(yùn)算。 |
= "Tag_Output" | // 將 RLO 的信號(hào)狀態(tài)分配給操作數(shù)“Tag_Output”。 |
審核編輯:劉清
-
STL
+關(guān)注
關(guān)注
0文章
86瀏覽量
18388 -
狀態(tài)機(jī)
+關(guān)注
關(guān)注
2文章
492瀏覽量
27670 -
邏輯運(yùn)算器
+關(guān)注
關(guān)注
0文章
4瀏覽量
2448
原文標(biāo)題:西門子博途:在 STL 中的 EN/ENO 機(jī)制仿真示例
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
X-CUBE-STL與ARM的STL的區(qū)別是什么?
ls1028A如何啟用eno3?
C++ STL的概念及舉例
STL算法在GIS中的應(yīng)用
multisim10仿真軟件中示波器如何看幅度及相位
![multisim10<b class='flag-5'>仿真</b>軟件<b class='flag-5'>中</b>示波器如何看幅度及相位](https://file1.elecfans.com//web2/M00/A7/21/wKgZomUMQo-Ac7hkAAAdWR_m1Pc946.png)
通過各種指令中的EN/ENO機(jī)制,可以檢測(cè)運(yùn)行錯(cuò)誤
探究S-1500激活ENENO機(jī)制
![探究S-1500激活ENENO<b class='flag-5'>機(jī)制</b>](https://file.elecfans.com/web1/M00/EA/D7/o4YBAGB5B6aAWgbnAAA2vooigg8693.png)
簡述西門子SCL語言-輸入?yún)?shù)EN/輸出參數(shù)ENO
![簡述西門子SCL語言-輸入?yún)?shù)<b class='flag-5'>EN</b>/輸出參數(shù)<b class='flag-5'>ENO</b>](https://file.elecfans.com/web1/M00/ED/4D/o4YBAGCLwOyALMsAAAAnJw-BM6Q810.png)
STL的概述
![<b class='flag-5'>STL</b>的概述](https://file.elecfans.com/web2/M00/88/D8/poYBAGO2k0KANKP0AADuK7kOZ3M611.jpg)
使用 EN/ENO 機(jī)制可避免程序崩潰
![使用 <b class='flag-5'>EN</b>/<b class='flag-5'>ENO</b> <b class='flag-5'>機(jī)制</b>可避免程序崩潰](https://file1.elecfans.com/web2/M00/8B/9D/wKgZomSb7XuAbv6XAAAa8p4I2Rg898.png)
SCL中的 EN/ENO 機(jī)制概述
如何顯示STL程序的程序狀態(tài)呢?
![如何顯示<b class='flag-5'>STL</b>程序的程序狀態(tài)<b class='flag-5'>呢</b>?](https://file1.elecfans.com/web2/M00/94/67/wKgZomTlb7uANodoAABKhYvwuxM768.png)
評(píng)論