PLC的堆棧數據是布爾數據類型,也就是說每層只能是1或者是0。操作方式是先進后出,類似於彈夾,先壓入的子彈只能最后射出。堆棧存儲的數據都是位運算的中間結果。
西門子的堆棧有九層,第一層存放最近的位運算結,共有8條操作指令。
指令LD和LDN:每執行一次裝載指令,結果如圖2示,最底端的IV8值被拋棄。
例如執行LD I0.0 棧中的i值可能是1或者0,這與I0.0的狀態有關。
指令ALD:指令采用邏輯AND(與)操作將堆棧第一級和第二級中的數值組合,並將結果載入堆棧頂部。執行ALD后,堆棧深度減1。
指令OLD:指令采用邏輯OR(或)操作將堆棧第一級和第二級中的數值組合,並將結果載入堆棧頂部。執行OLD后,堆棧深度減1。
總計對內存的操作就是對堆棧的操作。
核心提示: LDS (Load Stack):載入堆棧指令,它的功能是復制堆棧中的第n個值到棧頂,而棧底丟失。LDS指令的格式:LDS n(n為0~8的整數)。 LPS (Logic Push);邏輯入棧指令(分支電路開始指令)。在梯形圖的分支結構中,可以形象地看出,它用於生成一條新的母線,其左側為原來的主邏輯塊,右側為新的從 邏輯塊。因此可以直接編程。從
LDS (Load Stack):
載入堆棧指令,它的功能是復制堆棧中的第n個值到棧頂,而棧底丟失。LDS指令的格式:LDS n(n為0~8的整數)。
LPS (Logic Push)
;邏輯入棧指令(分支電路開始指令)。在梯形圖的分支結構中,可以形象地看出,它用於生成一條新的母線,其左側為原來的主邏輯塊,右側為新的從邏輯塊。因此可以直接編程。從堆棧使用上來講,LPS指令的作用是復制堆棧頂部的數值,並將此數值推到堆棧中。堆棧底部被推出或丟失。
LRD (Logic Read)
:邏輯堆棧指令。在梯形圖分支結構中,當新母線左側為主邏輯塊時LPS開始右側的第一個從邏輯塊編程,LRD開始第二個以后的從邏緝塊編程。從堆棧使用上來講,LRD將第二個堆棧值復制到堆棧頂部。堆棧沒有被推出或彈出,但堆棧頂部的舊數值及被復制的數值破壞。
LPP (Logic Push):
邏輯出棧指令(分支電路結束指令)。在梯形圖分支結構中,LPP用於LPS產生的新母線右側的最后一個從邏輯塊編程。它在讀取完離它最近的LPS壓入堆棧的內容同時復位該條新母線,轉移至上一條母線。從堆棧使用上來講,LPP將堆棧的一個數值彈出堆棧,第二個堆棧數值成為堆棧數值的新頂部。
如圖4-5所示為S7-200使用邏輯堆棧指令來解決控制邏輯問題。圖中,“iv0”到“iv7”標識邏輯堆棧的初始值,而“S0”標識存儲在邏輯堆棧中的計算后數值。
表4-22是LPS、LRD、LPP指令的例子。其中有3個輸出Q0.0,Q0.1,Q0.2都需要用到I0.0的動合觸點,則可以用邏輯堆棧指令,以減少輸入觸點。在母線開始處連接I0.0,然后利用LPS指令將此位置的邏輯狀態壓入堆棧保存,然后利用I0.1和I0.2的動合觸點控制Q0.0的狀態。若要控制Q0.1,則用LRD指令將I0.0處邏輯狀態從堆棧中讀出利用,控制Q0.2時,是程序中最后一個利用I0.0目前的邏輯狀態,因此采用LPP,從堆棧中彈出此處的邏輯狀態。
表4-22 LPS、LRD、LPP指令的例子

嵌套時必須先出最外邊的棧