S7-1500 SCL PEEK 和 POKE 指令使用
PEEK 和 POKE 指令,可在不指定數(shù)據(jù)類型的情況下對(duì) Input區(qū)、Output區(qū)、M 存儲(chǔ)區(qū)、DB塊和PI/Q(物理輸入/輸出,僅S7-1500支持)讀取或?qū)懭?。通過 POKE_BLK 指令,還可以實(shí)現(xiàn)數(shù)據(jù)區(qū)域的復(fù)制或移動(dòng)。
指令適用條件:
只能用于 SCL 編程語言;
適用操作存儲(chǔ)區(qū)域,I、Q、M、DB、PI/Q(僅S7-1500支持);
DB必須是非優(yōu)化訪問的塊。
以下內(nèi)容使用TIA V17 Pro軟件測試。
PEEK 指令
PEEK 指令用來讀取存儲(chǔ)區(qū)數(shù)據(jù),支持位、字節(jié)、字、雙字、長字操作。PEEK指令將獲取的數(shù)據(jù)值以返回值的方式賦值給對(duì)應(yīng)的變量。
1、指令語法
新建SCL程序塊FB1,在基本指令->移動(dòng)操作->讀/寫存儲(chǔ)區(qū)內(nèi),調(diào)用PEEK指令。PEEK指令的語法,如圖1所示。
圖1. PEEK指令語法
PEEK指令管腳參數(shù)說明:
參數(shù) | 數(shù)據(jù)類型 | 含義 |
area | BYTE |
//可以選擇以下區(qū)域: 16#81:輸入 16#82:輸出 16#83:位存儲(chǔ)區(qū) 16#84:DB 16#1:外設(shè)輸入(僅 S7-1500) |
dbNumber | DINT、DB_ANY | //如果 AREA = DB,則為數(shù)據(jù)塊數(shù)量,否則為“0” |
byteoffset | DINT | //待讀取的地址 |
bitoffset | INT | //待讀取的位 |
函數(shù)值 | BOOL、BYTE、WORD、DWORD、LWORD | //PEEK指令讀取返回值 |
需要注意的是,在指令列表中只有PEEK和PEEK_BOOL兩個(gè)指令,PEEK相當(dāng)于PEEK_BYTE。
當(dāng)需要其他使用PEEK指令時(shí),可以在將指令拖拽到程序編輯區(qū)后手動(dòng)添加后綴“_WORD”或“_DWORD”,或者在程序中直接輸入指令然后通過選擇的方式選定,如圖2所示。
圖2. 輸入PEEK指令
2、示例程序
以PEEK_BOOL和PEEK_LWORD指令測試示例,如圖3所示。
圖3. PEEK指令使用示例
POKE 指令
1、指令語法
POKE 指令用來對(duì)存儲(chǔ)區(qū)數(shù)據(jù)寫入操作。不僅支持位、字節(jié)、字、雙字、長字操作,還可以實(shí)現(xiàn)區(qū)域數(shù)據(jù)移動(dòng)操作。
POKE 指令,可在指令內(nèi)直接將結(jié)果傳遞給對(duì)應(yīng)變量。
(1) POKE指令
新建SCL程序塊FB1,在基本指令->移動(dòng)操作->讀/寫存儲(chǔ)區(qū)內(nèi),調(diào)用POKE指令。POKE指令的語法,如圖4所示。
圖4. POKE指令語法
POKE指令管腳參數(shù)說明:
參數(shù) | 數(shù)據(jù)類型 | 含義 |
area | BYTE |
//可以選擇以下區(qū)域: 16#81:輸入 16#82:輸出 16#83:位存儲(chǔ)區(qū) 16#84:DB 16#2:外設(shè)輸出(僅 S7-1500) |
dbNumber | DINT、DB_ANY | //如果 AREA = DB,則為數(shù)據(jù)塊數(shù)量,否則為“0” |
byteoffset | DINT | //待寫入的地址 |
bitoffset | INT | //待寫入的位 |
value | BOOL、BYTE、WORD、DWORD、LWORD | //待寫入的值 |
說明:沒有POKE_BYTE、POKE_WORD、POKE_DWORD、POKE_LWORD指令。實(shí)現(xiàn)寫入字節(jié)、字、雙字、長字,取決于待寫入的變量value的數(shù)據(jù)類型,如圖4所示,不同的數(shù)據(jù)類型寫入的結(jié)果不同。
(2) POKE_BLK指令
指令功能:將源數(shù)據(jù)塊、I/O 或存儲(chǔ)區(qū)從 byteOffset 開始的"count"個(gè)字節(jié),寫入目標(biāo)數(shù)據(jù)塊、I/O 或存儲(chǔ)區(qū) byteOffset 開始的區(qū)域。
新建SCL程序塊FB1,在基本指令->移動(dòng)操作->讀/寫存儲(chǔ)區(qū)內(nèi),調(diào)用POKE_BLK指令。POKE_BLK指令的語法,如圖5所示。
圖5. POKE_BLK指令語法
POKE_BLK指令管腳參數(shù)說明:
參數(shù) | 數(shù)據(jù)類型 | 含義 |
area_src | BYTE |
//可以在源存儲(chǔ)區(qū)中選擇以下區(qū)域: 16#81:Input 16#82:Output 16#83:位存儲(chǔ)區(qū) 16#84:DB |
dbNumber_src | DINT、DB_ANY | //如果 AREA = DB,則為源存儲(chǔ)區(qū)中的數(shù)據(jù)塊數(shù)量,否則為“0” |
byteoffset_src | DINT | //源存儲(chǔ)區(qū)中待讀取的地址 |
area_dest |
可以在目的存儲(chǔ)區(qū)中選擇以下區(qū)域: 16#81:Input 16#82:Output 16#83:位存儲(chǔ)區(qū) 16#84:DB |
|
dbNumber_dest | //如果 AREA = DB,則為目的存儲(chǔ)區(qū)中的數(shù)據(jù)塊數(shù)量,否則為“0” | |
byteoffset_dest | INT | //目的存儲(chǔ)區(qū)中待寫入的地址 |
count | DINT | //待復(fù)制的字節(jié)數(shù)目 |
注意:dbNumber_src 和 dbNumber_dest 參數(shù)必須屬于同一種數(shù)據(jù)類型。即,兩個(gè)變量必須為 DINT 數(shù)據(jù)類型或 DB_ANY 數(shù)據(jù)類型。
2、示例程序
(1) POKE 指令示例
POKE_BOOL和POKE指令測試示例,如圖6所示。
圖6. POKE指令使用示例
(2) POKE_BLK指令
POKE_BLK指令測試示例,如圖7所示。
圖7. POKE_BLK指令使用示例
審核編輯:劉清
-
編程語言
+關(guān)注
關(guān)注
10文章
1956瀏覽量
36660 -
SCL
+關(guān)注
關(guān)注
1文章
243瀏覽量
17558 -
S7-1500
+關(guān)注
關(guān)注
3文章
301瀏覽量
6857
原文標(biāo)題:S7-1500 SCL PEEK 和 POKE 指令使用
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于S7-1500的運(yùn)動(dòng)控制原理及實(shí)例

S7-1500系統(tǒng)架構(gòu)及特點(diǎn)

西門子S7-1500憑什么秒殺S7-300/400?

關(guān)于S7-1200或S7-1500 PLC的通信
S7-1500和S7-1500之間S7通信
S7-1500 CPU支持與其它S7-1500 CPU進(jìn)行直接數(shù)據(jù)交換
WinCC與 S7-1200/S7-1500 PLC之間的通信解析
S7-1500之間S7通信實(shí)例

評(píng)論