0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

PLC指針類型與間接尋址詳解

工控論壇 ? 來源:工控論壇 ? 2023-02-03 11:23 ? 次閱讀

西門子S7-300和S7-400的編程中經(jīng)常需要調(diào)用一些系統(tǒng)功能或功能塊,在輸入參數(shù)時經(jīng)常碰到有指針類型的參數(shù),那么你對指針類型了解嗎?我第一次接觸指針一詞是在學(xué)習(xí)C語言的時候,指針和鏈表是C語言中的一個重點難點。在C語言中,指針即存儲器地址,在西門子PLC中的指針也是指地址。下面看看西門子POINTER類型的結(jié)構(gòu):

參數(shù)類型POINTER存儲下列信息

· DB編號(或0,如果數(shù)據(jù)沒有存儲在DB中)

· CPU中的存儲區(qū)域(下表給出了參數(shù)類型POINTER存儲器區(qū)的十六進制代碼)·

十六進制代碼 存儲區(qū) 描述
b#16#81 I 輸入?yún)^(qū)域
b#16#82 Q 輸出區(qū)域
b#16#83 M 位存儲區(qū)域
b#16#84 DB 數(shù)據(jù)塊
b#16#85 DI 背景數(shù)據(jù)塊
b#16#86 L 本地的數(shù)據(jù)(L堆棧)
b#16#87 V 先前的本地數(shù)據(jù)

數(shù)據(jù)的地址(格式為字節(jié).位)

STEP 7提供指針格式:p#memory_area byte.bit_address. (如果形式參數(shù)被聲明為參數(shù)類型POINTER,只需要指出存儲區(qū)域和地址。STEP 7將自動地重定輸入指針的格式。) 下面的實例說明如何為以M50.0開始的數(shù)據(jù)輸入?yún)?shù)類型POINTER:P#M50.0

存儲器間接尋址:

使用存儲器間接尋址的程序語句包含一條指令,后面跟有[地址]標識符,最后是一個(地址必須括在方括號內(nèi))。根據(jù)所用的地址標識符,該指令會將存儲于指定地址的數(shù)據(jù)解釋為字或雙字指針。完整的數(shù)據(jù)地址由地址標識符和指針構(gòu)成,如下例所示。間接尋址的優(yōu)點是能在程序執(zhí)行期間動態(tài)修改指令的數(shù)據(jù)地址。

存儲器間接尋址使用以下兩部分地址:

1. 地址標識符

對于由位邏輯運算尋址的位,可分配地址標識符I、Q、M、L、DIX或DBX。

對于由裝載指令尋址的字節(jié)、字和雙字,可使用存儲區(qū)I、Q、M、L、D和PI,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PIB、PIW、PID等形式的地址標識符。

對于由傳送指令尋址的字節(jié)、字和雙字,可使用存儲區(qū)I、Q、M、L、DB、DI和PQ,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PQB、PQW、PQD等形式的地址標識符。

要尋址定時器、計數(shù)器或塊,可使用T、C、DB、DI、FB、FC形式的區(qū)域標識符。

2. 括在方括號"[ ]"內(nèi)的字或雙字指針的地址

字指針 - 含有定時器(T)、計數(shù)器(C)、數(shù)據(jù)塊(DB、DI)或邏輯塊(FC、FB)的標識號的字。字指針是十進制整數(shù)。

雙字指針 - 指含有位、字節(jié)、字或雙字的確切位置的雙字。雙字指針的格式為:P#字節(jié).位。指針必須存儲在下列區(qū)域之一,才能進行存儲器間接尋址:

M - 位存儲器

L - 本地數(shù)據(jù)

D - 數(shù)據(jù)塊(DB或DI)

STAT 靜態(tài)數(shù)據(jù)(不是用于具有多重實例能力的塊的靜態(tài)數(shù)據(jù))

注意如果要尋址使用存儲器間接尋址的字節(jié)、字或雙字,請確保指針的位號為雙字格式0。

字指針實例:

L 5 //將指針值載入ACCU 1。T MW2 //將指針傳送到MW2中。L T[MW2] //將5號定時器的當前時間值載入ACCU 1。

L C[MW2] //將5號計數(shù)器的當前計數(shù)值載入ACCU 1。

OPN DB[MW2] //將數(shù)據(jù)塊DB5作為共享數(shù)據(jù)塊打開。

OPN DI[MW2] //將數(shù)據(jù)塊DB5作為背景數(shù)據(jù)塊打開。

雙字指針實例:

L P#8.7 //將指針值載入ACCU 1。T MD2 //將指針傳送到MD2中。A I [MD2] //掃描輸入位8.7的狀態(tài),并將其= Q [MD2] //信號狀態(tài)分配給輸出位Q 8.7。 區(qū)域內(nèi)寄存器間接尋址:

使用區(qū)域內(nèi)寄存器間接尋址的程序語句包含一條指令和以下組成部分:地址標識符[地址寄存器標識符,地址]。區(qū)域內(nèi)寄存器間接尋址使用以下兩部分地址:

1. 地址標識符

對于由位邏輯運算尋址的位,可以分配地址標識符I、Q、M、L、DIX或DBX。

對于由裝載指令尋址的字節(jié)、字和雙字,可使用存儲區(qū)I、Q、M、L、D和PI,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PIB、PIW、PID等形式的地址標識符。

對于由傳送指令尋址的字節(jié)、字和雙字,可使用存儲區(qū)I、Q、M、L、DB、DI和PQ,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PQB、PQW、PQD等形式的地址標識符。

2. 方括號"[ ]"中的內(nèi)容包括地址寄存器引用(AR1或AR2)、逗號分隔符","以及雙字指針。

雙字指針 - 指包含位、字節(jié)、字或雙字的部分地址的雙字。雙字指針的格式為:P#字節(jié).位。

注意請記住您現(xiàn)在使用的是兩個格式為"P#字節(jié).位"的指針。一個指針已被精確表示出來。另一個指針通過對地址寄存器AR1或AR2的引用來確定。如果要尋址字節(jié)、字或雙字,請確保指針的位號為0。使用寄存器間接尋址的語句不更改地址寄存器的內(nèi)容。

指針實例:

L P#8.7 //將指針值載入ACCU 1。LAR1 //用ACCU 1中的指針裝載AR1。A I [AR1, P#0.0] //檢查輸入位I 8.7并將有符號的狀態(tài)分配給Q 10.0。= Q [AR1, P#1.1] //確切地址8.7在AR1中。偏移量不對其產(chǎn)生影響。確切位置10.0由8.7 (AR1)加上1.1 (偏移量)得出,結(jié)果是10.0而不是9.8。

區(qū)域內(nèi)寄存器間接尋址實例:

A I [AR1,P#4.3] 對其位置是由AR1中的內(nèi)容加上4個字節(jié),再加上3個位計算得出的輸入位,執(zhí)行邏輯與運算。= DIX [AR2, P#0.0] 將RLO位狀態(tài)分配給位于AR2中的實例數(shù)據(jù)位。L IB [AR1, P#10.0] 將輸入字節(jié)載入ACCU 1中。地址由AR1的內(nèi)容加上十個字節(jié)計算得出。T LD [AR2,P#53.0] 將ACCU 1中的內(nèi)容傳送到本地雙字中(該雙字的位置由AR2的內(nèi)容加上53個字節(jié)計算得出)。

區(qū)域內(nèi)寄存器間接尋址的特點是:地址標示符在方括號前確定,方括號中的指針均為不含存儲區(qū)信息(如[AR1,P#4.3]中AR1=P#8.7,兩個指針都不含有存儲區(qū)信息),否則將會與方括號前的地址標示符表示的存儲區(qū)沖突。

跨區(qū)域寄存器間接尋址:

使用跨區(qū)域寄存器間接尋址的程序語句包含一條指令和以下組成部分:地址標識符[地址寄存器標識符,地址]。

跨區(qū)域寄存器間接尋址使用以下兩部分地址:

1. 對已尋址的數(shù)據(jù)對象(地址標識符)大小的規(guī)定數(shù)據(jù)對象大小規(guī)定 位(無規(guī)定表示是一個位)B 字節(jié)W 字D 雙字

2. 方括號"[ ]"中的內(nèi)容包括地址寄存器引用(AR1或AR2)、逗號分隔符","以及雙字指針。雙字指針 - 指包含位、字節(jié)、字或雙字的部分地址的雙字。指針具有以下區(qū)域內(nèi)格式:P#字節(jié).位。

注意事先必須已將跨區(qū)域雙字指針載入到由寄存器間接地址引用的地址寄存器中。跨區(qū)域雙字指針 - 包含位的部分地址(對于位邏輯指令)或字節(jié)、字或雙字的部分地址(對于裝載和傳送指令)的雙字。地址前面的區(qū)域標識符位于用來指定字節(jié)和位??鐓^(qū)域雙字指針格式為:P#區(qū)域標識符字節(jié).位。

對于由位邏輯指令尋址的位,可以分配跨區(qū)域指針區(qū)域標識符I、Q、M、DIX或DBX。

對于由裝載或傳送指令尋址的字節(jié)、字和雙字,可以分配跨區(qū)域指針區(qū)域標識符I、Q、M、DIX、DBX或P。 注意要在指針中指定外設(shè)輸入或PI區(qū)域,請以P#Px.y形式輸入指針。區(qū)域被指定為P。在跨區(qū)域指針中不能使用外設(shè)輸出PQ區(qū)域。請記住您正使用兩個指針:

作為偏移量,直接在地址中表示的區(qū)域內(nèi)雙字指針,例如P#4.0。

存儲在地址寄存器(AR1或AR2)中的跨區(qū)域雙字指針,例如P#Q4.0。

如果要訪問通過直接尋址方式進行尋址的字節(jié)、字或雙字,請確保這兩個指針的位號均為0。使用寄存器間接尋址的語句不更改地址寄存器的內(nèi)容。

跨區(qū)域寄存器間接尋址的第一個實例:

L P# I8.7 //將指針值和區(qū)域標識符載入ACCU 1。LAR1 //將存儲區(qū)I和地址8.7存入AR1。L P# Q8.7 //將指針偏移量和區(qū)域標識符載入ACCU 1。LAR2 //將存儲區(qū)Q和地址8.7存入AR2。A [AR1, P#0.0] //檢查輸入位I 8.7并將其信號狀態(tài)分配給輸出位Q 10.0。= [AR2, P#1.1] //偏移量0.0沒有任何作用。輸出位10.0由8.7 (AR2)加上1.1 (偏移量)得出,結(jié)果是10.0而不是9.8。跨區(qū)域寄存器間接尋址的第二個實例:

A I 0.0 JC M002 L P#M10.0 //將指針值和區(qū)域標識符載入ACCU 1。LAR1 //將存儲區(qū)M和地址10存入ACCU 1。JU M001 M002: L P#Q0.3 //將指針值和區(qū)域標識符載入ACCU 1。LAR1 //將存儲區(qū)Q和地址0.3存入ACCU 1。M001:A I 0.4 = [AR1, P#0.1] //I 0.0用于控制哪個指針用于此語句。將I 0.4的信號狀態(tài)分配給存儲器位M 10.1,或者分配給輸出Q 0.4。

跨區(qū)域寄存器間接尋址實例A [AR1,P#4.3],對于其位置是由AR1中的內(nèi)容加上4個字節(jié),再加上3個位計算得出的位,執(zhí)行邏輯與運算。位的存儲區(qū)在AR1的位24、25和26中指出。= [AR2, P#0.0] 將RLO位信號狀態(tài)分配給位于AR2中的位。位的存儲區(qū)在AR1的位24、25和26中指出。L B [AR1, P#10.0] 將字節(jié)(其位置由AR1的內(nèi)容加上10個字節(jié)計算得出)載入ACCU 1。位的存儲區(qū)在AR1的位24、25和26中指出。T D [AR2,P#53.0] 將ACCU 1的內(nèi)容傳送到雙字(該字的精確位置由AR2的內(nèi)容加上53個字節(jié)計算得出)。位的存儲區(qū)在AR1的位24、25和26中指出。

跨區(qū)域寄存器間接尋址的特點是:地址標示符在方括號前確定,方括號中的地址寄存器中包含存儲區(qū)信息(如[AR1,P#4.3]中AR1=P#Q0.3)。

區(qū)域內(nèi)寄存器間接尋址和跨區(qū)域寄存器間接尋址的使用相當靈活,可以根據(jù)需要選擇。由上面的說明可知,區(qū)域內(nèi)寄存器間接尋址是針對存儲區(qū)固定的間接尋址方式,尋址的存儲區(qū)是確定的。而跨區(qū)域寄存器間接尋址則在指令中不確定存儲區(qū),存儲區(qū)由地址寄存器中存儲的指針中的信息確定,因而尋址的存儲區(qū)是可變的。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • plc
    plc
    +關(guān)注

    關(guān)注

    5006

    文章

    13107

    瀏覽量

    461450
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10804

    瀏覽量

    210829
  • 西門子
    +關(guān)注

    關(guān)注

    93

    文章

    2996

    瀏覽量

    115488
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    478

    瀏覽量

    70491
  • Pointer
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    796

原文標題:80%以上的工程師,對PLC指針類型與間接尋址無從下手

文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    PLC里面的立即尋址、直接尋址、間接尋址你都搞懂了嗎?

    我們都知道西門子200plc有三種尋址方式:立即尋址、直接尋址間接尋址;這里主要給大家區(qū)分下直
    的頭像 發(fā)表于 01-04 15:20 ?1903次閱讀
    <b class='flag-5'>PLC</b>里面的立即<b class='flag-5'>尋址</b>、直接<b class='flag-5'>尋址</b>、<b class='flag-5'>間接</b><b class='flag-5'>尋址</b>你都搞懂了嗎?

    西門子plc間接尋址方法

    1.區(qū)域內(nèi)間接尋址 指針的最高位(第31位)x為0時為區(qū)域內(nèi)的間接尋址,此時區(qū)域標示號rrr也為0,地址
    發(fā)表于 12-07 15:51

    間接尋址的應(yīng)用

    介紹:本文介紹如何進行間接尋址,并舉例說明如何利用間接尋址來清內(nèi)存。
    發(fā)表于 07-01 11:56 ?14次下載

    變址間接尋址方式

    變址間接尋址方式   基址寄存器加變址寄存器間接尋址方式,是MCS-51指令集所獨有的,它是以程序計數(shù)器PC或數(shù)據(jù)指針DPTR作
    發(fā)表于 03-14 15:30 ?5193次閱讀

    plc間接尋址方式

    間接尋址是指使用地址指針來存取存儲器中的數(shù)據(jù)。使用前,首先將數(shù)據(jù)所在單元的內(nèi)存地址放入地址指針寄存器中,然后根據(jù)此地址存取數(shù)據(jù)。
    發(fā)表于 10-24 08:47 ?6125次閱讀

    PLC間接尋址與直接尋址

    存儲器間接尋址的地址給定格式是:地址標識符+指針。指針所指示存儲單元中所包含的數(shù)值,就是地址的確切數(shù)值單元。
    發(fā)表于 06-25 19:49 ?1681次閱讀
    <b class='flag-5'>PLC</b><b class='flag-5'>間接</b><b class='flag-5'>尋址</b>與直接<b class='flag-5'>尋址</b>

    plc尋址方式:立即尋址、直接尋址間接尋址

    我們都知道西門子200plc有三種尋址方式:立即尋址、直接尋址、間接尋址;這里主要給大家區(qū)分下直
    的頭像 發(fā)表于 09-25 11:50 ?2.2w次閱讀
    <b class='flag-5'>plc</b>的<b class='flag-5'>尋址</b>方式:立即<b class='flag-5'>尋址</b>、直接<b class='flag-5'>尋址</b>、<b class='flag-5'>間接</b><b class='flag-5'>尋址</b>

    S7-300間接尋址中的寄存器間接尋址詳解

    寄存器間接尋址是通過使用CPU內(nèi)部集成的兩個地址寄存器AR1和AR2存儲地址指針來實現(xiàn)的尋址方式,使用時分為內(nèi)部區(qū)域間接
    的頭像 發(fā)表于 11-20 17:38 ?1w次閱讀
    S7-300<b class='flag-5'>間接</b><b class='flag-5'>尋址</b>中的寄存器<b class='flag-5'>間接</b><b class='flag-5'>尋址</b><b class='flag-5'>詳解</b>

    地址寄存器間接尋址進行詳解

    關(guān)于間接尋址分為存儲器間接尋址和地址寄存器間接尋址,本文主要針對地址寄存器
    的頭像 發(fā)表于 01-30 15:17 ?4916次閱讀
    地址寄存器<b class='flag-5'>間接</b><b class='flag-5'>尋址</b>進行<b class='flag-5'>詳解</b>

    西門子PLC指針類型間接尋址教程

    在西門子S7-300和S7-400的編程中經(jīng)常需要調(diào)用一些系統(tǒng)功能或功能塊,在輸入?yún)?shù)時經(jīng)常碰到有指針類型的參數(shù),那么你對指針類型了解嗎?
    發(fā)表于 06-11 14:07 ?4819次閱讀

    如何區(qū)分西門子PLC的直接尋址間接尋址

    我們都知道西門子200plc有三種尋址方式:立即尋址、直接尋址、間接尋址;這里主要給大家區(qū)分下直
    的頭像 發(fā)表于 08-28 14:43 ?1611次閱讀
    如何區(qū)分西門子<b class='flag-5'>PLC</b>的直接<b class='flag-5'>尋址</b>和<b class='flag-5'>間接</b><b class='flag-5'>尋址</b>

    plc間接尋址有什么用?

    plc間接尋址有什么用? PLC間接尋址是一個非常重要的概念,它是一種用于訪問和控制
    的頭像 發(fā)表于 09-15 14:59 ?1384次閱讀

    PLC中為什么要間接尋址?直接尋址不行嗎?

    PLC中為什么要間接尋址?直接尋址不行嗎? PLC,也稱程序可編程控制器,是一種專門用于自動化控制的電子設(shè)備,廣泛應(yīng)用于各種工業(yè)領(lǐng)域中。在
    的頭像 發(fā)表于 09-15 14:59 ?1597次閱讀

    什么是PLC直接尋址間接尋址?

    什么是PLC直接尋址間接尋址?? PLC直接尋址間接
    的頭像 發(fā)表于 09-15 14:59 ?2345次閱讀

    PLC指針類型間接尋址如何使用

    對于由裝載或傳送指令尋址的字節(jié)、字和雙字,可以分配跨區(qū)域指針區(qū)域標識符I、Q、M、DIX、DBX或P。 注意要在指針中指定外設(shè)輸入或PI區(qū)域,請以P#Px.y形式輸入指針。
    發(fā)表于 10-18 09:21 ?447次閱讀