西門子PLC語句表編程:跳轉指令

正常情況下,程序的執行順序是自上而下,逐條掃描執行的。STL指令集中有一類跳轉指令,可以中斷程序的這種線性執行流,跳轉到指定的位置繼續執行。


西門子PLC語句表編程:跳轉指令


一、 跳轉標籤

跳轉的"目標"地址由"標籤"來指定,該標籤稱之為"跳轉標籤"。跳轉標籤最多4個字符,且第一個字符必須為字母。跳轉標籤後必須帶有冒號":" ,且在行中必須位於程序語句之前。

二、 跳轉指令

跳轉指令根據"跳轉"的機理,首先可分為"無條件跳轉"和"條件跳轉",除此之外,還有一個特殊的跳轉指令,可實現分支跳轉。

1、 無條件跳轉指令JU


西門子PLC語句表編程:跳轉指令


程序在執行時,遇到JU指令,無條件的跳轉到其"標籤"所指示的代碼行繼續執行。跳轉指令和跳轉目標必須在同一個塊內。

需要注意的是:理論上,JU指令允許向前跳,也允許向後跳。向後跳屬於常規用法,一般沒什麼問題。但向前跳,容易形成死循環,因此,一般不建議使用JU命令向前跳。

2、 有條件跳轉指令

顧名思義,與無條件跳轉不同,有條件跳轉指令中斷原程序邏輯流,發生跳轉是需要條件的,根據跳轉條件的不同,它們又有不同的分類。

(1) 由RLO的狀態決定是否跳轉


西門子PLC語句表編程:跳轉指令


對於"JC"指令,當邏輯運算結果(RLO)為"1"時,"跳轉"生效,中斷當前的線性掃描,跳轉到"跳轉標籤"所標識的行繼續執行。同樣,可以選擇向前跳,也可以向後跳。

"JCN"指令與"JC"指令相反,當"RLO"為"1"的時候,"跳轉"生效。

另外:當條件不滿足,不執行跳轉的時候,該指令會將RLO置"1",然後繼續執行下面的指令。


(2) 帶BR位,由RLO狀態決定是否跳轉


西門子PLC語句表編程:跳轉指令


對於"JCB"指令,其與"JC"指令一樣,當RLO為1時,"跳轉"生效,中斷當前的線性掃描,跳轉到"跳轉標籤"所標識的指令行繼續執行。而與"JC"指令不同的是,"JCB"指令會"額外"的做一項工作:將RLO的狀態複製到BR(二進制結果位)中。

同樣,"JNB"指令,其觸發跳轉的條件為RLO=0,且也會將RLO狀態複製到BR中。

(3) 由"狀態寄存器"的"BR"位決定跳轉與否


西門子PLC語句表編程:跳轉指令


(4) 由"狀態寄存器"的"OV"、"OS"位決定跳轉與否


西門子PLC語句表編程:跳轉指令


狀態字的第4位和第5位分別為"溢出位OV"和"溢出狀態保持位OS"。當算術運算或浮點數比較指令執行時出現錯誤(如溢出、非法操作和不規範的格式等)時,OV位會被置1,同時OS位也被置1。而如果後面同類指令執行結果正確,則OV位會被清0,但OS位仍然保持為1。只有JOS指令、塊調用指令和塊結束指令才能復位OS位。

一般用於檢查算術運算指令結果是否有溢出,若有溢出,可用JO、JOS指令進行跳轉,以做相應的錯誤處理。

(5) 由條件碼1(CC1)和條件碼0(CC0)決定是否跳轉

狀態字的第7位(CC1)和第6位(CC0)分別為條件碼1和條件碼0。這兩位綜合起來用於表示在累加器1(ACCU1)中產生的算術運算或邏輯運算的結果與"0"的大小關係、比較指令的執行結果或移位指令的移出位的結果。

CC1和CC0的狀態與"算術運算"的結果的關係如下:


西門子PLC語句表編程:跳轉指令


在"跳轉指令"中,有一類指令根據算術運算的結果來決定邏輯流是否跳轉,本質上,是在執行完算術運算後,根據CC1和CC0的不同狀態,來決定相應的跳轉指令是否具備跳轉條件,如下表所示:


西門子PLC語句表編程:跳轉指令


3、 分支跳轉指令JL

在語句表的指令集中,還有一條特殊的跳轉指令,它能夠實現向多路分支跳轉的功能,它就是分支跳轉指令JL,其執行流程如下圖所示。


西門子PLC語句表編程:跳轉指令


JL指令根據累加器1(ACCU1)的低字節中的數值大小來決定程序"沿著"哪一條分支執行。由於一個字節的數值範圍為0~255,因此,JL指令最多可管理多達256條分支的程序。

JL指令一般要與無條件跳轉指令JU配合使用,其指令的格式如下:


西門子PLC語句表編程:跳轉指令

詳見


分享到:


相關文章: