定义
可通过赋值运算,可以将一个表达式的值分配给一个变量。赋值表达式的左侧为变量,右侧为表达式的值。
函数名称也可以作为表达式。赋值运算将调用该函数,并返回其函数值,赋给左侧的变量。
赋值运算的数据类型取决于左边变量的数据类型。右边表达式的数据类型必须与该数据类型一致。
可通过以下方式编程赋值运算:
单赋值运算
执行单赋值运算时,仅将一个表达式或变量分配给单个变量:
示例: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文章
4331浏览量
62593 -
运算
+关注
关注
0文章
130浏览量
25789 -
SCL
+关注
关注
1文章
239浏览量
17067
原文标题:博途:SCL的赋值运算
文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论