乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      S7-200間接尋址

       航1jfsl52loy81 2018-09-25
      ?S7-200間接尋址
      對指令的操作數(shù)的指定方式,我將其理解為“尋址”。
      下面將以我個人的理解對西門子S7-200的尋址方式進(jìn)行描述,如有不當(dāng)之處,還請廣大讀者指正。
      在程序中絕大部分的指令都帶有操作數(shù),所謂的操作數(shù),是執(zhí)行這一指令時被這一指令加以操作、處理的數(shù)值。對指令的操作數(shù)的指令方式大致的總結(jié)一下,可以概括為如下幾個類型:
      1:指令的操作數(shù)為“立即數(shù)”,(如:15、16#F、2#1111等、、、、、、)。
      LD M0.0
      MOVW +255, VW0
      +I +45, VW0
      這是一條加法指令,被加數(shù)為:255、加數(shù)為45執(zhí)行這條指令后計算出來的“和”存放在VW0這一存儲器內(nèi)。
      LD M0.0
      MOVB 15, VB0
      這是一條傳指令,譯為:將15傳送至存儲器VB0內(nèi)。
      2:指令的操作數(shù)沒有直接的給出,而是給出它所在的地址。
      LD M0.0
      MOVW VW0, VW4
      -I VW2, VW4
      這是一條減法指令,譯為:將存儲器VW0內(nèi)的數(shù)值減去存儲器VW2內(nèi)的數(shù)值,將“差”存放在存儲器VW4內(nèi)。
      3:指令的操作數(shù)沒有直接的給出,而是給出它所在的地址的“地址”,在S7-200中,將這種尋址方式稱之為“指針尋址”。
      下面,我們一起來學(xué)習(xí)一下關(guān)于指針的使用方法:
      在使用指針進(jìn)行間接尋址的過程中,會涉及到的兩個符號:
      &:建立指針(進(jìn)行間接訪問的區(qū)域)
      *:讀取指針(讀取指針間接指定的地址)
      下面是使用指針的一般步驟:
      1:建立指針
      建立指針需要使用雙字傳送指令,如下所示:
      LD M0.0
      MOVD &MB0, VD10
      譯為:在VD10建立指針,指針指向被間接訪問的首地址MB0。
      在建立指針時需要注意如下幾個問題:
      ①可以進(jìn)行間接訪問的區(qū)域,包括如下幾個區(qū)域:I、Q、M、S、V、T(當(dāng)前值)、C(當(dāng)前值)。在S7-200中位狀態(tài)是不能進(jìn)行間接指定的,所以這里特別強(qiáng)調(diào)只是訪問定時器及計數(shù)器的當(dāng)前值,而不是其位狀態(tài)。
      ②可以作為建立指針的區(qū)域,包括如下幾個區(qū)域:V、L、及累加器AC1至AC3。且只能是雙字(32bit)類型的地址。
      ③在建立指針時在存儲器前加“&”這個符號的表示進(jìn)行間接訪問的區(qū)域的首地址,所以除定時器T及計數(shù)器C外都必須是以字節(jié)的形式出現(xiàn)的。
      2:讀取指針
      在讀取指針時,有如下幾種不同的情況出現(xiàn):
      ①以字節(jié)的形式讀取指針:
      LD M0.0
      MOVD &MB0, VD10
      MOVB *VD10, VB30
      譯為:在VD10建立指針,指針指向以MB0為首地址的地址,讀取在指針VD10所指向的首地址開始的一個字節(jié)(即以MB0開始的一個字節(jié),很明顯就是MB0本身),所以,讀取指針時將MB0放到VB30。
      ②以字的形式讀取指針:
      LD M0.0
      MOVD &MB0, VD10
      MOVW *VD10, MW20
      譯為:在VD10建立指針,指針指向以MB0為首的地址,讀取在
      指針VD10所指向的首地址開始的一個字(即以MB0開始的一個字,很明顯就是MW0),所以,讀取指針時將MW0放到MW20。
      ③以雙字的形式讀取指針:
      LD M0.0
      MOVD &VB0, VD10
      MOVD *VD10, VD40
      譯為:在VD10建立指針,指針指向以VB0為首的地址,讀取在指針VD10所指向的首地址開始的一個雙字(即以VB0開始的一個雙字,很明顯就是VD0),所以,讀取指針時將VD0放到VD40。
      3:修改指針
      修改指針是在使用指針尋址中關(guān)健的一部分,修改指針是將指針指向的首地址進(jìn)行適當(dāng)?shù)钠?,使之指向我們需要訪問的地址,這樣我們可以比較方便的使用在這一存儲區(qū)的某一具體地址,使程序的靈活性有所增加。
      修改指針的方法大致的可以概括為如下幾種:
      ①使用加法或減法指令,對指針進(jìn)行指定常數(shù)作為偏移量的修改指針。
      ②使用加“1”或減“1”指令,對指針進(jìn)行1個單位(字節(jié))的偏移。
      下面將以實際情況為例來說明修改批指針的方法:
      例1:
      網(wǎng)絡(luò)1:
      LD M0.0
      MOVD &VB0, VD10
      MOVD *VD10, VD40
      +D 4, VD10
      網(wǎng)絡(luò)2:
      LD M0.1
      MOVD *VD10, VD44
      譯為:在VD10建立指針,指針指向以VB0為首的地址,讀取在指針VD10所指向的首地址開始的一個雙字(即以VB0開始的一個雙字,很明顯就是VD0),所以,讀取指針時將VD0放到VD40。然后對指針進(jìn)行修改,對其指定4個單位的偏移量,即指針此時指向的首地址為VB4。
      在下一網(wǎng)絡(luò)中又以雙字的形式讀取指針。所以,此時讀取指針是將以VB4為首的一個雙字傳送至VD44(即VD4傳送至VD44)。
      例2:
      網(wǎng)絡(luò)1:
      LD M0.0
      MOVD &VB0, VD10
      MOVB *VD10, MB0
      INCD VD10
      網(wǎng)絡(luò)2:
      LD M0.1
      MOVB *VD10, MB1
      譯為:在VD10建立指針,指針指向以VB0為首的地址,讀取在指針VD10所指向的首地址開始的一個字節(jié)(即以VB0開始的一個字節(jié),很明顯就是VB0),所以,讀取指針時將VB0放到MB0。然后對指針進(jìn)行修改,對其進(jìn)行一個單位(字節(jié))的偏移,即指針此時指向的首地址為VB1。
      在下一網(wǎng)絡(luò)中又以字節(jié)的形式讀取指針。所以,此時讀取指針是將以VB1為首的一個字節(jié)傳送至MB1(即VB1傳送至MB1)。
      在程序中,如果希望以連續(xù)的形式去間接訪問地址(即:讀取VB0后希望下一次讀取的是VB1、讀取VW0后希望下一次讀取的是VW2、讀取VD0后希望下一次讀取的是VD4),修改指針時,需要注意以下問題:
      ①讀取下一個字節(jié):
      網(wǎng)絡(luò)1:
      LD M0.0
      MOVD &VB0, VD10
      MOVB *VD10, VB100
      +D 1, VD10
      網(wǎng)絡(luò)2:
      LD M0.1
      MOVB *VD10, VB100
      第一次讀指針時,讀取的是VB0。
      第二次讀指針時,讀取的是VB1。
      ②讀取下一個字:
      網(wǎng)絡(luò)1:
      LD M0.0
      MOVD &VB0, VD10
      MOVW *VD10, VW100
      +D 2, V
      VD10
      網(wǎng)絡(luò)2:
      LD M0.1
      MOVW *VD10, VW100
      第一次讀指針時,讀取的是VW0。
      第二次讀指針時,讀取的是VW2。
      ③讀取下一個雙字:
      網(wǎng)絡(luò)1:
      LD M0.0
      MOVD &VB0, VD10
      MOVD *VD10, VD100
      +D 4, VD10
      網(wǎng)絡(luò)2:
      LD M0.1
      MOVD *VD10, VD100
      第一次讀指針時,讀取的是VD0。
      第二次讀指針時,讀取的是VD4。
      綜上所述,在以連續(xù)方式讀取指針時:
      ⑴讀取下一個字節(jié),修改指針時“加1”。
      ⑵讀取下一個字,修改指針時“加2”。
      ⑶讀取下一個雙字,修改指針時“加4”。
      下面,給出兩個應(yīng)用實例,讀者可自行分析其工作原理。
      例1:
      網(wǎng)絡(luò)1:
      LD I1.0
      EU
      MOVD &VB0, VD100
      S M0.0, 1
      網(wǎng)絡(luò)2:
      LD M0.0
      FOR VW1000, 1, 10
      網(wǎng)絡(luò)3:
      LD Always_On:SM0.0
      MOVW VW1000, VW1002
      +I VW1000, VW1002
      MOVW VW1002, *VD100
      +D 2, VD100
      網(wǎng)絡(luò)4:
      NEXT
      網(wǎng)絡(luò)5:
      LDW>= VW1000, 10
      R M0.0, 1
      例2:
      網(wǎng)絡(luò)1:
      LD M0.0
      MOVD &VB300, VD131
      MOVW 0, VW129
      網(wǎng)絡(luò)2:
      LD M0.0
      FOR VW125, 1, 6
      網(wǎng)絡(luò)3:
      LD SM0.0
      MOVB *VD131, AC0
      +I AC0, VW129
      +D 1, VD131
      網(wǎng)絡(luò)4:
      NEXTS7-200cpu允許使用指針對下述存儲區(qū)進(jìn)行間接尋址:I, Q, V, M, S, T和C。但不能對獨(dú)立的位或模擬量進(jìn)行間接尋址。指針為雙字值,用來存放另一個存儲器的地址,只能用V, L或累加器AC1,AC2和AC3作指針。為了生成指針,必須用雙字傳送指令(MOVD)將某個位置的地址移入另一個位置或累加器作為指針。
      MOVD &VB200,AC1
      MOVW *AC1,AC0

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多