趙青
[摘 要] 對S7-200smartPLC來說,尋址分為直接尋址和間接尋址,其中間接尋址主要用于需要在程序中修改地址的場合,特別是處理數據內容比較多的情況,使用間接尋址編程靈活,節省程序空間。大多教材關于間接尋址的概念和應用介紹得不夠通俗易懂,很多學生,甚至工程技術人員對間接尋址的使用存在概念不清,應用不明的情況。通過三個例子循序漸進地說明間接尋址的概念和應用,經過教學實踐,學生反饋較好。
[關 鍵 詞] 間接尋址;操作數;地址;指針
[中圖分類號] TP273 [文獻標志碼] A [文章編號] 2096-0603(2018)24-0018-02
PLC將信息存于不同的存儲器單元,每個單元都有唯一的地址。地址也是我們訪問所有數據的依據,那么我們訪問數據的過程就是尋址。在s7-200smartPLC中通過地址訪問數據,地址是訪問數據的依據,訪問數據的過程稱為“尋址”。幾乎所有的指令和功能都與各種形式的尋址有關。直接尋址指定了存儲器的長度和位置,例如VW90是V存儲區中16位的字,其地址為90。而間接尋址在指令中給出的不是操作數的值或操作數的地址,而是給出一個被稱為指針的雙字存儲單元的地址,指針里存放的是真正的操作數的地址。
一、如何進行間接尋址
使用間接尋址的方式存取數據主要分為以下三個步驟來實現:
(一)建立指針
使用間接尋址之前,應創建一個指針。指針以雙字的形式存儲要訪問的存儲器的地址,只能用V存儲器、L存儲器或者累加器AC作為指針。建立指針時,用雙字傳送指令MOVD將需要間接尋址的存儲器起始地址送到指針中。指針的輸入數應該以“&”符號開頭來表明存儲區的地址,注意不是其內容將移動到指令的輸出操作數中。
S7-200smartPLC中允許使用指針對下述存儲區進行間接尋址:I、Q、V、M、S、AI、AQ、SM、T(僅當前值)和C(僅當前值)。但不能對單個的位地址、HC、L存儲區和累加器進行間接尋址。
例1:針對存儲區VB0為起始地址的一組數據和以T37為起始地址的一組定時器當前值進行間接尋址。VB0的地址作為指針送入VD100,“&VB0”是VB0的地址,而不是VB0中的內容;同理T37的地址作為指針送入VD200,“&T37”是T37的地址,而不是定時器T37的當前值。
(二)數據讀取
用指針訪問數據時,操作數前加“*”號,表示指令中的操作數是一個指針。當有M0.0的上升沿脈沖時,將指針VD100所指的存儲單元的數據內容送到VB400中,針針VD200所指的存儲單元的數據內容送到VW1000中。
將程序下載到s7-200smartPLC調試,打開狀態圖表,假設約定兩組數據,第一組以VB0為首地址的數據,即VB0=-10,VB1=25,VB3=38,VB4=-99;第二組數據是以T37為首地址的數據,即T37當前值=10,T38當前值=20,T39當前值=30,T40當前值=40,(為了調試方便,數組組成個數為4個)點擊“監控圖標”后點擊“寫入圖標”寫入新值。指針VD100的當前值+134217728,指針VD200的當前值為+150995020,不影響間接尋址。
此例中,當讀取數據條件,M0.0由0變成1時,即執行了第一次讀取數據,讀取的數據相應送入VB400和VW1000,此時VB400的值即為VB0的數據,等于“-10”,VD1000的值即為T37的數據,等于“10”;若將VD100偏移量加1,即當前值由134217728加1變為134217729,VD200偏移量為2,即當前值由150995020加2變為150995022,再次將M0.0的狀態由0變為1,讀取的數據相應送入VB400和V1000,此時VB400的值即為VB1,等于“25”,VD1000的值即為T38的數據,等于“20”。讀者可以在狀態圖表中進行監控調試,這里不再給出尋址其他數據的說明。
(三)修改指針
用指針訪問相鄰的一個數據時,可以在狀態圖表中在監控條件下通過將M0.0的位狀態的改變來修改指針,也可在程序里使用雙字加法(ADDD)或雙字遞增(INCD)指令(指針是32位的數據)。修改時記住需要調整的存儲器地址的字節數,訪問字節時,指針值加1,訪問字時,指針值加2,訪問雙字時,指針值加4??蓞⒖既缦鲁绦颍浩渲校琈0.0為指針偏移的條件,讀取數據則用SM0.0,讀者可以自行下載,用狀態圖表監控。
LD SM0.1
MOVD &VB0, VD100 //建立指針
MOVD &T37, VD200 //建立指針
LD M0.0
EU
+D 1, VD100 //訪問字節,指針值加1
+D 2, VD200 //訪問字,指針值加2
LD SM0.0
MOVB *VD100 VB400 //讀取數據
MOVW *VD200 VW1000 //讀取數據
以上三個步驟就可以完成間接尋址,讀者可以通過上面的例子進行試驗,理解清楚間接尋址的概念。
二、間接尋址的應用
間接尋址常用于循環程序,處理連續地址的數據。以下通過例子來介紹間接尋址的應用。
(一)用于循環程序
用循環程序來累加一片連續的存儲區中的數值時,每次循環累加一個數值。應在累加后修改指針中存儲單元的地址值,使指針指向下一個存儲單元,為下一次循環的累加運算做好準備。沒有間接尋址,就不能編寫循環程序。間接尋址的優點是可以在程序運行期間,通過改變指針的值,動態地修改指令中的操作數的地址。舉例說明:
例2:在M0.5的上升沿求VB0~VB3中4個字節的異或值,運算結果用VB4保存。
第一次循環將指針AC1所指定的VB0與VB4異或,運算結果存入VB4中,然后將指針AC1的值加1,指針指向VB1,為下一次循環的異或運算做好準備。參考程序如下:
LD M0.5
EU
MOVB 0,VB4 //將保存運算結果的存儲單元清零
MOVD &VB0, AC1 //將存儲區起始地址送指針AC1
FOR VW100,1,4 //循環開始
LD SM0.0
XORB *AC1,VB4 //字節異或
INCD AC1 //指針AC1的值加1,指向下一個字節
NEXT //循環結束
此例是間接尋址方式在循環程序中的典型應用。
(二)工程應用
例3:在葡萄汁生產中,根據產品成分:水、鮮榨果汁、糖、香料、溫度和速度的不同,可以生產出葡萄果汁、葡萄蜜露、葡萄飲品這三種飲料。要求編寫一個配方程序,使操作人員可以選擇生產不同的葡萄汁產品:(1)在觸摸屏畫面,選擇某一個配方,按下“調用配方”按鈕,則調用出相應的配方;(2)若任意一個果汁產品的配方不合適,可以通過“修改配方”按鈕修改配方并保存;(3)按下“刪除配方”按鈕,可以刪除配方數據。
此例配合HMI應用,因畫面制作比較簡單,這里不贅述。按照要求,每種飲料都與六個變量有關,分別是水、鮮榨果汁、糖、香料以及調配時的速度和溫度。下圖是在觸摸屏SMART LINE中制作的畫面。
“配方選擇”框內可以填“1”或“2”或“3”,即選擇某一配方,存在VD200中。按下“調用配方”按鈕,即可調用所選擇的一種配方時,在畫面的右側應顯示該配方對應數組。配方1的六個變量對應VW0、VW2、VW4、VW6、VW8、VW10,首地址為VW0;配方2和配方3按順序以此類推,首地址分別是VW12和VW24。利用間接尋址,可以非常方便地處理這種數據內容比較多的情況,使用間接尋址編程靈活,節省程序空間。
將VB0的地址送入指針VD300中。2號配方的首地址是1號配方的首地址增加12,3號配方的首地址是2號配方的首地址增加12,編寫程序時可以用數學運算指令來計算指針的偏移量。選擇第n(1或2或3)號配方,則該配方指針VD300偏移量為:(n-1)*12+指針VD300。
調用配方實際就是讀取配方的內容,可以直接讀取指針對應的數據到目標存儲區VW100-VW110中;修改配方是將目標存儲區中配方的內容存到指針對應的配方數據區;刪除配方是清零。
讀者可以自行驗證以上程序,通過觸摸屏畫面或者狀態圖表觀察配方的變化情況。
使用間接尋址處理連續地址中的數據非常方便,而且可以減少編程工作量,使編程變得靈活。通過這幾個實例,間接尋址這個難點迎刃而解,學生不僅在概念上更清晰了,而且在工程應用方面更進一步。
參考文獻:
[1]廖常初.S7-200SMARTPLC編程及應用[M].北京:機械工業出版社,2015.
[2]吳浩.變頻器與PLC的通訊控制原理及應用分析[J].科技創新與應用,2016(35).