定义
可通过赋值运算,可以将一个表达式的值分配给一个变量。赋值表达式的左侧为变量,右侧为表达式的值。
函数名称也可以作为表达式。赋值运算将调用该函数,并返回其函数值,赋给左侧的变量。
赋值运算的数据类型取决于左边变量的数据类型。右边表达式的数据类型必须与该数据类型一致。
可通过以下方式编程赋值运算:
单赋值运算
执行单赋值运算时,仅将一个表达式或变量分配给单个变量:
示例: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文章
4406浏览量
66858 -
运算
+关注
关注
0文章
132浏览量
26606 -
SCL
+关注
关注
1文章
244浏览量
17937
原文标题:博途:SCL的赋值运算
文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
C51中的复合赋值运算符的相关资料分享
VerilogHDL语言:清阻塞赋值和非阻塞赋值
简述阻塞赋值和非阻塞赋值的可综合性
【单片机自学笔记】(8):c51中的复合赋值运算符,开发版上的数码管、74HC245、74HC138的使用方法,结构体数组
如何通过SCL来实现编程
Python变量和简单赋值语句
SCL中的 EN/ENO 机制概述
SIMATIC S7-1500 PLC S7-SCL赋值详解
西门子博途中的LAD、FBD与SCL编程

博途中SCL的赋值运算
评论