西門子SCL編程入門教程連載(12)-數(shù)組及其指令
今天這篇文章我們來介紹下數(shù)組及數(shù)組的操作指令。

數(shù)組,英文名稱"array",是具有數(shù)目確定的、數(shù)據(jù)類型相同的變量集合。
數(shù)組中的變量稱為“元素”,元素的序號(hào)稱為“索引”。
數(shù)組具有如下一些特點(diǎn):
1、數(shù)組中的元素具有相同的數(shù)據(jù)類型;
2、數(shù)組中的元素個(gè)數(shù)是確定的,各元素可以索引的方式進(jìn)行訪問;
3、數(shù)組的定義要標(biāo)明其下限及上限,下限必須小于或等于上限;
4、數(shù)組可以定義成多維。SCL最多支持6維數(shù)組,但要注意,隨著維數(shù)的增加,數(shù)組占用的空間將成倍增加;
數(shù)組的聲明
可以在FB/FC的變量聲明區(qū)聲明數(shù)組。數(shù)組也要有一個(gè)名稱,其命名規(guī)則與普通變量相同,其數(shù)據(jù)類型要按照如下格式聲明:
Array [lo..hi] of type
其中:
1、Array表示要將該變量聲明為數(shù)組;
2、方括號(hào)中是數(shù)組的下限和上限("lo"表示下限,"hi"表示上限);
3、"of type" 用來表示數(shù)組變量的數(shù)據(jù)類型。支持布爾型、字節(jié)型、整型、字、雙字、雙整型等所有該CPU支持的數(shù)據(jù)類型;
舉個(gè)例子:要聲明一個(gè)100個(gè)字節(jié)的數(shù)據(jù)接收緩存區(qū),可以用如下的格式聲明:

與數(shù)組相關(guān)的幾個(gè)指令介紹如下:
1、MOVE_BLK
MOVE_BLK指令用來從一個(gè)存儲(chǔ)區(qū)地址拷貝一定數(shù)量的數(shù)據(jù)到另一個(gè)存儲(chǔ)區(qū),拷貝的數(shù)據(jù)必須是相同的數(shù)據(jù)類型。
可以在【基本指令(Basic instruction)】-【移動(dòng)操作(move operations)】中添加該指令,其初始添加狀態(tài)如下:

該指令有三個(gè)參數(shù),其含義如下:
1)IN:源數(shù)據(jù)中第一個(gè)元素;
2)COUNT:要拷貝的數(shù)據(jù)的個(gè)數(shù);
3)OUT:目標(biāo)數(shù)據(jù)中的第一個(gè)元素;
例如下面的代碼將臨時(shí)接收數(shù)據(jù)緩存區(qū)tmpDataRcv中的100個(gè)字節(jié)的數(shù)據(jù)拷貝到實(shí)際接收存儲(chǔ)區(qū)DataRcv:

2、MOVE_BLK_VARIANT
MOVE_BLK_VARIANT指令可以從源數(shù)組拷貝特定個(gè)數(shù)的元素到目標(biāo)數(shù)組,可以指定源數(shù)組的索引,目標(biāo)數(shù)組的索引及要拷貝的元素的個(gè)數(shù)。
與MOVE_BLK指令相比,MOVE_BLK_VARIANT指令提供更多的靈活性。它可以將一個(gè)數(shù)組中的全部或部分元素拷貝到另一個(gè)數(shù)組的指定位置,即使這兩個(gè)數(shù)組中的元素個(gè)數(shù)并不相同。
MOVE_BLK_VARIANT有五個(gè)參數(shù):
1)SRC:源數(shù)組,或者指向源數(shù)組的VARIANT指針;
2)COUNT:要拷貝的元素的個(gè)數(shù);
3)SRC_INDEX:源數(shù)組中要拷貝地址的起始索引;
4)DEST_INDEX:目標(biāo)數(shù)組中拷貝地址的起始索引;
5)DEST:目標(biāo)數(shù)組,或指向目標(biāo)數(shù)組的VARIANT指針;
MOVE_BLK_VARIANT執(zhí)行成功后會(huì)返回0。如果失敗,則會(huì)返回一個(gè)錯(cuò)誤代碼,可以通過手冊(cè)查看失敗的原因。
舉個(gè)例子:
假設(shè)我們要將數(shù)組tmpDataRcv中從索引0開始的10個(gè)數(shù)據(jù)拷貝到數(shù)組DataRcv中索引9開始的地址,則代碼如下:

3、UMOVE_BLK
UMOVE_BLK指令與MOVE_BLK的參數(shù)及用法都相同。唯一不同的地方是:UMOVE_BLK指令的執(zhí)行過程不會(huì)被中斷,這使它很適合用于一些重要的、不希望被中斷的數(shù)據(jù)拷貝。
UMOVE_BLK指令名稱中的U表示" Uninterruptible",即不能中斷的意思。
例如下面的代碼使用UMOVE_BLK指令將數(shù)組DataRcv中的100個(gè)元素拷貝到DB100(符號(hào)名:Data_G)的Rcv數(shù)組,整個(gè)拷貝過程不允許中斷:

4、FILL_BLK
FILL_BLK指令用指定的數(shù)據(jù)來填充存儲(chǔ)區(qū)中的某段區(qū)域(數(shù)組)。
指令的初始狀態(tài)如下:

FILL_BLK指令有三個(gè)參數(shù):
1)IN:用來填充的數(shù)據(jù),可以是整數(shù)、實(shí)數(shù)、字符、日期時(shí)間等數(shù)據(jù)類型;
2)COUNT:要填充的數(shù)據(jù)個(gè)數(shù),可以是USINT、UINT或者UDINT類型;
3)OUT:要填充的目標(biāo)地址(數(shù)組);
舉個(gè)例子:
假設(shè)要將數(shù)組tmpDataTest[0..19]從索引9開始的10個(gè)字節(jié)填充為16#FF,則代碼如下:

5、UFILL_BLK
UFILL_BLK指令與FILL_BLK的功能及用法相同。名稱中的U表示"Uninterruptible",它也是執(zhí)行過程不能被中斷的指令,不再贅述。
好了,關(guān)于西門子SCL語言中數(shù)組及其相關(guān)的指令就先介紹到這里。
-
Origin(Pro):學(xué)習(xí)版的窗口限制【數(shù)據(jù)繪圖】 2020-08-07
-
如何卸載Aspen Plus并再重新安裝,這篇文章告訴你! 2020-05-29
-
CAD視口的邊框線看不到也選不中是怎么回事,怎么解決? 2020-06-04
-
教程 | Origin從DSC計(jì)算焓和比熱容 2020-08-31
-
CAD外部參照無法綁定怎么辦? 2020-06-03
-
CAD中如何將布局連帶視口中的內(nèi)容復(fù)制到另一張圖中? 2020-07-03
