西門(mén)子S7系列PLC的尋址方式(2)-寄存器間接尋址
上一篇文章我們介紹了西門(mén)子S7系列PLC(300/400/1500)的尋址方式,講解了直接尋址(絕對(duì)尋址和符號(hào)尋址)及間接尋址的一種——存儲(chǔ)器間接尋址,今天這篇文章我們介紹下另一種間接尋址方式:寄存器間接尋址。

所謂寄存器間接尋址,是指通過(guò)CPU的地址寄存器(Address Register)進(jìn)行的尋址方式。S7-300/400系列PLC有兩個(gè)地址寄存器,AR1和AR2,其長(zhǎng)度均為32位,內(nèi)部存放32位的地址指針,指針指向要尋址的存儲(chǔ)單元。
我們先來(lái)看下寄存器間接尋址的指針格式(32位):

其中,第0~2位是被尋址地址的位(bit)編號(hào);第3~18位是被尋址地址的字節(jié)(Byte)編號(hào);第24~26位,是被尋址地址的區(qū)域標(biāo)識(shí)(編號(hào));第31位是尋址的類型,“0”表示區(qū)域內(nèi)間接尋址,“1”表示區(qū)域間間接尋址。
寄存器間接尋址可以分為兩種:區(qū)域內(nèi)尋址和區(qū)域間尋址,根據(jù)第31位的值來(lái)確定。
所謂區(qū)域內(nèi)尋址,是指指針中僅包含尋址的存儲(chǔ)區(qū)的字節(jié)編號(hào)和位編號(hào),存儲(chǔ)區(qū)的代碼在指令中給出。寄存器區(qū)域內(nèi)間接尋址的指針的第24~26位的區(qū)域標(biāo)識(shí)符為0,第31位也為0;
所謂區(qū)域間尋址,是指指針中不僅包含了尋址的存儲(chǔ)區(qū)的字節(jié)編號(hào)和位編號(hào),還包含了存儲(chǔ)區(qū)的標(biāo)識(shí)符(第24~26)代碼。存儲(chǔ)區(qū)標(biāo)識(shí)符用來(lái)指定尋址區(qū)域,比如:I、M、Q等,具體編號(hào)如下圖:

寄存器區(qū)域內(nèi)尋址的表達(dá)方式:存儲(chǔ)器標(biāo)識(shí)符[ARx,地址偏移量];
比如下面這段代碼:

前兩行將指針常數(shù)(P#5.0)加載到AR1中,第三行對(duì)M6.1進(jìn)行與運(yùn)算,結(jié)果存放到Q7.5中。指針常數(shù)P#5.0的二進(jìn)制數(shù)為:2#0000 0000 0000 0000 0000 0000 0010 1000,可見(jiàn)它的第24~26位及第31位均為0。由于指針中不包含存儲(chǔ)區(qū)標(biāo)識(shí)符信息,所以必須在程序中指定。
再來(lái)看看寄存器區(qū)域間尋址,其表達(dá)方式為:訪問(wèn)寬度[ARx,地址偏移量];
比如下面這段代碼:

P#M6.0對(duì)應(yīng)的二進(jìn)制值為:1000 0011 0000 0000 0000 0000 0011 0000。
前兩行代碼將位存儲(chǔ)器指針P#M6.0加載到AR1中,由于指針中包含了存儲(chǔ)區(qū)代碼(011),因此程序中不用寫(xiě)存儲(chǔ)區(qū)標(biāo)識(shí)符,只需要指定訪問(wèn)的寬度即可。上例中的第三行的代碼會(huì)將MW8的內(nèi)容裝載到累加器1(ACCU1)中。
順便說(shuō)一句,如果要使用寄存器指針訪問(wèn)一個(gè)字節(jié)、字或者雙字時(shí),必須保證指針的位編號(hào)為0。寄存器間接尋址相對(duì)來(lái)說(shuō)有些難度,建議在實(shí)踐中使用以加深理解。
相關(guān)參考文章:
西門(mén)子S7系列PLC的尋址方式(1)
官網(wǎng)提供本文PDF版本下載:
-
Origin(Pro):學(xué)習(xí)版的窗口限制【數(shù)據(jù)繪圖】 2020-08-07
-
如何卸載Aspen Plus并再重新安裝,這篇文章告訴你! 2020-05-29
-
CAD視口的邊框線看不到也選不中是怎么回事,怎么解決? 2020-06-04
-
教程 | Origin從DSC計(jì)算焓和比熱容 2020-08-31
-
CAD外部參照無(wú)法綁定怎么辦? 2020-06-03
-
CAD中如何將布局連帶視口中的內(nèi)容復(fù)制到另一張圖中? 2020-07-03
