公司新聞
西門子S7-300和S7-400指針類型與間接尋址
發布時間: 2024-04-14 10:42 更新時間: 2024-10-30 14:14
在西門子S7-300和S7-400的編程中經常需要調用一些系統功能或功能塊,在輸入參數時經常碰到有指針類型的參數,那么你對指針類型了解嗎?我次接觸指針一詞是在學習C語言的時候,指針和鏈表是C語言中的一個重點難點。在C語言中,指針即存儲器地址,在西門子PLC中的指針也是指地址。下面看看西門子POINTER類型的結構:
存儲器間接尋址使用以下兩部分地址:1. 地址標識符對于由位邏輯運算尋址的位,可分配地址標識符I、Q、M、L、DIX或DBX。對于由裝載指令尋址的字節、字和雙字,可使用存儲區I、Q、M、L、D和PI,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PIB、PIW、PID等形式的地址標識符。 對于由傳送指令尋址的字節、字和雙字,可使用存儲區I、Q、M、L、DB、DI和PQ,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PQB、PQW、PQD等形式的地址標識符。要尋址定時器、計數器或塊,可使用T、C、DB、DI、FB、FC形式的區域標識符。
2. 括在方括號"[ ]"內的字或雙字指針的地址字指針 - 含有定時器(T)、計數器(C)、數據塊(DB、DI)或邏輯塊(FC、FB)的標識號的字。字指針是十進制整數。雙字指針 - 指含有位、字節、字或雙字的確切位置的雙字。雙字指針的格式為:P#字節.位。指針必須存儲在下列區域之一,才能進行存儲器間接尋址:M - 位存儲器L - 本地數據D - 數據塊(DB或DI)STAT 靜態數據(不是用于具有多重實例能力的塊的靜態數據)注意如果要尋址使用存儲器間接尋址的字節、字或雙字,請確保指針的位號為雙字格式0。
字指針實例:L 5 //將指針值載入ACCU 1。T MW2 //將指針傳送到MW2中。L T[MW2] //將5號定時器的當前時間值載入ACCU 1。L C[MW2] //將5號計數器的當前計數值載入ACCU 1。OPN DB[MW2] //將數據塊DB5作為共享數據塊打開。OPN DI[MW2] //將數據塊DB5作為背景數據塊打開。
雙字指針實例:L P#8.7 //將指針值載入ACCU 1。T MD2 //將指針傳送到MD2中。A I [MD2] //掃描輸入位8.7的狀態,并將其= Q [MD2] //信號狀態分配給輸出位Q 8.7。
指針實例: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中。偏移量不對其產生影響。確切位置10.0由8.7 (AR1)加上1.1 (偏移量)得出,結果是10.0而不是9.8。
區域內寄存器間接尋址實例:A I [AR1,P#4.3] 對其位置是由AR1中的內容加上4個字節,再加上3個位計算得出的輸入位,執行邏輯與運算。= DIX [AR2, P#0.0] 將RLO位狀態分配給位于AR2中的實例數據位。L IB [AR1, P#10.0] 將輸入字節載入ACCU 1中。地址由AR1的內容加上十個字節計算得出。T LD [AR2,P#53.0] 將ACCU 1中的內容傳送到本地雙字中(該雙字的位置由AR2的內容加上53個字節計算得出)。區域內寄存器間接尋址的特點是:地址標示符在方括號前確定,方括號中的指針均為不含存儲區信息(如[AR1,P#4.3]中AR1=P#8.7,兩個指針都不含有存儲區信息),否則將會與方括號前的地址標示符表示的存儲區沖突。
跨區域寄存器間接尋址: 使用跨區域寄存器間接尋址的程序語句包含一條指令和以下組成部分:地址標識符[地址寄存器標識符,地址]。跨區域寄存器間接尋址使用以下兩部分地址:1. 對已尋址的數據對象(地址標識符)大小的規定數據對象大小規定 位(無規定表示是一個位)B 字節W 字D 雙字2. 方括號"[ ]"中的內容包括地址寄存器引用(AR1或AR2)、逗號分隔符","以及雙字指針。雙字指針 - 指包含位、字節、字或雙字的部分地址的雙字。指針具有以下區域內格式:P#字節.位。注意事先必須已將跨區域雙字指針載入到由寄存器間接地址引用的地址寄存器中??鐓^域雙字指針 - 包含位的部分地址(對于位邏輯指令)或字節、字或雙字的部分地址(對于裝載和傳送指令)的雙字。地址前面的區域標識符位于用來指定字節和位??鐓^域雙字指針格式為:P#區域標識符字節.位。對于由位邏輯指令尋址的位,可以分配跨區域指針區域標識符I、Q、M、DIX或DBX。對于由裝載或傳送指令尋址的字節、字和雙字,可以分配跨區域指針區域標識符I、Q、M、DIX、DBX或P。 注意要在指針中指定外設輸入或PI區域,請以P#Px.y形式輸入指針。區域被指定為P。在跨區域指針中不能使用外設輸出PQ區域。請記住您正使用兩個指針:作為偏移量,直接在地址中表示的區域內雙字指針,例如P#4.0。存儲在地址寄存器(AR1或AR2)中的跨區域雙字指針,例如P#Q4.0。如果要訪問通過直接尋址方式進行尋址的字節、字或雙字,請確保這兩個指針的位號均為0。使用寄存器間接尋址的語句不更改地址寄存器的內容。
跨區域寄存器間接尋址的個實例:L P# I8.7 //將指針值和區域標識符載入ACCU 1。LAR1 //將存儲區I和地址8.7存入AR1。L P# Q8.7 //將指針偏移量和區域標識符載入ACCU 1。LAR2 //將存儲區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??鐓^域寄存器間接尋址的第二個實例:
十六進制代碼 | 存儲區 | 描述 |
b#16#81 | I | 輸入區域 |
b#16#82 | Q | 輸出區域 |
b#16#83 | M | 位存儲區域 |
b#16#84 | DB | 數據塊 |
b#16#85 | DI | 背景數據塊 |
b#16#86 | L | 本地的數據(L堆棧) |
b#16#87 | V | 先前的本地數據 |
存儲器間接尋址使用以下兩部分地址:1. 地址標識符對于由位邏輯運算尋址的位,可分配地址標識符I、Q、M、L、DIX或DBX。對于由裝載指令尋址的字節、字和雙字,可使用存儲區I、Q、M、L、D和PI,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PIB、PIW、PID等形式的地址標識符。 對于由傳送指令尋址的字節、字和雙字,可使用存儲區I、Q、M、L、DB、DI和PQ,分配IB、IW、ID、DBB、DBW、DBD、DIB、DIW、DID、PQB、PQW、PQD等形式的地址標識符。要尋址定時器、計數器或塊,可使用T、C、DB、DI、FB、FC形式的區域標識符。
2. 括在方括號"[ ]"內的字或雙字指針的地址字指針 - 含有定時器(T)、計數器(C)、數據塊(DB、DI)或邏輯塊(FC、FB)的標識號的字。字指針是十進制整數。雙字指針 - 指含有位、字節、字或雙字的確切位置的雙字。雙字指針的格式為:P#字節.位。指針必須存儲在下列區域之一,才能進行存儲器間接尋址:M - 位存儲器L - 本地數據D - 數據塊(DB或DI)STAT 靜態數據(不是用于具有多重實例能力的塊的靜態數據)注意如果要尋址使用存儲器間接尋址的字節、字或雙字,請確保指針的位號為雙字格式0。
字指針實例:L 5 //將指針值載入ACCU 1。T MW2 //將指針傳送到MW2中。L T[MW2] //將5號定時器的當前時間值載入ACCU 1。L C[MW2] //將5號計數器的當前計數值載入ACCU 1。OPN DB[MW2] //將數據塊DB5作為共享數據塊打開。OPN DI[MW2] //將數據塊DB5作為背景數據塊打開。
雙字指針實例:L P#8.7 //將指針值載入ACCU 1。T MD2 //將指針傳送到MD2中。A I [MD2] //掃描輸入位8.7的狀態,并將其= Q [MD2] //信號狀態分配給輸出位Q 8.7。
指針實例: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中。偏移量不對其產生影響。確切位置10.0由8.7 (AR1)加上1.1 (偏移量)得出,結果是10.0而不是9.8。
區域內寄存器間接尋址實例:A I [AR1,P#4.3] 對其位置是由AR1中的內容加上4個字節,再加上3個位計算得出的輸入位,執行邏輯與運算。= DIX [AR2, P#0.0] 將RLO位狀態分配給位于AR2中的實例數據位。L IB [AR1, P#10.0] 將輸入字節載入ACCU 1中。地址由AR1的內容加上十個字節計算得出。T LD [AR2,P#53.0] 將ACCU 1中的內容傳送到本地雙字中(該雙字的位置由AR2的內容加上53個字節計算得出)。區域內寄存器間接尋址的特點是:地址標示符在方括號前確定,方括號中的指針均為不含存儲區信息(如[AR1,P#4.3]中AR1=P#8.7,兩個指針都不含有存儲區信息),否則將會與方括號前的地址標示符表示的存儲區沖突。
跨區域寄存器間接尋址: 使用跨區域寄存器間接尋址的程序語句包含一條指令和以下組成部分:地址標識符[地址寄存器標識符,地址]。跨區域寄存器間接尋址使用以下兩部分地址:1. 對已尋址的數據對象(地址標識符)大小的規定數據對象大小規定 位(無規定表示是一個位)B 字節W 字D 雙字2. 方括號"[ ]"中的內容包括地址寄存器引用(AR1或AR2)、逗號分隔符","以及雙字指針。雙字指針 - 指包含位、字節、字或雙字的部分地址的雙字。指針具有以下區域內格式:P#字節.位。注意事先必須已將跨區域雙字指針載入到由寄存器間接地址引用的地址寄存器中??鐓^域雙字指針 - 包含位的部分地址(對于位邏輯指令)或字節、字或雙字的部分地址(對于裝載和傳送指令)的雙字。地址前面的區域標識符位于用來指定字節和位??鐓^域雙字指針格式為:P#區域標識符字節.位。對于由位邏輯指令尋址的位,可以分配跨區域指針區域標識符I、Q、M、DIX或DBX。對于由裝載或傳送指令尋址的字節、字和雙字,可以分配跨區域指針區域標識符I、Q、M、DIX、DBX或P。 注意要在指針中指定外設輸入或PI區域,請以P#Px.y形式輸入指針。區域被指定為P。在跨區域指針中不能使用外設輸出PQ區域。請記住您正使用兩個指針:作為偏移量,直接在地址中表示的區域內雙字指針,例如P#4.0。存儲在地址寄存器(AR1或AR2)中的跨區域雙字指針,例如P#Q4.0。如果要訪問通過直接尋址方式進行尋址的字節、字或雙字,請確保這兩個指針的位號均為0。使用寄存器間接尋址的語句不更改地址寄存器的內容。
跨區域寄存器間接尋址的個實例:L P# I8.7 //將指針值和區域標識符載入ACCU 1。LAR1 //將存儲區I和地址8.7存入AR1。L P# Q8.7 //將指針偏移量和區域標識符載入ACCU 1。LAR2 //將存儲區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??鐓^域寄存器間接尋址的第二個實例:
A I 0.0 JC M002 L P#M10.0 //將指針值和區域標識符載入ACCU 1。LAR1 //將存儲區M和地址10存入ACCU 1。JU M001 M002: L P#Q0.3 //將指針值和區域標識符載入ACCU 1。LAR1 //將存儲區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。
其他新聞
- 西門子plc S7-200 300 400各指示燈含義的詳解 2024-10-30
- 西門子S7-200 SMART 案例應用之中位值平均濾波算法程序 2024-10-30
- 西門子S7-200PLC特殊繼電器用法! 2024-10-30
- 西門子S7-200模擬量使用中的16個基本問題,一定要搞清楚 2024-10-30
- 西門子S7-200SMART PLC 編程過程80%都會遇到的問題 2024-10-30
- 西門子S7-200/300/400通訊方式匯總,超級全面! 2024-10-30
- 西門子S7-200脈沖輸出 2024-10-30
- 不帶網口的超薄筆記本如何與西門子S7-200SMART PLC通訊連接? 2024-10-30
- 西門子 S7-200 程序轉 S7-1200 工具 2024-10-30
- 60個常見西門子S7-200問題集錦 2024-10-30
- 西門子S7-200——使用入門 2024-10-30
- 西門子S7-200老機型大用處 常見問題解析 2024-10-30
- 西門子S7-200 SMART PLC之間如何通過指令實現S7通訊 2024-10-30
- 西門子1200與西門子S7-300的區別是什么?西門子1200與西門子S7-200的區別有哪些? 2024-10-30
- 西門子S7-200smart如何做運動控制的暫停功能? 2024-10-30
產品分類
聯系方式
- 電 話:17838383235
- 經理:徐嘉泉
- 手 機:17838383235
- 微 信:17838383235