干貨!尋址方式詳解
高天宇
發(fā)布于2018-06-13 17:55
1558
0
標(biāo)簽:尋址方式
分類:尋址方式從大的方面可以分成直接尋址和間接尋址。
直接尋址就像甲要和乙說話直接叫乙的名字就可以了,甲直接和乙建立聯(lián)。
間接尋址就像甲要和乙說話,而乙在另外一個(gè)城市,甲就寫了一封信通過郵遞員送給乙,甲通過郵遞員間接和乙建立聯(lián)系,這就叫間接尋址。間接尋址中指針就充當(dāng)了郵遞員的角色。
直接尋址分為:絕對(duì)地址尋址,符號(hào)尋址
間接尋址分為:存儲(chǔ)器間接尋址,寄存器間接尋址。
一、直接尋址
直接尋址是簡(jiǎn)單的尋址方法,也是編程中常用的尋址方式。
①絕對(duì)地址尋址
絕對(duì)地址尋址就是直接調(diào)用要使用的地址
示例:
I0.0 Q1.0 MW0
②符號(hào)尋址
符號(hào)尋址就是通過符號(hào)表中的絕對(duì)地址的命名進(jìn)行尋址
示例:
用下圖中的I_Motor_Start進(jìn)行尋址。
二、間接尋址
間接尋址是比較復(fù)雜的尋址方式,也是我們這里重點(diǎn)講解的地方,間接尋址需重點(diǎn)理解指針的概念。
指針:理解指針主要需要理解指針的兩個(gè)特性。
A.存儲(chǔ)性:存儲(chǔ)性指的是指針也是一段存儲(chǔ)空間,它的存儲(chǔ)內(nèi)容是地址。
B.指向性:因?yàn)橹羔槾娣诺膬?nèi)容是地址,那么指針中存放的是哪一個(gè)地址,我們就說指針指向了這個(gè)地址所對(duì)應(yīng)的存儲(chǔ)空間,這就是指針的指向性。
A.存儲(chǔ)器間接尋址
【A1】16位指針尋址:
1)、16位指針存儲(chǔ)空間
16位指針存儲(chǔ)空間是16位,2個(gè)字節(jié),通過這2個(gè)字節(jié)的空間來存放變量的地址。
2)、16位指針尋址范圍
16位指針只能對(duì)計(jì)時(shí)器(T),計(jì)數(shù)器(C),數(shù)據(jù)塊(DB,DI)的號(hào),程序塊(FB,FC)的號(hào)進(jìn)行尋址,也就是這2個(gè)字節(jié)的存儲(chǔ)空間中只能存放計(jì)時(shí)器的編號(hào),計(jì)數(shù)器的編號(hào),數(shù)據(jù)塊的編號(hào),程序塊的編號(hào)。
3)、16位指針尋址表示格式
16位指針尋址表示格式為:區(qū)域標(biāo)示符[16位地址指針]
示例:
DB [MW0] //表示對(duì)DB塊進(jìn)行尋址,MW0中如果存儲(chǔ)的是1,那么該尋址結(jié)果為DB1,也就是通過該指令找到了DB1數(shù)據(jù)塊。
T [MW2] //表示對(duì)計(jì)時(shí)器進(jìn)行尋址,MW2中如果存放的是2,那么該尋址結(jié)果為T2,也就是通過該指令找到了計(jì)時(shí)器T2。
4)、16位指針尋址程序示例
例1:
L 2 //將2進(jìn)行裝載
T MW 0 //將2傳送到MW0
A I 0.0 //如果I0.0 = True
L S5T#10S //裝載時(shí)間
SD T [MW0] //T開始計(jì)時(shí)
例2:
L 1 //將1進(jìn)行裝載
T MW 0 //將1傳送到MW0
OPN DB [MW 0] //打開DB1
L 10 //將10進(jìn)行裝載
T DBW 0 //將10傳送到DB1.DBW0中
L DBW 0 //將DB1.DBW0進(jìn)行裝載
T MW 2 //將DB1.DBW0傳送到MW2中
【A2】32位指針尋址
1)、32位指針存儲(chǔ)空間
32位指針存儲(chǔ)空間是32位,4個(gè)字節(jié),通過這4個(gè)字節(jié)的空間來存放變量的地址。
2)、 32位指針尋址范圍
32位指針能對(duì)I、Q、M、L、數(shù)據(jù)塊的位、字節(jié)、字、雙字進(jìn)行尋址,也就是這4個(gè)字節(jié)的存儲(chǔ)空間中能對(duì)上述存儲(chǔ)類型中的位、字節(jié)、字、雙字的地址進(jìn)行存儲(chǔ)。
3)、32位指針存儲(chǔ)格式
4)、32位指針尋址表示格式
32位指針尋址表示格式為:地址存儲(chǔ)器標(biāo)示符[32位地址指針]
示例:
I[MD0] //I表示輸入存儲(chǔ)區(qū),MD0存儲(chǔ)地址信息。
Q[MD4] //Q表示輸出存儲(chǔ)區(qū),MD4存儲(chǔ)地址信息。
5)、32位指針三種尋址方法
①直接輸入10進(jìn)制數(shù)尋址(復(fù)雜不直觀的尋址方式,不推薦使用)。
②將輸入的10進(jìn)制數(shù)左移3位進(jìn)行尋址(比較直觀的尋址方式)。
③利用 P#字節(jié).位 格式進(jìn)行尋址(直觀方便的尋址方式,推薦使用)。
6)、32位指針三種尋址方法舉例
例1 :直接輸入10進(jìn)制數(shù)尋址
該程序?qū)崿F(xiàn)的是兩個(gè)數(shù)相加的功能。
這里我們要重點(diǎn)理解為什么第六句將10傳送到了MW4中,而不是MW32中,為什么第八句將15傳送到了MW6中,而不是MW48中。
這是因?yàn)?2,和48存放到指針中是按照32位二進(jìn)制數(shù)進(jìn)行存放的,下面我們通過將48存放到MD24來進(jìn)行舉例說明
由上圖可知將48放進(jìn)MD24則MW[MD24]指向了MW6 例2:左移3為進(jìn)行尋址
由于將10進(jìn)制數(shù)對(duì)應(yīng)的2進(jìn)制數(shù)左移三位后,字節(jié)存儲(chǔ)區(qū)的二進(jìn)制數(shù)和該10進(jìn)制數(shù)對(duì)應(yīng)的2進(jìn)制數(shù)又相同了,而位存儲(chǔ)區(qū)變?yōu)?,所以這樣的尋址要比例1的尋址方式顯得更為直觀,便于使用和理解。 例3:以 P#字節(jié).位 格式進(jìn)行尋址
通過這個(gè)實(shí)例我們可以發(fā)現(xiàn)直接使用P#字節(jié).位的尋址方式是直觀方便的。
B.寄存器間接尋址
寄存器間接尋址使用的是CPU的地址寄存器AR1和AR2
B1)、尋址格式
區(qū)域標(biāo)示符[AR1/AR2,P#X]
注:
①AR1/AR2表示地址寄存器AR1或者AR2,地址寄存器中只能存放地址。
②P#X表示偏移量X是偏移具體數(shù)值。
B2)、寄存器間接尋址示例
作者: 馬樂
本文為原創(chuàng)內(nèi)容,如需轉(zhuǎn)載請(qǐng)注明出處,違者必究!
推薦課程:
西門子S7-200SMART PLC編程應(yīng)用入門
西門子S7-300應(yīng)用精講