間接尋址可分為兩大類(lèi)型:存儲(chǔ)器間接尋址和寄存器間接尋址。如圖1所示。
1、存儲(chǔ)器間接尋址
存儲(chǔ)器間接尋址的地址給定格式是:地址標(biāo)識(shí)符+指針。指針?biāo)甘敬鎯?chǔ)單元中所包含的數(shù)值,就是地址的確切數(shù)值單元。
2、寄存器間接尋址
寄存器間接尋址為通過(guò) CPU的地址寄存器AR1,AR2進(jìn)行尋址。AR1,AR2 均為 32 位寄存器,寄存器間接尋址只使用 32 位指針。
PLC的間接尋址方式間接尋址是指使用地址指針來(lái)存取存儲(chǔ)器中的數(shù)據(jù)。使用前,首先將數(shù)據(jù)所在單元的內(nèi)存地址放入地址指針寄存器中,然后根據(jù)此地址存取數(shù)據(jù)。S7-200CPU中允許使用指針進(jìn)行間接尋址的元器件有I、Q、V、M、S、T、C。
建立內(nèi)存地址的指針為雙字長(zhǎng)度(32位),故可以使用V、L、AC作為地址指針。必須采用雙字傳送指令(MOVD)將內(nèi)存的某個(gè)地址移入到指針當(dāng)中,以生成地址指針。指令中的操作數(shù)(內(nèi)存地址)必須使用“&”符號(hào)表示內(nèi)存某一位置的地址(長(zhǎng)度為32位)。例如:
MOVD&VB200,AC1
表示將VB200在存儲(chǔ)器的32位物理地址值送AC1。VB200是直接地址編號(hào),&為取地址符號(hào)。將本指令中&VB200改為&VW200或VD200,指令功能不變。
在使用指針存取數(shù)據(jù)的指令中,操作數(shù)前加有*時(shí)表示該操作數(shù)為地址指針。例如:
MOVW*AC1.AC0
表示將AC1作為內(nèi)存地址指針,把以AC1中內(nèi)容為起始地址的內(nèi)存單元的16位數(shù)據(jù)送到累加器AC0中。
西門(mén)子PLC間接尋址方法1、區(qū)域內(nèi)間接尋址
指針的最高位(第31位)x為0時(shí)為區(qū)域內(nèi)的間接尋址,此時(shí)區(qū)域標(biāo)示號(hào)rrr也為0,地址指針的格式與存儲(chǔ)器間接尋址的相同。下面是區(qū)域內(nèi)間接尋址的例子:
方括號(hào)內(nèi)為操作數(shù)的地址,它等于AR1中的地址值P#5.0加上逗號(hào)后面的地址偏移量,例如第3條指令中操作數(shù)的地址為P#5.0+P#2.3=P#7.3,即操作數(shù)為M7.3。
2、區(qū)域之間的間接尋址
指針的最高位(第31位)x = 1時(shí)為區(qū)域間的間接尋址,下面是區(qū)域間的間接尋址的例子:
P#M6.0對(duì)應(yīng)的二進(jìn)制數(shù)為2#1000 0011 0000 0000 0000 0000 0011 0000。因?yàn)榈刂分羔楶#M6.0已經(jīng)包含有區(qū)域信息(rrr=2#011表示M區(qū)),第3條指令“L W[AR1, P#50.0]”沒(méi)有必要再使用地址標(biāo)識(shí)符M。
用地址指針讀寫(xiě)字、字節(jié)或雙字時(shí),指針中小數(shù)點(diǎn)右邊的位編號(hào)必須為0,否則將會(huì)出錯(cuò)。