說明
VARIANT 數(shù)據(jù)類型的參數(shù)是一個指針或引用,可指向各種不同數(shù)據(jù)類型的變量。VARIANT 指針無法指向?qū)嵗虼瞬荒苤赶蚨嘀貙?shí)例或多重實(shí)例的 ARRAY。VARIANT 指針可以是基本數(shù)據(jù)類型(例如,INT 或 REAL)的對象。還可以是 STRING、DTL、STRUCT 類型的 ARRAY、UDT、UDT 類型的 ARRAY。VARIANT 指針可以識別結(jié)構(gòu),并指向各個結(jié)構(gòu)元素。VARIANT 數(shù)據(jù)類型的操作數(shù)不占用背景數(shù)據(jù)塊或工作存儲器中的空間。但是,將占用 CPU 上的存儲空間。
VARIANT 類型的變量不是一個對象,而是對另一個對象的引用。在函數(shù)的塊接口中的 VAR_IN、VAR_IN_OUT 和 VAR_TEMP 部分中,VARIANT 類型的單個元素只能聲明為形參。因此,不能在數(shù)據(jù)塊或函數(shù)塊的塊接口靜態(tài)部分中聲明,例如,因?yàn)楦髟氐拇笮∥粗?。所引用對象的大小可以更改?/p>
使用 VARIANT 數(shù)據(jù)類型時,可為各種數(shù)據(jù)類型創(chuàng)建通用的標(biāo)準(zhǔn)函數(shù)塊 (FB) 或函數(shù) (FC)。為此,可使用所有編程語言中的各種指令。在程序創(chuàng)建過程中,可指定該塊可處理數(shù)據(jù)類型。在此,可使用 VARIANT 數(shù)據(jù)類型對各種變量進(jìn)行互連。之后,再根據(jù)這些變量在塊中的數(shù)據(jù)類型進(jìn)行響應(yīng)。調(diào)用某個塊時,可以將該塊的參數(shù)連接到任何數(shù)據(jù)類型的變量。調(diào)用某個塊時,除了傳遞變量的指針外,還會傳遞變量的類型信息。塊代碼隨后可以根據(jù)運(yùn)行期間傳遞的變量類型來執(zhí)行。
例如,如果函數(shù)的塊參數(shù)為 VARIANT 數(shù)據(jù)類型,那么整數(shù)數(shù)據(jù)類型的變量可以在程序中的一個點(diǎn)處傳遞,而 PLC 數(shù)據(jù)類型的變量可以在程序中的另一個點(diǎn)處傳遞。借助 VARIANT 指令,函數(shù)隨后可以正確響應(yīng)這種情況,而不會出錯。
說明 如果一個數(shù)據(jù)塊最初的數(shù)據(jù)類型為用戶自定義的數(shù)據(jù)類型 (UDT),那么只能指向完整的數(shù)據(jù)塊。 |
說明 訪問 I/O 只有 S7-1500 模塊的 CPU 才能直接讀寫 I/O 輸出或輸出中的信號。(<操作數(shù)>:P) |
下表列出了 VARIANT 指針的屬性:
長度(字節(jié)) | 表示法 | 格式 | 輸入值示例 |
---|---|---|---|
0 | 符號 | 操作數(shù) | "TagResult" |
數(shù)據(jù)塊名稱.操作數(shù)名稱.元素 | "Data_TIA_Portal".StructVariable.FirstComponent | ||
絕對 | 操作數(shù) | %MW10 | |
數(shù)據(jù)塊編號.操作數(shù) 類型長度 (僅對可標(biāo)準(zhǔn)訪問的塊有效) |
P#DB10.DBX10.0 INT 12 1) | ||
NULL 指針 | NULL | ||
1) 如果使用前綴 P#,則只能指向“標(biāo)準(zhǔn)”訪問模式的存儲區(qū)。 |
數(shù)據(jù)類型的編碼
如果通過 P# 使用絕對尋址,則允許使用以下數(shù)據(jù)類型:
十六進(jìn)制代碼 | 數(shù)據(jù)類型 | 說明 |
---|---|---|
B#16#00 | NIL | Null 指針 |
B#16#01 | BOOL | 位 |
B#16#02 | BYTE | 字節(jié),8 位 |
B#16#03 | CHAR | 8 位字符 |
B#16#04 | WORD | 16 位字 |
B#16#05 | INT | 16 位整數(shù) |
B#16#06 | DWORD | 32 位字 |
B#16#07 | DINT | 32 位整數(shù) |
B#16#08 | REAL | 32 位浮點(diǎn)數(shù) |
B#16#0B | TIME | 持續(xù)時間 |
B#16#0C | S5TIME | 持續(xù)時間 |
B#16#09 | DATE | 日期 |
B#16#0A | TOD | 日期和時間 |
B#16#0E | DT | 日期和時間 |
B#16#13 | STRING | 字符串 |
B#16#17 | BLOCK_FB | 函數(shù)塊 |
B#16#18 | BLOCK_FC | 函數(shù) |
B#16#19 | BLOCK_DB | 數(shù)據(jù)塊 |
B#16#1A | BLOCK_SDB | 系統(tǒng)數(shù)據(jù)塊 |
B#16#1C | COUNTER | 計(jì)數(shù)器 |
B#16#1D | TIMER | 定時器 |
示例
以下示例說明了 VARIANT 使用 STL 指令“MOVE:移動值”的工作原理:
STL | 說明 |
---|---|
CALL MOVE | // 調(diào)用指令。 |
value_type := VARIANT | // 參數(shù) IN 和 OUT 的數(shù)據(jù)類型 |
IN := "Data_TIA_Portal".StructVariable.FirstComponent | // 從“Data_TIA_Portal”數(shù)據(jù)塊移動操作數(shù)“FirstComponent”中的數(shù)據(jù)。 |
OUT := "MotorDB".StructResult.TagResult | // 從“MotorDB”數(shù)據(jù)塊傳送到“TagResult”操作數(shù)中。 |
編程示例
在此編程示例中,將移動在生產(chǎn)班次期間為示例收集的數(shù)據(jù)值以作進(jìn)一步處理。收集的數(shù)據(jù)放在 ARRAY 中。通過“MOVE_BLK_VARIANT:移動塊”(Move block) 指令,可以動態(tài)或以類型安全方式移動整個 ARRAY 或個別 ARRAY 元素??梢詾樵春湍繕?biāo) ARRAY 自由選擇 ARRAY 限值,這些限值不必匹配。但是,要移動的數(shù)據(jù)值的數(shù)據(jù)類型必須匹配。該指令在所有編程語言中都可用。
通過 VARIANT 數(shù)據(jù)類型,也可以使用已創(chuàng)建的程序代碼并通過在塊調(diào)用中指定不同的源和目標(biāo)區(qū)域來移動另一個生產(chǎn)班次的數(shù)據(jù)。
驟
使用 SCL 編程語言創(chuàng)建函數(shù)并將其命名為“FC_PartialArrayCopy”。 按如下方式聲明塊接口: 按如下方式創(chuàng)建 SCL 程序代碼: 可以找到以下程序代碼作為模板。 創(chuàng)建 PLC 數(shù)據(jù)類型“UDT_MyStruct”: 創(chuàng)建全局?jǐn)?shù)據(jù)塊“DB_WithArrays”: 在組織塊(例如 OB1)中調(diào)用“FC_PartialArrayCopy”函數(shù),并使用 DB_WithArrays 數(shù)據(jù)塊初始化參數(shù)。輸入指定的常量: 也可以使用第三個和第四個 ARRAY(數(shù)據(jù)類型為 REAL)來代替使用前兩個 ARRAY (數(shù)據(jù)類型為 UDT_MyStruct)。 |
結(jié)果
在程序周期中調(diào)用“FC_PartialArrayCopy”塊后,會將從第四個元素開始的兩個數(shù)據(jù)值立即從“DB_WithArrays”全局?jǐn)?shù)據(jù)塊的第一個 ARRAY 復(fù)制到該數(shù)據(jù)塊的第二個 ARRAY 中。復(fù)制的數(shù)據(jù)值將插入到第二個 ARRAY 中(從第四個元素開始)。
用于復(fù)制的 SCL 程序代碼:
SCL |
---|
IF IS_ARRAY(#SourceArray) AND TypeOfElements(#SourceArray) = TypeOfElements(#DestinationArray) THEN |
#Error := MOVE_BLK_VARIANT(COUNT := #Count, SRC := #SourceArray, SRC_INDEX := #SourceIndex, |
DEST => #DestinationArray, DEST_INDEX := #DestinationIndex); |
END_IF; |
#FC_PartialArrayCopy := #Error; |
-
存儲器
+關(guān)注
關(guān)注
38文章
7521瀏覽量
164095 -
西門子
+關(guān)注
關(guān)注
94文章
3056瀏覽量
116153 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4344瀏覽量
62813 -
SCL
+關(guān)注
關(guān)注
1文章
239瀏覽量
17116
原文標(biāo)題:西門子博途:有關(guān) VARIANT 的基本信息
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機(jī)器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論