說明
VARIANT 數據類型的參數是一個指針或引用,可指向各種不同數據類型的變量。VARIANT 指針無法指向實例,因此不能指向多重實例或多重實例的 ARRAY。VARIANT 指針可以是基本數據類型(例如,INT 或 REAL)的對象。還可以是 STRING、DTL、STRUCT 類型的 ARRAY、UDT、UDT 類型的 ARRAY。VARIANT 指針可以識別結構,并指向各個結構元素。VARIANT 數據類型的操作數不占用背景數據塊或工作存儲器中的空間。但是,將占用 CPU 上的存儲空間。
VARIANT 類型的變量不是一個對象,而是對另一個對象的引用。在函數的塊接口中的 VAR_IN、VAR_IN_OUT 和 VAR_TEMP 部分中,VARIANT 類型的單個元素只能聲明為形參。因此,不能在數據塊或函數塊的塊接口靜態部分中聲明,例如,因為各元素的大小未知。所引用對象的大小可以更改。
使用 VARIANT 數據類型時,可為各種數據類型創建通用的標準函數塊 (FB) 或函數 (FC)。為此,可使用所有編程語言中的各種指令。在程序創建過程中,可指定該塊可處理數據類型。在此,可使用 VARIANT 數據類型對各種變量進行互連。之后,再根據這些變量在塊中的數據類型進行響應。調用某個塊時,可以將該塊的參數連接到任何數據類型的變量。調用某個塊時,除了傳遞變量的指針外,還會傳遞變量的類型信息。塊代碼隨后可以根據運行期間傳遞的變量類型來執行。
例如,如果函數的塊參數為 VARIANT 數據類型,那么整數數據類型的變量可以在程序中的一個點處傳遞,而 PLC 數據類型的變量可以在程序中的另一個點處傳遞。借助 VARIANT 指令,函數隨后可以正確響應這種情況,而不會出錯。
說明 如果一個數據塊最初的數據類型為用戶自定義的數據類型 (UDT),那么只能指向完整的數據塊。 |
說明 訪問 I/O 只有 S7-1500 模塊的 CPU 才能直接讀寫 I/O 輸出或輸出中的信號。(<操作數>:P) |
長度(字節) | 表示法 | 格式 | 輸入值示例 |
---|---|---|---|
0 | 符號 | 操作數 | "TagResult" |
數據塊名稱.操作數名稱.元素 | "Data_TIA_Portal".StructVariable.FirstComponent | ||
絕對 | 操作數 | %MW10 | |
數據塊編號.操作數 類型長度 | P#DB10.DBX10.0 INT 12 1) | ||
NULL 指針 | NULL |
數據類型的編碼
如果通過 P# 使用絕對尋址,則允許使用以下數據類型:
BOOL
BYTE
CHAR
WORD
INT
DWORD
DINT
REAL
TIME
S5TIME
DATE
TOD
DT
示例
以下示例說明了 VARIANT 使用 STL 指令“MOVE:移動值”的工作原理:
STL | 說明 |
---|---|
CALL MOVE | // 調用指令。 |
value_type := VARIANT | // 參數 IN 和 OUT 的數據類型 |
IN := "Data_TIA_Portal".StructVariable.FirstComponent | // 從“Data_TIA_Portal”數據塊移動操作數“FirstComponent”中的數據。 |
OUT := "MotorDB".StructResult.TagResult | // 從“MotorDB”數據塊傳送到“TagResult”操作數中。 |
VARIANT 指令的應用方式
簡介
在下一章中,您將了解可用于 VARIANT 指令的應用選項。
對 VARIANT 指向的變量的數據類型求值
在下表中,您將看到可使用哪些指令來對 VARIANT 指向的變量的數據類型求值:
函數 | 指令 | 說明 |
---|---|---|
確定數據類型 |
TypeOf():檢查 VARIANT 變量的數據類型 (該指令僅適用于 SCL,且只能與 IF 或 CASE 指令一起使用。) |
可使用該指令將 VARIANT 變量指向的數據類型與任何其它變量的數據類型進行比較。也可以與 PLC 數據類型作比較。 |
TypeOfElements():掃描 VARIANT 變量 ARRAY 元素的數據類型 (該指令僅適用于 SCL,且只能與 IF 或 CASE 指令一起使用。) |
可使用該指令將 VARIANT 變量指向的數據類型與任何其它變量的數據類型進行比較。也可以與 PLC 數據類型作比較。如果 VARIANT 變量的數據類型為 ARRAY,則將比較 ARRAY 元素的數據類型。 | |
EQ_Type:比較數據類型與變量數據類型是否“相等” NE_Type:比較數據類型與變量數據類型是否“不相等” |
可使用該指令將 VARIANT 變量指向的數據類型與任何其它變量的數據類型進行比較。也可以與 PLC 數據類型作比較。 | |
EQ_ElemType:比較 ARRAY 元素數據類型與變量數據類型是否“相等” NE_ElemType:比較 ARRAY 元素數據類型與變量數據類型是否“不相等” |
可使用該指令將 VARIANT 變量指向的數據類型與任何其它變量的數據類型進行比較。也可以與 PLC 數據類型作比較。如果 VARIANT 變量的數據類型為 ARRAY,則將比較 ARRAY 元素的數據類型。 | |
對 ARRAY 元素求值 | IS_ARRAY:檢查 ARRAY | 可使用該指令檢查 VARIANT 變量指向的數據類型是否為 ARRAY。 |
CountOfElements:獲取 ARRAY 元素個數 | 可使用該指令讀出該變量中 VARIANT 變量指向了多少個 ARRAY 元素。 |
可以在信息系統的“基本指令 > 對應編程語言”(Basic instructions > Respective programming language) 下找到有關各種指令的其它信息。
讀取 VARIANT 指向的數據
為了能夠使用數據,您必須在一個中間步驟中將該數據移到變量中,因為無法直接處理該數據。
指令 | 說明 | 示例 | 結果 | |
---|---|---|---|---|
VARIANT 指向 | 目標數據類型 | |||
VariantGet:讀取 VARIANT 變量值 | 可使用該指令將單個變量的值移到另一個變量中。這兩個變量的數據類型必須匹配。 | UDT_1 | UDT_1 | 已執行該指令。 |
REAL | REAL | |||
DINT | DWORD | 該指令未執行。 |
將數據分配給 VARIANT 變量
無法使用該指令來初始化 VARIANT 變量。因此,在將數據返回到變量時必須已經初始化 VARIANT 變量。請勿使用未初始化的臨時 VARIANT 變量。
指令 | 說明 | 示例 | 結果 | |
---|---|---|---|---|
源數據類型 | VARIANT 指向: | |||
VariantPut:寫入 VARIANT 變量值 | 可使用該指令將單個變量的值移到另一個變量中。這兩個變量的數據類型必須匹配。 | UDT_1 | UDT_1 | 已執行該指令。 |
REAL | REAL | |||
DINT | DWORD | 將不執行該指令,因為數據類型不同。 |
處理動態 ARRAY 結構
對 ARRAY 元素求值 |
TypeOfElements():掃描 VARIANT 變量 ARRAY 元素的數據類型 (該指令僅適用于 SCL,且只能與 IF 或 CASE 指令一起使用。) |
可使用該指令將 VARIANT 變量指向的數據類型與任何其它變量的數據類型進行比較。也可以與 PLC 數據類型作比較。如果 VARIANT 變量的數據類型為 ARRAY,則將比較 ARRAY 元素的數據類型。 |
IS_ARRAY:檢查 ARRAY | 可使用該指令檢查 VARIANT 變量指向的數據類型是否為 ARRAY。 | |
CountOfElements:獲取 ARRAY 元素個數 | 可使用該指令讀出該變量中 VARIANT 變量指向了多少個 ARRAY 元素。 | |
MOVE_BLK_VARIANT:塊移動 | 可使用該指令移動動態和類型安全(集成類型測試)ARRAY。可以為源和目標 ARRAY 自由選擇限值。ARRAY 元素的數據類型必須匹配。 |
說明 MOVE、MOVE_BLK 和 MOVE_BLK_VARIANT 之間的區別 可使用“MOVE”指令來復制完整的結構。 可使用“MOVE_BLK”指令來移動具有已知數據類型的 ARRAY 的部分。 僅在您想要移動其數據類型僅在程序運行時期間已知的 ARRAY 的部分時,才需要使用 MOVE_BLK_VARIANT 指令。 |
審核編輯:湯梓紅
-
plc
+關注
關注
5013文章
13329瀏覽量
464133 -
cpu
+關注
關注
68文章
10882瀏覽量
212226 -
變量
+關注
關注
0文章
613瀏覽量
28413 -
數據類型
+關注
關注
0文章
236瀏覽量
13637 -
S7-1500
+關注
關注
3文章
300瀏覽量
6453
原文標題:博途新變量: 有關 VARIANT 的基本信息
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論