SCL 賦值運算,這操作風格和C++C# 太像了

SCL 賦值運算,這操作風格和C++/C# 太像了

定義

可透過賦值運算,可以將一個表示式的值分配給一個變數。賦值表示式的左側為變數,右側為表示式的值。

函式名稱也可以作為表示式。賦值運算將呼叫該函式,並返回其函式值,賦給左側的變數。

賦值運算的資料型別取決於左邊變數的資料型別。右邊表示式的資料型別必須與該資料型別一致。

可透過以下方式程式設計賦值運算:

單賦值運算 執行單賦值運算時,僅將一個表示式或變數分配給單個變數: 示例: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 元素 *)

clipboard

下表舉例說明了多賦值運算的操作:

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 元素 *)

clipboard

下表舉例說明了組合賦值運算的操作:

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“。在該運算中,相應的資料型別必需相容。*)