01 指令講解
1.創(chuàng)建指針
使用間接尋址就必須先創(chuàng)建指針,那么指針怎么創(chuàng)建呢?使用MOV_DW指令把指針地址存放到OUT輸出的變量,MOV_DW不是普通的32位數(shù)傳送指令嗎,怎么就是指針了呢?
其實(shí)當(dāng)MOV_DW指令I(lǐng)N引腳使用&VBxxx、&IBxxx、&MBxxx、&QBxxx時(shí)為創(chuàng)建指針的格式。如圖1所示,&VB0為創(chuàng)建指針指向vb0,其中&為創(chuàng)建指針的符號(hào),VB為V存儲(chǔ)區(qū)的字節(jié),0代表指向的地址是從字節(jié)0開始的,指針地址放在OUT輸出變量地址中,VD100為創(chuàng)建指針存放的指針地址。
圖1
2.引用指針
引用指針使用字符“*”帶表示引用指針,如圖2所示,*VD100代表引用指針,把vd0的數(shù)據(jù)傳送到vd200中。
圖2
那么如何判斷指向的地址使用的是字節(jié)、字、雙字呢?其實(shí)和指令有關(guān)系。可以通過數(shù)據(jù)類型判斷,如圖3所示,把光標(biāo)放在指令塊處不動(dòng)2S左右,會(huì)彈出一個(gè)指令塊引腳指令使用的數(shù)據(jù)類型。
這里可以看到IN:DWORD,輸入為DWORD的32位數(shù)據(jù)類型,也就是雙字,那么這時(shí)候引用的是VD0,指針沒有偏移過,還是指向VB0地址起始的,指令使用的是雙字,所以引用的是VD0地址中的數(shù)據(jù),把VD0賦值給VD200。
圖3
3.指針偏移
初學(xué)者使用指針時(shí),對(duì)于指針偏移的理解最容易亂的。指針偏移是通過對(duì)指針存放的地址進(jìn)行運(yùn)算得到一個(gè)新的指針地址。
如圖4所示,按下M0.0把指針指向VB0的指針地址放在VD100中,如果這時(shí)候沒有接通I0.0,那么程序段3就會(huì)把VD0的數(shù)據(jù)傳送給VD200,如果接通了I0.0,那么程序段3就會(huì)把VD4的數(shù)據(jù)傳送給VD200。
指針地址加多少就是向上偏移多少,也可以減去一個(gè)偏移量,一般字節(jié)偏移1,字偏移2,雙字偏移4。如圖4中的程序段2,指針地址VD100+4=VD100,程序段中最開始的創(chuàng)建的指針是指向VB0,指針+4以后,指針指向偏移指向VB4。
圖4
02 案例應(yīng)用
案例1
如表1所示,按下M0.0的按鈕,把賦值數(shù)據(jù)傳送給賦值地址,例如第一次把VB0傳送給VB100,當(dāng)?shù)谒拇我院螅聪翸0.0按鈕,指針重新指向VB0,重新開始。
次數(shù) | 賦值數(shù)據(jù) | 賦值地址 |
1 | VB0 | VB100 |
2 | VB1 | VB100 |
3 | VB2 | VB100 |
4 | VB3 | VB100 |
表1
程序編寫如圖5所示,字節(jié)與字節(jié)之間地址相差1,編寫VD1000+1=VD1000的運(yùn)算程序,每次向上偏移1。
圖5
案例2
如表2所示,按下M0.0的按鈕,把賦值數(shù)據(jù)傳送給賦值地址,例如第一次把VW0傳送給VW100,當(dāng)?shù)谒拇我院螅聪翸0.0按鈕,指針重新指向VB0,重新開始。
次數(shù) | 賦值數(shù)據(jù) | 賦值地址 |
1 | VW0 | VBW00 |
2 | VB2 | VW100 |
3 | VB4 | VW100 |
4 | VB6 | VW100 |
表2
程序編寫如圖6所示,字與字之間地址相差2,編寫VD1000+2=VD1000的運(yùn)算程序,每次向上偏移2。
圖6
案例3
如表3所示,按下M0.0的按鈕,把賦值數(shù)據(jù)傳送給賦值地址,例如第一次把VD0傳送給VD100,當(dāng)?shù)谒拇我院螅聪翸0.0按鈕,指針重新指向VB0,重新開始。
次數(shù) | 賦值數(shù)據(jù) | 賦值地址 |
1 | VD0 | VD100 |
2 | VD4 | VD100 |
3 | VD8 | VD100 |
4 | VD12 | VD100 |
表3
程序編寫如圖7所示,雙字與雙字之間地址相差4,編寫VD1000+4=VD1000的運(yùn)算程序,每次向上偏移4。
圖7
案例4
如表4所示,按下M0.0的按鈕,把賦值數(shù)據(jù)傳送給賦值地址,例如第一次把VD0傳送給VD100,當(dāng)?shù)谒拇我院螅聪翸0.0按鈕,賦值地址清零,然后下一次重新開始賦值。
次數(shù) | 賦值數(shù)據(jù) | 賦值地址 |
1 | VD0 | VD100 |
2 | VD4 | VD108 |
3 | VD8 | VD116 |
4 | VD12 | VD124 |
表4
程序編寫如圖8所示,不管是輸入和輸出都可以通過指針做間接尋址,通過地址偏移可以給不通的地址賦值。
圖8
03 總結(jié)
本文章舉例了簡(jiǎn)單的IN和OUT的間接尋址,間接尋址的使用方式還有很多,可以用在形參子程序中使用,例如求多個(gè)數(shù)值的平均值,利用for循環(huán)和間接尋址就可以輕松解決這個(gè)需要多次運(yùn)算的問題,現(xiàn)在西門子200smart v2.8的CPU支持平均值指令,可以不需要自己寫程序。
審核編輯:劉清
-
西門子
+關(guān)注
關(guān)注
93文章
3008瀏覽量
115640 -
S7-200
+關(guān)注
關(guān)注
13文章
407瀏覽量
50330 -
for循環(huán)
+關(guān)注
關(guān)注
0文章
61瀏覽量
2493
原文標(biāo)題:西門子S7-200smart間接尋址的使用方法
文章出處:【微信號(hào):玩轉(zhuǎn)PLC工業(yè)機(jī)器人,微信公眾號(hào):玩轉(zhuǎn)PLC工業(yè)機(jī)器人】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論