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

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

3天内不再提示

使用SCL中的常量进行计算

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

有类型和无类型常量的解释

常量是具有固定值的数据,其值在程序运行期间不能更改。常量在程序执行期间可由各种程序元素读取,但不能被覆盖。常量值有指定的表示法,具体取决于数据类型和数据格式。分为有类型和无类型的表示法。

建议在数学函数中不要混用有类型和无类型常量,否则可能会发生不需要的隐式转换,从而导致生成不正确的值。

编程示例

在以下编程示例中,可以看到使用有类型和无类型常量的运算。

1. 创建一个 SCL 函数块并将其命名为“FB_MathsFunctions”。

2. 在块接口的“Temp”部分声明“Variable_DINT”变量。

07518a20-0c42-11ee-962d-dac502259ad0.png

3. 编写以下程序代码

Variable_DINT := INT#1 +50000;

在此数学运算中,将有类型常量 INT#1 与无类型常量 50000 相加。无类型常量 50000 在软件中将带黄色下划线,指示常量值超出了 INT 数据类型允许的范围。

0773004c-0c42-11ee-962d-dac502259ad0.png

要查看结果,请转至在线。

1. 通过右键单击“编译 > 软件(仅更改)”(Compile > Software (only changes) 命令执行此命令来编译 SCL 函数块“FB_MathsFunctions”。

2. 使用“下载到设备 > 软件(仅更改)”(Download to device > Software (only changes)) 命令下载块。

3. 转至在线并监视块。

077c904e-0c42-11ee-962d-dac502259ad0.png

有类型常量的数据类型定义加法的数据类型。这意味着加法是在 INT 数据类型区域中执行。在第一步中,无类型常量 50000 将隐式转换为 INT 数据类型。

但这种转换会导致生成负值 (-15536)。然后该值将添加到有类型常量 (INT#1)。结果是 -15535。

由于将写入加法运算结果的变量被声明为 DINT 数据类型,因此数字 -15535 将隐式转换为 DINT 数据类型,并写入到变量“Variable_DINT”。但结果仍为负数。

1. 可能的解决方案

避免得到错误结果的一种方法是两个常量都采用有类型常量。如果两个常量都采用有类型常量,较长的数据类型将确定计算结果。

在“FB_MathsFunctions”SCL 函数块中编写以下程序代码:

0787de22-0c42-11ee-962d-dac502259ad0.png

在此计算操作中,将有类型常量 INT#1 与有类型常量 DINT#50000 相加。

要查看结果,请转至在线。

1. 通过右键单击“编译 > 软件(仅更改)”(Compile > Software (only changes) 命令执行此命令来编译 SCL 函数块“FB_MathsFunctions”。

2. 使用“下载到设备 > 软件(仅更改)”(Download to device > Software (only changes)) 命令下载块。

3. 转至在线并监视块。

079e64f8-0c42-11ee-962d-dac502259ad0.png

常量 INT#1 将转换为 DINT 数据类型,并且两个常量的相加将在 DINT 数据类型区域中执行。

2. 可能的解决方案

避免得到错误结果的另一种方法是两个常量都采用无类型常量。如果两个常量都采用无类型常量,它们在当前 CPU 上将被解释为最宽的可能数据类型。这意味着在 S7-1500 系列 CPU上,这两个常量都解释为 LINT 数据类型。

在“FB_MathsFunctions”SCL 函数块中编写以下程序代码:

07f3a62a-0c42-11ee-962d-dac502259ad0.png

在此计算操作中,将无类型常量 1 与无类型常量 50000 相加。

要查看结果,请转至在线。

1. 通过右键单击“编译 > 软件(仅更改)”(Compile > Software (only changes) 命令执行此命令来编译 SCL 函数块“FB_MathsFunctions”。

2. 使用“下载到设备 > 软件(仅更改)”(Download to device > Software (only changes)) 命令下载块。

3. 转至在线并监视块。

08036466-0c42-11ee-962d-dac502259ad0.png

常量 1 和 50000 将解释为 LINT 数据类型,相加的结果将再次转换为 DINT 数据类型。





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SCL
    SCL
    +关注

    关注

    1

    文章

    239

    浏览量

    17083
  • S7-1500
    +关注

    关注

    3

    文章

    300

    浏览量

    6408

原文标题:使用 SCL 中的常量进行计算

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

收藏 人收藏

    评论

    相关推荐

    Go语言常量的声明

    在 Go 语言中, 常量 表示的是固定的值,常量表达式的值在编译期进行计算常量的值不可以修改。例如:3 、 Let's go 、
    发表于 07-20 15:24 411次阅读

    IAR与KEIL如何直接定义常量到EEPROM的经验分享

      分享了这篇在IAR与KEIL如何直接定义常量到EEPROM的经验分享。其实方法和之前本人分享过的经验分享“KE02在CW中使用常量形式初始化EEPROM值”合为姐妹篇,当然这种
    发表于 09-16 10:39 18次下载

    java 常量池静态变量详解

    Java常量池,实际上分为两种形态:静态常量池和运行时常量池。 所谓静态常量池,即*.class文件
    发表于 09-27 13:01 10次下载
    java <b class='flag-5'>常量</b>池静态变量详解

    如何使用S7-SCL的“AT”指令?

    什么是“AT”指令,如何使用? AT指令是S7-SCL特有的一个指令,初学者可能会忽略此指令,或者对其理解不够深刻。AT指令在S7-SCL中有着非常重要的地位,很多应用程序都必须使用此指令。下面
    的头像 发表于 04-04 18:14 1.1w次阅读
    如何使用S7-<b class='flag-5'>SCL</b><b class='flag-5'>中</b>的“AT”指令?

    请问怎样在SCL中去使用浮点数进行计算

    例如,数据类型 REAL 在程序以 6 位小数的精度进行指定和计算
    的头像 发表于 07-04 11:32 2471次阅读

    使用SCL函数块编写计算保质期的应用程序

    在以下部分,将创建 SCL 函数块“SCL_Best_before_date” 。 可使用 SCL 函数块计算保质期。
    的头像 发表于 10-18 15:15 1062次阅读

    西门子SCL语言编程案例之计算方差

    在统计数据,经常用到方差来代表数据的离散程序,我们用SCL语言编写一个计算方差的FB块。
    的头像 发表于 01-09 09:45 1374次阅读

    对S7-SCL的AT指令进行详细讲解

    AT指令是S7-SCL特有的一个指令,初学者可能会忽略此指令,或者对其理解不够深刻。
    的头像 发表于 02-03 14:53 4821次阅读

    浅谈指针常量常量指针

    这节课我们来讲一讲指针常量常量指针。
    的头像 发表于 02-21 09:27 1078次阅读

    C语言的常量-2

    在C语言中,字符型常量是最特别的一种常量。他的特别之处在于我们需要对其使用指定的定界符对其进行限制。定界符为 ‘’ 。字符型常量可以分为两种,一种是字符
    的头像 发表于 02-21 15:02 647次阅读
    C语言的<b class='flag-5'>常量</b>-2

    SCL中使用浮点数REAL和LREAL进行计算

    例如,数据类型 REAL 在程序以 6 位小数的精度进行指定和计算。在计算浮点数(REAL和 LREAL)时,请注意此精度通常应用于每个计算
    的头像 发表于 05-30 09:40 1756次阅读
    在<b class='flag-5'>SCL</b>中使用浮点数REAL和LREAL<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 2731次阅读

    什么是常量折叠?Python如何优雅地实现它

    每种编程语言为了表现出色,并且实现卓越的性能,都需要大量编译器级的优化。 一种著名的优化技术是“ 常量折叠 ”(Constant Folding):在编译期间,编译器会设法识别出常量表达式,对其进行
    的头像 发表于 10-30 11:10 548次阅读
    什么是<b class='flag-5'>常量</b>折叠?Python如何优雅地实现它

    西门子博途之SCL常量的运算运用

     建议在数学函数不要混用有类型和无类型常量,否则可能会发生不需要的隐式转换,从而导致生成不正确的值。
    的头像 发表于 01-24 11:21 2151次阅读
    西门子博途之<b class='flag-5'>SCL</b><b class='flag-5'>常量</b>的运算运用

    微波检测的关键物理常量是指

    微波检测是一种利用微波技术进行物理量测量的方法,广泛应用于通信、雷达、遥感等领域。在微波检测,关键物理常量是指那些对测量结果有显著影响的物理量。本文将详细介绍微波检测的关键物理常量
    的头像 发表于 05-28 14:44 395次阅读