西門子S7-200SMART PLC來說,尋址可分為(wei) 直接尋址和間接尋址,直接尋址就是直接對數據進行賦值,那麽(me) 間接尋址主要是用於(yu) 什麽(me) 地方?直接尋址與(yu) 間接尋址它們(men) 之間有何區別?下麵就帶大家來學習(xi) 間接尋址使用。
一、直接尋址與(yu) 間接尋址區別
直接尋址就是直接對數據進行賦值,間接尋址主要用於(yu) 需要在程序中修改地址的場合,特別是處理數據內(nei) 容比較多的情況,使用間接尋址編程靈活,節省程序空間。
方式不同:
1、直接尋址:在指令格式的地址的字段中直接指出操作數在內(nei) 存的地址。
2、間接尋址:指令地址字段的形式地址D不是操作數的真正地址,而是操作數地址的指示器,或者說是D單元的內(nei) 容才是操作數的有效地址。
特點不同:
1、直接尋址:操作數的地址直接給出而不需要經過某種變換,在指令中直接給出參與(yu) 運算的操作數及運算結果所存放的主存地址,即在指令中直接給出有效地址。
2、間接尋址:需要以寄存器符號的形式來表示,且在寄存器名稱前麵加上間接尋址符號“*”。
二、間接尋址說明
(1)間接尋址使用指針訪問存儲(chu) 器中的數據,
(2)指針是包含另一個(ge) 存儲(chu) 單元地址的雙字存儲(chu) 單元。隻能將V存儲(chu) 單元、L存儲(chu)
單元或累加器寄存器(AC1、AC2、AC3)用作指針。
(3)要創建指針,必須使用“移動雙字”指令,將間接尋址的存儲(chu) 單元地址移至指針位置。指針隻能對以下存儲(chu) 區進行間接訪問:I、Q、V、M、S、AI、AQ、SM、T(僅(jin) 限當前值)和C(僅(jin) 限當前值)﹔不能對單個(ge) 的位地址、HC、L存儲(chu) 區和累加器進行間接尋址。
三、間接尋址使用方法
使用間接尋址的方式存取數據主要分為(wei) 以下三個(ge) 步驟來實現:
(1)建立指針
使用間接尋址之前,應創建一個(ge) 指針。指針以雙字的形式存儲(chu) 要訪問的存儲(chu) 器的地址,隻能用V存儲(chu) 器、L存儲(chu) 器或者累加器AC作為(wei) 指針。建立指針時,用雙字傳(chuan) 送指令MOVD將需要間接尋址的存儲(chu) 器起始地址送到指針中。指針的輸入數應該以“&”符號開頭來表明存儲(chu) 區的地址,注意不是其內(nei) 容將移動到指令的輸出操作數中。
(2)指針偏移
通過加減乘除運算指令使指針偏移,比如將VD100加上4,則此時VD100指向VB4。
(3)讀取指針
操作數前加“*”號,表示指令中的操作數是一個(ge) 指針。
將指針指向的地址存儲(chu) 的數據調取處出來,通過*VD100提取數據(*是取值符),見下圖,就是把VB4的值傳(chuan) 送給VB200。
四、取值符說明
“*+指針”使用在字節的位置,訪問的是指針指向地址開始的字節變量。
“*+指針”使用在字的位置,訪問的是指針指向地址開始的字變量。
“*+指針”使用在雙字的位置,訪問的是指針指向地址開始的雙字變量。
五、間接尋址案例
案例:通過指針的方式,當按下I0.1按鈕時:
把VB4的值複製到VB200。
把VW10的值複製到VW300。
把VD20的值複製到VD400。
(1)建立指針
(2)將指針通過ADD_DI(加整數指令)進行加4,從(cong) 而指針指向VB4,後再將VB4通過MOV_B(字節傳(chuan) 送指令)把VB4傳(chuan) 送給VB200。
(3)將指針通過ADD_DI(加整數指令)進行加6,從(cong) 而指針指向VB10,後再將VW10通過MOV_W(字節傳(chuan) 送指令)把VW10傳(chuan) 送給VW300。
(4)將指針通過ADD_DI(加整數指令)進行加10,從(cong) 而指針指向VB20,後再將VD20通過MOV_DW(字節傳(chuan) 送指令)把VD20傳(chuan) 送給VD400。
六、演示效果
通過狀態圖表分別把VB4、VW10、VD20寫(xie) 入數值
按下I0.1按鈕,通過狀態圖表監控VB200、VW300、VD400的值是否是VB4、VW10、VD20傳(chuan) 送過去的值。
七、間接尋址使用注意事項
(1)間接尋址指針表示大小為(wei) :32位=雙字
(2)建立指針偏移時,是按照偏移數量進行累計,而不是和指針指向的起始地址進行累計。