<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發網

      電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
      搜索: 您現在的位置: 電子開發網 >> 電子開發 >> 梯形圖實例 >> 正文

      西門子200SMART之簡接尋址學習,指針與間接尋址,冒泡排序

      作者:佚名    文章來源:本站原創    點擊數:    更新時間:2023/8/8
      在PLC里面有兩種尋址方式,一種是直接尋址,另一種是間接尋址。
      間接尋址是指用指針來訪問存儲區的數據。指針以雙字的形式存儲其它存儲區的地址,只能將V存儲單元、L存儲單元或累加寄存器(AC1、AC2、AC3)用作指針。

      創建指針時,必須使用“移動雙字”指令,將間接尋址的存儲單元地址移至指針位置。;用“&”符號加上要訪問的存儲區地址可建立一個指針,當指令中的操作數是指針時,應該在操作數前加上“*”號。

      1.建立指針

       

      建立指針記得加“&”;將VB100的地址存放到VD1000內。

      2.指針偏移

       

      按字節尋址,就+1;

      按字尋址,就+2;

      按雙字或浮點數尋址,就+4;

      3.取指針

       

      4.程序監控

       

      1)按下M0.0,執行字節偏移,此時在VB101輸入“10”,VB3000的數據即為“10”,然后復位M0.0。2)按下M0.1,執行字偏移,此時在VW102輸入“50”,VW4000的數據即為“50”,然后復位M0.1。3)按下M0.2,執行雙字偏移,此時在VD104輸入“80”,VD5000的數據即為“80”,然后復位M0.2。


      程序實例(干貨)

      實例1:通過指針間接尋址改變定時器的3種不同定時時間。

       

       

       



      實例2:通過指針間接尋址找一組數據的最值(大和小)和平均值。主程序

       

      子程序

       

      程序的監控圖就不貼出來了,其實重點就在子程序的第二段,每循環一次,就做一次比較,如果比較條件滿足,就將大值和小值暫存到LD10和LD14中,直到循環到最后一次,此時最大值和最小值已經找出來了,平均值就是將每循環一次的值進行累加,然后再除以數據個數,這里我就不展開仔細的分析了,可以參考一下最后一個案例,冒泡排序執行原理。

      實例3:通過指針間接尋址改變5個計數器的計數值。

       

       

       

      案例4,冒泡排序,從小排到大。

      主程序,排8組數據。

       

       

      子程序

       

      冒泡排序算法解析:

      八組數據:分別是20.0;365.0;7.0;7.0;210.5;7.6;15.6;22.8。

      1.首先將要排列的數據個數-2(8-2),然后存放到LW10中;再將這個值附給外循環的FINAL。

      2.第一個外循環的執行的次數即為0~6(7次)。

      3.INDX:假定 INIT 值為 0,FINAL 值為 6,則 FOR 指令和 NEXT 指令之間的指令將執行 7 次,INDX 值遞增:0,1, 2, 3, 4.5.6。

      第一次外循環(執行7次內循環)

      第一次內循環

      20.0;365.0;7.0;7.0;210.5;7.6;15.6;22.8;(20.0<365.0,位置不變)

      第二次內循環

      20.0;7.0;365.0;7.0;210.5;7.6;15.6;22.8;(7.0<365.0,位置改變)

      第三次內循環

      20.0;7.0;7.0;365.0;210.5;7.6;15.6;22.8;(7.0<365.0,位置改變)

      第四次內循環

      20.0;7.0;7.0;210.5;365.0;7.6;15.6;22.8;(210.5<365.0,位置改變)

      第五次內循環

      20.0;7.0;7.0;210.5;7.6;365.0;15.6;22.8;(7.6<365.0,位置改變)

      第六次內循環

      20.0;7.0;7.0;210.5;7.6;15.6;365.0;22.8;(15.6<365.0位置改變)

      第七次內循環

      20.0;7.0;7.0;210.5;7.6;15.6;22.8;365.0;(22.8<365.0位置改變,找到最大值),即最大值365.0。

      第二次外循環(執行6次內循環)

      第一次內循環

      7.0;20.0;7.0;210.5;7.6;15.6;22.8;365.0;(7.0<20.0,位置改變)

      第二次內循環

      7.0;7.0;20.0;210.5;7.6;15.6;22.8;365.0;(7.0<20.0,位置改變)

      第三次內循環

      7.0;7.0;20.0;210.5;7.6;15.6;22.8;365.0;(20.0<210.5,位置不變,接下來就是210.5跟后面的數進行比較)

      第四次內循環

      7.0;7.0;20.0;7.6;210.5;15.6;22.8;365.0;(7.6<210.5,位置改變)

      第五次內循環

      7.0;7.0;20.0;7.6;15.6;210.5;22.8;365.0;(15.6<210.5,位置改變)

      第六次內循環

      7.0;7.0;20.0;7.6;15.6;22.8;210.5;365.0;(22.8<210.5,位置改變,找到第二個值),即第二大值210.5。

      第三次外循環(執行5次內循環)

      第一次內循環

      7.0;7.0;20.0;7.6;15.6;22.8;210.5;365.0;(7.0=7.0,這里的排序就不變,假設第一個值為8.0,8.0>7.0,則位置改變)

      第二次內循環

      7.0;7.0;20.0;7.6;15.6;22.8;210.5;365.0;(7.0<20.0,位置改變)

      第三次內循環

      7.0;7.0;7.6;20.0;15.6;22.8;210.5;365.0;(7.6<20.0,位置改變)

      第四次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(15.6<20.0,位置改變)

      第五次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(20.0<22.8,位置不變,找出第三個值),即第三大值22.8。

      第四次外循環(執行4次內循環)

      第一次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(7.0=7.0,位置不變)

      第二次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(7.0<7.6,位置不變)

      第三次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(7.6<15.6,位置不變)

      第四次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(15.6<20.0,位置不變,找出第四個值),即最第四大值20.0。

      第五次外循環(執行3次內循環)

      第一次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(7.0=7.0,位置不變)

      第二次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(7.0<7.6,位置不變)

      第三次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(7.6<15.6,位置不變,此時找出第五個值),即第五大值15.6。

      第六次外循環(執行2次內循環)

      第一次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(7.0=7.0,位置不變)

      第二次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(7.0<7.6,位置不變,此時找出第六個值),即第六大值7.6。

      第七次外循環(執行1次內循環)

      第一次內循環

      7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0;(7.0=7.0,位置不變,此時找出第七個值),即第七大值7.0。

      那么最后的那個數顯然就是最小值了。

      最后由小到大依次排列出來的結果(7.0;7.0;7.6;15.6;20.0;22.8;210.5;365.0)。

      其實這是一種冒泡排序法,熟悉計算機語言的小伙伴就應該比較了解這種算法,至于冒泡算法的具體原理和說明,請各位小伙伴自行百度一下,這里就不再贅述了。

      程序執行原理:

      第一次外循環

      第一次內循環

      LW8=0,AC1=0*4,AC2=0+4,AC0=0,AC2=4;LD0偏移0和4,即VD1000和VD1004做比較(>),由于VD1000=20.0不大于VD1004=365.0;則程序6不執行,排序不改變(即20.0;365.0;7.0;7.0;210.5;7.6;15.6;22.8;)。

      第二次內循環

      LW8=1,AC1=1*4,AC2=4+4,AC0=4,AC2=8;LD0偏移4和8,即VD1004和VD1008做比較(>),由于VD1004=365.0>VD1008=7.0;

      則程序6執行,*AC1(VD1004=365.0)的值存放到TEMP里(TEMP=365.0),然后*AC2(VD1008=7.0)把值傳給*AC1(VD1004=7.0),最后將TEMP的值傳給*AC2(VD1008),此時VD1004=7.0,VD1008=365.0,排序發生變化(即20.0;7.0;365.0;7.0;210.5;7.6;15.6;22.8;)。

      第三次內循環

      LW8=2,AC1=2*4,AC2=8+4,AC0=8,AC2=12;LD0偏移8和12,即VD1008和VD1012做比較(>),由于VD1008=365.0>VD1012=7.0,則程序6執行,*AC1(VD1008=365.0)的值存放到TEMP里(TEMP=365.0),然后*AC2(VD1012=7.0)把值傳給*AC1(VD1008=7.0),最后將TEMP的值傳給*AC2(VD1012),此時VD1008=7.0,VD1012=365.0,排序發生變化(即20.0;7.0;7.0;365.0;210.5;7.6;15.6;22.8;)。

      第四次內循環

      LW8=3,AC1=3*4,AC2=12+4,AC0=12,AC2=16;LD0偏移12和16,即VD1012和VD1016做比較(>),由于VD1012=365.0>VD1016=210.5,

      則程序6執行,*AC1(VD1012=365.0)的值存放到TEMP里(TEMP=365.0),然后*AC2(VD1016=210.5)把值傳給*AC1(VD1012=210.5),最后將TEMP的值傳給*AC2(VD1016),此時VD1012=210.5,VD1016=365.0,排序發生變化(即20.0;7.0;7.0;210.5;365.0;7.6;15.6;22.8;)。

      第五次內循環

      LW8=4,AC1=4*4,AC2=16+4,AC0=16,AC2=20;LD0偏移16和20,即VD1016和VD1020做比較(>),由于VD1016=365.0>VD1020=7.6,

      則程序6執行,*AC1(VD1016=365.0)的值存放到TEMP里(TEMP=365.0),然后*AC2(VD1020=7.6)把值傳給*AC1(VD1016=7.6),最后將TEMP的值傳給*AC2(VD1020),此時VD1016=7.6,VD1020=365.0,排序發生變化(即20.0;7.0;7.0;210.5;7.6;365.0;15.6;22.8;)。

      第六次內循環

      LW8=5,AC1=5*4,AC2=20+4,AC0=20,AC2=24;LD0偏移20和24,即VD1020和VD1024做比較(>),由于VD1020=365.0>VD1024=15.6,

      則程序6執行,*AC1(VD1020=365.0)的值存放到TEMP里(TEMP=365.0),然后*AC2(VD1024=15.6)把值傳給*AC1(VD1020=15.6),最后將TEMP的值傳給*AC2(VD1024),此時VD1020=15.6,VD1024=365.0,排序發生變化(即20.0;7.0;7.0;210.5;7.6;15.6;365.0;22.8;)。

      第七次內循環

      LW8=6,AC1=6*4,AC2=24+4,AC0=24,AC2=28;LD0偏移24和28,即VD1024和VD1028做比較(>),由于VD1024=365.0>VD1028=22.8,

      則程序6執行,*AC1(VD1024=365.0)的值存放到TEMP里(TEMP=365.0),然后*AC2(VD1028=22.8)把值傳給*AC1(VD1024=22.8),最后將TEMP的值傳給*AC2(VD1028),此時VD1024=22.8,VD1028=365.0,排序發生變化(即20.0;7.0;7.0;210.5;7.6;15.6;22.8;365.0;)。最后找到了最大值,此時VD1028=365.0。

      下面的循環就不在贅述,原理同上。

      Tags:簡接尋址,指針,200SMART  
      責任編輯:admin
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網友評論
      推薦文章
      最新推薦
      關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 久久―日本道色综合久久| 色综合久久久无码网中文| 亚洲婷婷第一狠人综合精品| 一本一本久久A久久综合精品| 久久久久亚洲AV综合波多野结衣 | 亚洲AV综合色区无码另类小说| 国内精品综合久久久40p| 亚洲国产精品综合久久网各| 色综合天天综合网国产国产人| 天天综合色天天综合| 亚洲综合色区中文字幕| 国产成人精品综合| 99v久久综合狠狠综合久久| 狠狠色狠狠色综合久久| 久久99亚洲综合精品首页| 亚洲综合一区二区三区四区五区 | 狠狠狠色丁香婷婷综合久久俺| 色狠狠色狠狠综合天天| 久久婷婷五月综合尤物色国产| 久久亚洲高清综合| 狠狠色婷婷丁香综合久久韩国 | 色噜噜狠狠成人中文综合| 伊人网综合在线视频| 亚洲AV成人潮喷综合网| 色综合一区二区三区| 亚洲综合无码无在线观看| 亚洲欧美国产国产综合一区| 色综合天天做天天爱| 亚洲av综合av一区二区三区| 伊人色综合一区二区三区影院视频| 91精品国产色综合久久不| 国产色丁香久久综合| 天天影视色香欲综合久久| 亚洲欧美日韩综合久久久久| 亚洲欧洲av综合色无码| 五月婷婷亚洲综合| 亚洲国产天堂久久综合网站| 97久久天天综合色天天综合色| 久久综合AV免费观看| 综合无码一区二区三区| 99久久婷婷国产综合亚洲|