定義
可通過賦值運算,可以將一個表達式的值分配給一個變量。賦值表達式的左側為變量,右側為表達式的值。
函數名稱也可以作為表達式。賦值運算將調用該函數,并返回其函數值,賦給左側的變量。
賦值運算的數據類型取決于左邊變量的數據類型。右邊表達式的數據類型必須與該數據類型一致。
可通過以下方式編程賦值運算:
單賦值運算
執行單賦值運算時,僅將一個表達式或變量分配給單個變量:
示例:a := b;
多賦值運算
執行多賦值運算時,一個指令中可執行多個賦值運算。
示例:a := b := c;
此時,將執行以下操作:
b := c;
a := b;
組合賦值運算
執行組合賦值運算時,可在賦值運算中組合使用操作符“+”、“-”、“*”和“/”:
示例:a += b;
此時,將執行以下操作:
a := a + b;
也可多次組合賦值運算:
a += b += c *= d;
此時,將按以下順序執行賦值運算:
c := c * d;
b := b + c;
a := a + b;
STRUCT 數據類型或 PLC 數據類型的賦值運算
如果結構相同而且結構中成員的數據類型和名稱也相同,則可以將整個結構分配給另一個結構。
可以為單個結構元素分配一個變量、一個表達式或另一個結構元素。
ARRAY 數據類型的賦值運算
如果兩者的 ARRAY 元素數據類型以及 ARRAY 限值都匹配,則可以將整個 ARRAY 分配給另一個 ARRAY。
可以為單個 ARRAY 元素分配一個變量、一個表達式或另一個 ARRAY 元素。
STRING 數據類型的賦值運算
可將整個 STRING 賦值給另一個 STRING。
可以為單個 STRING 元素分配另一個 STRING 元素。
WSTRING 數據類型的賦值 (S7-1200/1500)
可將整個 WSTRING 賦值給另一個 WSTRING。
可以為單個 WSTRING 元素分配另一個 WSTRING 元素。
ANY 數據類型的賦值運算
只能將 ANY 數據類型的變量賦值給以下對象:
同樣為 ANY 數據類型的 FB 的輸入參數或臨時本地數據。
同樣為 ANY 數據類型的 FC 的臨時本地數據。
請注意,使用 ANY 指針時,只能指向“標準”訪問模式的存儲區。
POINTER 數據類型的賦值運算
在 SCL 的賦值運算中不能使用 POINTER。
示例
下表舉例說明了單賦值運算的操作:
SCL | |
---|---|
"MyTag1" := "MyTag2"; | (* 變量賦值 *) |
"MyTag1" := "MyTag2" * "MyTag3"; | (* 表達式賦值 *) |
"MyTag" := "MyFC"(); | (* 調用一個函數,并將函數值賦給 "MyTag" 變量 *) |
#MyStruct.MyStructElement := "MyTag"; | (* 將一個變量賦值給一個結構元素 *) |
#MyArray[2] := "MyTag"; | (* 將一個變量賦值給一個 ARRAY 元素 *) |
"MyTag" := #MyArray[1,4]; | (* 將一個 ARRAY 元素賦值給一個變量 *) |
#MyString[2] := #MyOtherString[5]; | (* 將一個 STRING 元素賦給另一個 STRING 元素 *) |
下表舉例說明了多賦值運算的操作:
SCL | |
---|---|
"MyTag1" := "MyTag2" := "MyTag3"; | (* 變量賦值 *) |
"MyTag1" := "MyTag2" := "MyTag3" * "MyTag4"; | (* 表達式賦值 *) |
"MyTag1" := "MyTag2" := "MyTag3 := "MyFC"(); | (* 調用一個函數,并將函數值賦值給變量 "MyTag1"、"MyTag1" 和 "MyTag1" *) |
#MyStruct.MyStructElement1 := #MyStruct.MyStructElement2 := "MyTag"; | (* 將一個變量賦值給兩個結構元素 *) |
#MyArray[2] := #MyArray[32] := "MyTag"; | (* 將一個變量賦值給兩個數組元素 *) |
"MyTag1" := "MyTag2" := #MyArray[1,4]; | (* 將一個數組元素賦值給兩個變量 *) |
#MyString[2] := #MyString[3]:= #MyOtherString[5]; | (* 將一個 STRING 元素賦值給兩個 STRING 元素 *) |
下表舉例說明了組合賦值運算的操作:
SCL | |
---|---|
"MyTag1" += "MyTag2"; | (* "MyTag1" 和 "MyTag2" 相加,并將相加的結果賦值給 "MyTag1"。*) |
"MyTag1" -= "MyTag2" += "MyTag3"; | (* "MyTag2" 和 "MyTag3" 相加。將相加的結果賦值給操作數“"MyTag2"”,再從 "MyTag1" 中減去該值。計算結果將賦值給 "MyTag1"。*) |
#MyArray[2] += #MyArray[32] += "MyTag"; | (* 數組元素 "MyArray[32]" 加上 "MyTag"。計算結果將賦值給 "MyArray[32]"。這個數組中的各個元素將相加,然后將結果分配給數組元素 "MyArray[2]"。在該運算中,相應的數據類型必需兼容。*) |
#MyStruct.MyStructElement1 /= #MyStruct.MyStructElement2 *= "MyTag"; | (* 結構化元素 "MyStructElement2" 乘以 "MyTag"。計算結果將賦值給 "MyStructElement2"。之后,將結構化元素 "MyStructElement1" 除以 "MyStructElement2",并將計算結果賦值給 "MyStructElement1"。在該運算中,相應的數據類型必需兼容。*) |
審核編輯:湯梓紅
-
函數
+關注
關注
3文章
4307瀏覽量
62433 -
運算
+關注
關注
0文章
130瀏覽量
25778 -
SCL
+關注
關注
1文章
239瀏覽量
17038
原文標題:博途:SCL的賦值運算
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論