西門子SCL編程入門教程連載(11)-POKE指令
上一篇文章我們介紹了PEEK指令,它是用來讀取數(shù)據(jù)的指令。除了數(shù)據(jù)的讀取,SCL還提供了數(shù)據(jù)寫入的指令——POKE。今天這篇文章,我們來學習下POKE指令的用法。

POKE指令用來將某一個存儲區(qū)地址的數(shù)據(jù)寫入到另一個存儲區(qū)地址,無須指定數(shù)據(jù)類型。
可以在【基本指令(Basic instructions)】-【移動操作(move operations)】-【讀寫內(nèi)存(Read/Write memory)】中找到該指令,如下圖:

將POKE指令添加到程序塊中的初始狀態(tài)如下:

可以看到,POKE指令有四個參數(shù):area ,dbNumber,byteOffset和value,各參數(shù)的含義如下:
1、area:字節(jié)型數(shù)據(jù)(Byte),用來指定訪問存儲區(qū)的類型。其取值包括如下內(nèi)容:16#81表示輸入緩存區(qū)(I)、16#82表示輸出緩存區(qū)(Q)、16#83表示位存儲區(qū)(M)、16#84表示數(shù)據(jù)塊(DB)、16#1表示外設輸入(PI)。其中,16#84只能訪問“標準的”數(shù)據(jù)塊;16#1對外設的讀取,只能在S7-1500系列PLC中使用。
2、dbNumber:雙整型數(shù)據(jù)(DINT),用來指定數(shù)據(jù)塊的編號,僅在訪問數(shù)據(jù)塊時使用;訪問其它存儲區(qū)時設置為0;
3、byteOffse:雙整型數(shù)據(jù)(DINT),用來指定寫入數(shù)據(jù)的地址偏移量;
4、value:可以為字節(jié)型、整型、雙整型數(shù)據(jù),用來表示要寫入的數(shù)據(jù)值及類型。必須為變量,不能為常量。POKE指令根據(jù)value的數(shù)據(jù)類型來決定寫入多少個字節(jié)。
舉個例子:
使用POKE指令將位存儲區(qū)MB100的值寫入到輸出緩存區(qū)QB10,SCL代碼如下:

如果是操作整型或字類型的數(shù)據(jù),只需要改變value的數(shù)據(jù)類型。例如下面的代碼將MW102的值寫入到輸出緩存區(qū)QW12:

同樣的道理,下面的代碼將MD90的值寫入到DB5.DBD10中:

如果要操作布爾型數(shù)據(jù),則需要使用POKE_BOOL指令。從指令列表中添加該指令的初始狀態(tài)如下:

該指令有五個參數(shù):area ,dbNumber,byteOffset,bitOffset和value。其中:
1、area,dbNumber,byteOffset與POKE指令相同;
2、bitOffset:整型數(shù)據(jù)(INT),用來指定要寫入的位的偏移;
3、value:要寫入的地址或布爾數(shù)據(jù)常數(shù);
舉個例子:將M0.0的值寫入到Q1.5,可以使用下面的代碼:

除了POKE和POKE_BOOL,SCL語言還提供POKE_BLK用來進行較大數(shù)據(jù)的移動與拷貝。名稱中的“BLK“為Block的縮寫,即數(shù)據(jù)塊的意思。
從指令列表中添加POKE_BLK的初始狀態(tài)如下:

可以看到,該指令有7個參數(shù),其中:
1、area_src:字節(jié)型數(shù)據(jù)(Byte),用來指定源數(shù)據(jù)存儲區(qū)。其取值包括如下內(nèi)容:16#81表示輸入緩存區(qū)(I)、16#82表示輸出緩存區(qū)(Q)、16#83表示位存儲區(qū)(M)、16#84表示數(shù)據(jù)塊(DB);
2、dbNumber_src:雙整型數(shù)據(jù)(DINT),用來指定源數(shù)據(jù)塊的編號,僅在訪問數(shù)據(jù)塊時使用,訪問其它存儲區(qū)時設置為0;
3、byteOffset_src:雙整型數(shù)據(jù)(DINT),用來指定源數(shù)據(jù)存儲區(qū)中寫入數(shù)據(jù)的地址偏移量;
4、area_dest:字節(jié)型數(shù)據(jù)(Byte),用來指定目標數(shù)據(jù)存儲區(qū)。其取值包括如下內(nèi)容:16#81表示輸入緩存區(qū)(I)、16#82表示輸出緩存區(qū)(Q)、16#83表示位存儲區(qū)(M)、16#84表示數(shù)據(jù)塊(DB);
5、dbNumber_dest:雙整型數(shù)據(jù)(DINT),用來指定目標數(shù)據(jù)塊的編號,僅在訪問數(shù)據(jù)塊時使用,訪問其它存儲區(qū)時設置為0;
6、byteOffset_dest:雙整型數(shù)據(jù)(DINT),用來指定目標數(shù)據(jù)存儲區(qū)中寫入數(shù)據(jù)的地址偏移量;
7、count:雙整型數(shù)據(jù)(DINT),用來指定需要拷貝的字節(jié)數(shù);
舉個例子:
將DB100.DBB0開始的20個字節(jié)拷貝到DB102.DBB40開始的20個字節(jié),代碼如下:

好了,關于POKE指令就先介紹到這里。
-
Origin(Pro):學習版的窗口限制【數(shù)據(jù)繪圖】 2020-08-07
-
如何卸載Aspen Plus并再重新安裝,這篇文章告訴你! 2020-05-29
-
OriginPro:學習版申請及過期激活方法【數(shù)據(jù)繪圖】 2020-08-06
-
CAD視口的邊框線看不到也選不中是怎么回事,怎么解決? 2020-06-04
-
教程 | Origin從DSC計算焓和比熱容 2020-08-31
-
Aspen Plus安裝過程中RMS License證書安裝失敗的解決方法,親測有效! 2021-10-15
-
CAD外部參照無法綁定怎么辦? 2020-06-03
-
CAD中如何將布局連帶視口中的內(nèi)容復制到另一張圖中? 2020-07-03
