說明
VARIANT 數(shù)據(jù)類型的參數(shù)是一個指針或引用,可指向各種不同數(shù)據(jù)類型的變量。VARIANT 指針無法指向?qū)嵗虼瞬荒苤赶蚨嘀貙嵗蚨嘀貙嵗?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)部分中聲明,例如,因為各元素的大小未知。所引用對象的大小可以更改。
使用 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ù)運行期間傳遞的變量類型來執(zhí)行。
例如,如果函數(shù)的塊參數(shù)為 VARIANT 數(shù)據(jù)類型,那么整數(shù)數(shù)據(jù)類型的變量可以在程序中的一個點處傳遞,而 PLC 數(shù)據(jù)類型的變量可以在程序中的另一個點處傳遞。借助 VARIANT 指令,函數(shù)隨后可以正確響應(yīng)這種情況,而不會出錯。
說明 如果一個數(shù)據(jù)塊最初的數(shù)據(jù)類型為用戶自定義的數(shù)據(jù)類型 (UDT),那么只能指向完整的數(shù)據(jù)塊。 |
說明 訪問 I/O 只有 S7-1500 模塊的 CPU 才能直接讀寫 I/O 輸出或輸出中的信號。(<操作數(shù)>:P) |
長度(字節(jié)) | 表示法 | 格式 | 輸入值示例 |
---|---|---|---|
0 | 符號 | 操作數(shù) | "TagResult" |
數(shù)據(jù)塊名稱.操作數(shù)名稱.元素 | "Data_TIA_Portal".StructVariable.FirstComponent | ||
絕對 | 操作數(shù) | %MW10 | |
數(shù)據(jù)塊編號.操作數(shù) 類型長度 | P#DB10.DBX10.0 INT 12 1) | ||
NULL 指針 | NULL |
數(shù)據(jù)類型的編碼
如果通過 P# 使用絕對尋址,則允許使用以下數(shù)據(jù)類型:
BOOL
BYTE
CHAR
WORD
INT
DWORD
DINT
REAL
TIME
S5TIME
DATE
TOD
DT
示例
以下示例說明了 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ù)中。 |
VARIANT 指令的應(yīng)用方式
簡介
在下一章中,您將了解可用于 VARIANT 指令的應(yīng)用選項。
對 VARIANT 指向的變量的數(shù)據(jù)類型求值
在下表中,您將看到可使用哪些指令來對 VARIANT 指向的變量的數(shù)據(jù)類型求值:
函數(shù) | 指令 | 說明 |
---|---|---|
確定數(shù)據(jù)類型 |
TypeOf():檢查 VARIANT 變量的數(shù)據(jù)類型 (該指令僅適用于 SCL,且只能與 IF 或 CASE 指令一起使用。) |
可使用該指令將 VARIANT 變量指向的數(shù)據(jù)類型與任何其它變量的數(shù)據(jù)類型進(jìn)行比較。也可以與 PLC 數(shù)據(jù)類型作比較。 |
TypeOfElements():掃描 VARIANT 變量 ARRAY 元素的數(shù)據(jù)類型 (該指令僅適用于 SCL,且只能與 IF 或 CASE 指令一起使用。) |
可使用該指令將 VARIANT 變量指向的數(shù)據(jù)類型與任何其它變量的數(shù)據(jù)類型進(jìn)行比較。也可以與 PLC 數(shù)據(jù)類型作比較。如果 VARIANT 變量的數(shù)據(jù)類型為 ARRAY,則將比較 ARRAY 元素的數(shù)據(jù)類型。 | |
EQ_Type:比較數(shù)據(jù)類型與變量數(shù)據(jù)類型是否“相等” NE_Type:比較數(shù)據(jù)類型與變量數(shù)據(jù)類型是否“不相等” |
可使用該指令將 VARIANT 變量指向的數(shù)據(jù)類型與任何其它變量的數(shù)據(jù)類型進(jìn)行比較。也可以與 PLC 數(shù)據(jù)類型作比較。 | |
EQ_ElemType:比較 ARRAY 元素數(shù)據(jù)類型與變量數(shù)據(jù)類型是否“相等” NE_ElemType:比較 ARRAY 元素數(shù)據(jù)類型與變量數(shù)據(jù)類型是否“不相等” |
可使用該指令將 VARIANT 變量指向的數(shù)據(jù)類型與任何其它變量的數(shù)據(jù)類型進(jìn)行比較。也可以與 PLC 數(shù)據(jù)類型作比較。如果 VARIANT 變量的數(shù)據(jù)類型為 ARRAY,則將比較 ARRAY 元素的數(shù)據(jù)類型。 | |
對 ARRAY 元素求值 | IS_ARRAY:檢查 ARRAY | 可使用該指令檢查 VARIANT 變量指向的數(shù)據(jù)類型是否為 ARRAY。 |
CountOfElements:獲取 ARRAY 元素個數(shù) | 可使用該指令讀出該變量中 VARIANT 變量指向了多少個 ARRAY 元素。 |
可以在信息系統(tǒng)的“基本指令 > 對應(yīng)編程語言”(Basic instructions > Respective programming language) 下找到有關(guān)各種指令的其它信息。
讀取 VARIANT 指向的數(shù)據(jù)
為了能夠使用數(shù)據(jù),您必須在一個中間步驟中將該數(shù)據(jù)移到變量中,因為無法直接處理該數(shù)據(jù)。
指令 | 說明 | 示例 | 結(jié)果 | |
---|---|---|---|---|
VARIANT 指向 | 目標(biāo)數(shù)據(jù)類型 | |||
VariantGet:讀取 VARIANT 變量值 | 可使用該指令將單個變量的值移到另一個變量中。這兩個變量的數(shù)據(jù)類型必須匹配。 | UDT_1 | UDT_1 | 已執(zhí)行該指令。 |
REAL | REAL | |||
DINT | DWORD | 該指令未執(zhí)行。 |
將數(shù)據(jù)分配給 VARIANT 變量
無法使用該指令來初始化 VARIANT 變量。因此,在將數(shù)據(jù)返回到變量時必須已經(jīng)初始化 VARIANT 變量。請勿使用未初始化的臨時 VARIANT 變量。
指令 | 說明 | 示例 | 結(jié)果 | |
---|---|---|---|---|
源數(shù)據(jù)類型 | VARIANT 指向: | |||
VariantPut:寫入 VARIANT 變量值 | 可使用該指令將單個變量的值移到另一個變量中。這兩個變量的數(shù)據(jù)類型必須匹配。 | UDT_1 | UDT_1 | 已執(zhí)行該指令。 |
REAL | REAL | |||
DINT | DWORD | 將不執(zhí)行該指令,因為數(shù)據(jù)類型不同。 |
處理動態(tài) ARRAY 結(jié)構(gòu)
對 ARRAY 元素求值 |
TypeOfElements():掃描 VARIANT 變量 ARRAY 元素的數(shù)據(jù)類型 (該指令僅適用于 SCL,且只能與 IF 或 CASE 指令一起使用。) |
可使用該指令將 VARIANT 變量指向的數(shù)據(jù)類型與任何其它變量的數(shù)據(jù)類型進(jìn)行比較。也可以與 PLC 數(shù)據(jù)類型作比較。如果 VARIANT 變量的數(shù)據(jù)類型為 ARRAY,則將比較 ARRAY 元素的數(shù)據(jù)類型。 |
IS_ARRAY:檢查 ARRAY | 可使用該指令檢查 VARIANT 變量指向的數(shù)據(jù)類型是否為 ARRAY。 | |
CountOfElements:獲取 ARRAY 元素個數(shù) | 可使用該指令讀出該變量中 VARIANT 變量指向了多少個 ARRAY 元素。 | |
MOVE_BLK_VARIANT:塊移動 | 可使用該指令移動動態(tài)和類型安全(集成類型測試)ARRAY。可以為源和目標(biāo) ARRAY 自由選擇限值。ARRAY 元素的數(shù)據(jù)類型必須匹配。 |
說明 MOVE、MOVE_BLK 和 MOVE_BLK_VARIANT 之間的區(qū)別 可使用“MOVE”指令來復(fù)制完整的結(jié)構(gòu)。 可使用“MOVE_BLK”指令來移動具有已知數(shù)據(jù)類型的 ARRAY 的部分。 僅在您想要移動其數(shù)據(jù)類型僅在程序運行時期間已知的 ARRAY 的部分時,才需要使用 MOVE_BLK_VARIANT 指令。 |
審核編輯:湯梓紅
-
plc
+關(guān)注
關(guān)注
5008文章
13151瀏覽量
462072 -
cpu
+關(guān)注
關(guān)注
68文章
10825瀏覽量
211149 -
變量
+關(guān)注
關(guān)注
0文章
613瀏覽量
28329 -
數(shù)據(jù)類型
+關(guān)注
關(guān)注
0文章
236瀏覽量
13608 -
S7-1500
+關(guān)注
關(guān)注
3文章
300瀏覽量
6341
原文標(biāo)題:博途新變量: 有關(guān) VARIANT 的基本信息
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論