當前位置: 首頁 > 工業(yè)控制產(chǎn)品 > 自動化控制 > PLC可編程控制器
發(fā)布日期:2022-04-26 點擊率:1051 品牌:西門子_Siemens
初度觸摸指針一詞是在學習C言語的時分,指針和鏈表是C言語中的一個要害難點。在C言語中,指針即存儲器地址,在西門子PLC中的指針也是指地址。下面看看西門子POINTER類型的構造:
參數(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ù)地址由地址標識符和指針構成,如下例所示。直接尋址的利益是能在程序實施時期動態(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的狀況,并將其
= Q [MD2] //信號狀況分配給輸出位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é).位。
留心請記住您如今運用的是兩個格局為"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并將有符號的狀況分配給Q 10.0。
= Q [AR1, P#1.1] //切本地址8.7在AR1中。偏移量不對其發(fā)作影響。切當方位10.0由8.7 (AR1)加上1.1 (偏移量)得出,效果是10.0而不是9.8。
區(qū)域內(nèi)寄存器直接尋址實例
A I [AR1,P#4.3] 對其方位是由AR1中的內(nèi)容加上4個字節(jié),再加上3個位核算得出的輸入位,實施邏輯與運算。
= DIX [AR2, P#0.0] 將RLO位狀況分配給坐落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。
留心要在指針中指定外設輸入或PI區(qū)域,請以P#Px.y辦法輸入指針。區(qū)域被指定為P。在跨區(qū)域指針中不能運用外設輸出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并將其信號狀況分配給輸出位Q 10.0。
= [AR2, P#1.1] //偏移量0.0沒有任何效果。輸出位10.0由8.7 (AR2)加上1.1 (偏移量)得出,效果是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的信號狀況分配給存儲器位M 10.1,或許分配給輸出Q 0.4。
跨區(qū)域寄存器直接尋址實例
A [AR1,P#4.3] 關于其方位是由AR1中的內(nèi)容加上4個字節(jié),再加上3個位核算得出的位,實施邏輯與運算。位的存儲區(qū)在AR1的位24、25和26中指出。
= [AR2, P#0.0] 將RLO位信號狀況分配給坐落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ū)是可變的。
下一篇: PLC、DCS、FCS三大控
上一篇: MATLAB和Simulink在航