1. <del id="sqmd4"></del>
      <object id="sqmd4"></object>
      1. <object id="sqmd4"></object>
          加入收藏 在線留言 聯系我們
          關注微信
          手機掃一掃 立刻聯系商家
          全國服務熱線13185520415
          公司新聞
          西門子S7-1200編程入門教程之PEEK/POKE使用
          發布時間: 2024-03-25 14:47 更新時間: 2024-12-02 08:00
          觀看西門子S7-1200編程入門教程之PEEK/POKE使用視頻

            在工業控制中,經常會使用到變址運算的功能。那在S7-1200中,我們需要怎么實現變址的效果呢?PEEK/POKE指令為我們提供了一個實現方法。

              讓我們先認識一下PEEK/POKE指令吧。

              在S7-1200里面,PEEK/POKE指令僅在SCL中可用。指令位于“基本指令”--“移動操作”--“讀/寫存儲器”中。如“圖1”所示。


          圖1 PEEK/POKE指令位置

              PEEK:讀取存儲地址,可讀取Byte、Word、Dword類型的數據寄存器;

              PEEK_BOOL:讀取位存儲地址,可讀取Bool類型的數據寄存器;

              指令格式如下:

              #Peeker := PEEK(AREA := 16#84,

                                          DBNUMBER := 1,

                                          BYTEOFFSET := 2);

            #Peeker_BOOL := PEEK_BOOL(AREA := 16#84,

                                                          DBNUMBER := 1,

                                                          BYTEOFFSET := 2,

                                                          BITOFFSET := 1);   

           其中#Peeker、#Peeker_BOOL為PEEK指令讀取返回出來的寄存器值。

              AREA為讀取的寄存器區域:16#81對應輸入I區;16#82對應輸出Q區;16#83對應位存儲區M區;16#84對應數據塊DB區。

              DBNUMBER 為讀取的數據塊DB編號。當AREA為“16#84”時,如讀取“DB10”,則“DBNUMER”為10。如果AREA不是“16#84”,則DBNUMER應設為“0”。

              BYTEOFFSET為字節偏移量,決定讀取寄存器的起始地址。如讀取DB10.DBD56,則BYTEOFFSET為“56”。

              BITOFFSET為位偏移量,PEEK_BOOL指令中需要填寫。如讀取DB1.DBX5.3,則BYTEOFFSET為“5”,BITOFFSET為“3”。


              POKE(AREA := 16#84,

                          DBNUMBER := 1,

                          BYTEOFFSET := 2,

                          VALUE := BYTE#7);

              POKE(AREA := 16#84,

                      DBNUMBER := 1,

                      BYTEOFFSET := 2,

                      BITOFFSET := 4,

                      VALUE := TRUE);

             其中AREA、DBNUMBER、BYTEOFFSET、BITOFFSET這些引腳和PEEK指令是一致的。VALUE為寫入到寄存器中的值。


              下面我們以一個案例來講解PEEK和POKE的使用吧。


              例程1:求和DB1數據塊中,從DB1.DBW0~DB1.DBW18十個字的數據之和。

                     首先,我們新建一個DB1,并在DB1里添加10個INT變量,如圖2所示。由于PEEK需要指向juedui地址,因此需要將DB塊屬性中的“優化的塊訪問”取消。


          圖2 數據塊DB1內容

              然后,我們新建一個FC功能,來編寫求和程序,求和程序代碼如下圖所示。


          圖3 PEEK求和程序代碼

              Zui后,運行看看我們的結果吧。

          圖片

          圖4 PEEK求和程序運行

              

              例程2:將M0.5~M1.2六個位地址值傳送至DB2.DBX0.0~DB2.DBX0.5中;

                  同例1一樣方法新建DB2。

                  新建一個FC功能,編寫程序,程序代碼如下圖所示。


          圖5 PEEK/POKE數據批量傳送程序

          程序運行結果如下:

          圖片

          圖6 PEEK/POKE數據批量傳送運行結果


          聯系方式

          • 電  話:13510737515
          • 聯系人:董海波
          • 手  機:13185520415
          • 微  信:13185520415