0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

博途中SCL的赋值运算

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 2023-06-19 10:57 次阅读

定义

可通过赋值运算,可以将一个表达式的值分配给一个变量。赋值表达式的左侧为变量,右侧为表达式的值。

函数名称也可以作为表达式。赋值运算将调用该函数,并返回其函数值,赋给左侧的变量。

赋值运算的数据类型取决于左边变量的数据类型。右边表达式的数据类型必须与该数据类型一致。

可通过以下方式编程赋值运算:

单赋值运算

执行单赋值运算时,仅将一个表达式或变量分配给单个变量:

示例: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

    文章

    3911

    浏览量

    61313
  • 运算
    +关注

    关注

    0

    文章

    125

    浏览量

    25671
  • SCL
    SCL
    +关注

    关注

    1

    文章

    239

    浏览量

    16885

原文标题:博途:SCL的赋值运算

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    C语言中赋值运算符详解

    在C语言中,赋值运算符用于将一个值赋给变量。
    发表于 08-18 16:38 1043次阅读
    C语言中<b class='flag-5'>赋值</b><b class='flag-5'>运算</b>符详解

    SCL语言FOR循环的用法及典型案例

    SCL
    YS YYDS
    发布于 :2023年06月25日 00:06:13

    C51中的复合赋值运算符的相关资料分享

    / C51中的复合赋值运算符 /变量 复合运算符 表达式先把变量与后边的表达式进行某种运算,然后将运算的结果赋给前面的变量。+= 加法
    发表于 12-07 08:09

    运算是什么?为什么需要进行位运算等资料说明

    运算包括与、或、取反、赋值、移位等 1、为什么需要位运算对寄存器进行操作,以及通信,对寄存器的操作都是按位来进行的 2、51单片机的位运算:对I/O口直接
    发表于 09-06 17:26 1次下载
    位<b class='flag-5'>运算</b>是什么?为什么需要进行位<b class='flag-5'>运算</b>等资料说明

    阻塞赋值和非阻塞赋值的用法一篇文章就够了

    对于VerilogHDL语言中,经常在always模块中,面临两种赋值方式:阻塞赋值和非阻塞赋值。对于初学者,往往非常迷惑这两种赋值方式的用法,本章节主要介绍这两种文章的用法。其实,有
    的头像 发表于 01-30 17:41 2.1w次阅读

    IEEE Verilog阻塞赋值和非阻塞赋值的区别

    阻塞赋值对应的电路往往与触发沿没有关系,只与输入电平的变化有关系。非阻塞赋值对应的电路结构往往与触发沿有关系,只有在触发沿时才有可能发生赋值的情况。
    的头像 发表于 06-17 11:57 1.1w次阅读
    IEEE Verilog阻塞<b class='flag-5'>赋值</b>和非阻塞<b class='flag-5'>赋值</b>的区别

    VerilogHDL语言:清阻塞赋值和非阻塞赋值

    对于VerilogHDL语言中,经常在always模块中,面临两种赋值方式:阻塞赋值和非阻塞赋值。对于初学者,往往非常迷惑这两种赋值方式的用法,本章节主要介绍这两种文章的用法。其实,有
    发表于 11-19 15:48 944次阅读

    简述阻塞赋值和非阻塞赋值的可综合性

    ,所以基于的C的术语和概念出现在EDA中,原本是一个“误打误撞”,但历史造成的现实则是:必须理解和正确掌握它们的用法。 软件中阻塞进程,是指调用返回之前,应用进程一直等待: 为了保证应用进程的效率,不至于被子程序的运算过程“挂起”。非阻塞进程得到应用: 在非阻塞赋值进程中
    的头像 发表于 05-12 09:45 2448次阅读
    简述阻塞<b class='flag-5'>赋值</b>和非阻塞<b class='flag-5'>赋值</b>的可综合性

    【单片机自学笔记】(8):c51中的复合赋值运算符,开发版上的数码管、74HC245、74HC138的使用方法,结构体数组

    / C51中的复合赋值运算符 /变量 复合运算符 表达式先把变量与后边的表达式进行某种运算,然后将运算的结果赋给前面的变量。+= 加法
    发表于 11-24 10:36 0次下载
    【单片机自学笔记】(8):c51中的复合<b class='flag-5'>赋值</b><b class='flag-5'>运算</b>符,开发版上的数码管、74HC245、74HC138的使用方法,结构体数组

    如何通过SCL来实现编程

    SCL作为IEC61131-3编程语言的一种,由于其高级语言的特性,特别适合复杂运算、复杂数学函数应用的场合。本文以FactoryIO软件中的物料分拣案例作为硬件基础,介绍如何通过SCL来实现编程。
    的头像 发表于 10-26 16:12 1963次阅读

    Python变量和简单赋值语句

    量。 比如: a = 3 变量赋值内存变化情况: 运行过程中,解释器先运行右边的表达式,生成一个代表表达式运算结果的对象; 然后,将这个对象地址赋值给左边的变量, 如下图所示: 如果直接调用未
    的头像 发表于 03-05 17:11 1046次阅读
    Python变量和简单<b class='flag-5'>赋值</b>语句

    一文了解阻塞赋值与非阻塞赋值

    今天给大家普及一下阻塞赋值和非阻塞赋值的相关知识
    的头像 发表于 07-07 14:15 1471次阅读
    一文了解阻塞<b class='flag-5'>赋值</b>与非阻塞<b class='flag-5'>赋值</b>

    SCL中的 EN/ENO 机制概述

    SCL 中的 EN/ENO 机制概述 在 SCL 程序段中,可以通过赋值来改变 ENO。为此,请写入“ENO:=TRUE”或“ENO:=FALSE”,或使用 BOOL 数据类型的变量。当激活“自动
    的头像 发表于 08-23 10:08 1286次阅读

    阻塞赋值与非阻塞赋值

    ”=“阻塞赋值与”
    的头像 发表于 09-12 09:06 652次阅读
    阻塞<b class='flag-5'>赋值</b>与非阻塞<b class='flag-5'>赋值</b>

    SIMATIC S7-1500 PLC S7-SCL赋值详解

    通过赋值,一个变量接受另一个变量或者表达式的值。在赋值运算符“;=”左边的是变量,该变量接受右边的地址或者表达式的值。
    的头像 发表于 11-29 09:24 1270次阅读