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

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

3天内不再提示

对于FC或FB中的临时变量使用

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 作者:机器人及PLC自动化 2022-11-07 16:50 次阅读

很多初学者容易将 FC 及FB 相混淆,认为 FB 仅仅是比 FC 多了一个背景数据块,这种认识是非常危险的。在 STEP7 的关于 FC 的描述是这样的:

FC 是一个没有存储空间的逻辑块。FC 的临时变量存储在本地数据堆栈中,这些数据在 FC 执行完毕后将会丢失。为了永久的保存数据,FC 可以使用共享数据块。

由于 FC 没有自己的存储空间,所以必须指定实参给它的参数(这就是为什么 FC 的输入输出管脚必须填写参数的原因)。FC 的临时变量(位于本地数据堆栈中)是无法指定初始值的(由于本地数据堆栈是由系统自动动态使用的)。为了更形象的说明这一点,我们来看下面的例子,此例子对 L 堆栈在程序调用时的分配进行了详细的讲解:

L 堆栈永远以地址“0”开始。在 L 堆栈中,会为每个 FC 提供一定地址空间,作为存放每个块所拥有的固有数据或局部数据。当某个块终止时,那么它的空间随之也被重新释放出来。指针总是指向当前打开块的第一个字节。

运行等级 L 堆栈中的字节数 指针
调用OB1(带有 20 个字节的系统固有数据和局部数据的 10 个附加字节) 30 0
调用 FC1(带有 30 个字节的局部数据)
30 个字节 (OB1) + 30 个字节 (FC1)
60 30
调用 FC20(带有 20 个字节的局部数据)
60 个字节 (OB1 + FC1) +20 个字节 FC10
80 60
调用 FC21(带有 20 个字节的局部数据)
60 个字节 (OB1 + FC1) +20 个字节 FC11
80 60
调用 FC2(带有 50 个字节的局部数据)
30 个字节 (OB1) +50 个字节 (FC2)
80 30
调用 FC30(带有 10 个字节的局部数据)
80 个字节 (OB1 + FC2) +10 个字节 FC20
90 80

由上面的例子可以看出:对于FC20 曾经使用过的系统中 L 堆栈 60-80 区间(FC20 中地址范围为 LB0-LB19)在 FC20 调用结束后,被提供给 FC21 使用(FC21 中地址范围同样为 LB0-LB19)。 对于 FC 的临时变量认识不清晰,用户在对临时变量的使用当中,也经常会出现一些错误,下面将使用一个例子非常直观地说明上面的问题

程序原目的:

在 OB1 在程序中调用FC20 后立即调用 FC21

FC20 中将 20 赋值给临时变量 FC20_TEMP1,将 21 赋值给临时变量 FC20_TEMP2FC21 中将 FC21_TEMP1,FC21_TEMP2 相加

程序分析:我们发现 FC20 中的临时变量曾经出现的数值(20,21)被 FC21 中的临时变量FC21_TEMP1, FC21_TEMP2 得到了,如果直接使用这两个临时变量进行加法操作,可以得到结果 41。对于编程人员来说,临时变量必须要在所在程序段中赋值,而后使用。用户对此例中的 FC21_TEMP1, FC21_TEMP2 必须先做清零处理,否则其在使用前即可能拥有数值。

016556ba-5e77-11ed-a3b6-dac502259ad0.png

结论:对于 FC 或 FB 中的临时变量,不要希望将本次调用的数值可以存储在里面以供下次程序调用使用,因为这些临时变量所使用的 L 堆栈空间在 FC 或 FB 调用结束就释放给系统了,其它后续程序可以任意使用。所以下列用法都是错误的:

将临时变量用于上升/下降沿指令

将临时变量用于自保持逻辑

临时变量未在所在程序段中赋值,直接使用

审核编辑:郭婷

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

    关注

    12

    文章

    3863

    浏览量

    84689
  • 堆栈
    +关注

    关注

    0

    文章

    171

    浏览量

    19535

原文标题:FC 中临时变量的使用:

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

收藏 人收藏

    评论

    相关推荐

    字符型、指针型等变量等该如何初始化

     对于数值类型的变量往往初始化为0,但对于其他类型的变量,如字符型、指针型等变量等该如何初始化呢?
    的头像 发表于 03-18 11:02 215次阅读

    为什么stm32cubeide经常按住Ctrl+点击函数变量无法跳转到对应函数变量定义?

    为什么stm32cubeide经常按住Ctrl+点击函数变量无法跳转到对应函数变量定义。只能用全局搜索去找函数。
    发表于 03-13 07:59

    SCL中FB模块的结构

    模块FB是用于控制执行器和单元的功能模块或执行某一功能的其他FB的块。
    的头像 发表于 01-17 09:22 229次阅读
    SCL中<b class='flag-5'>FB</b>模块的结构

    西门子博途:调用FB(实例化)

    与功能块(FC)相比,功能块(FB)具有存储器。这意味着功能块被分配了一个本地数据块,即所谓的实例数据块。当调用FB时,还必须指定实例DB的编号,并且此DB会自动打开。
    的头像 发表于 12-25 11:04 937次阅读
    西门子博途:调用<b class='flag-5'>FB</b>(实例化)

    临时用电负荷计算时应注意的问题

    施工现场临时用电负荷计算方法有需用系数法、二项式法等,对于房屋建筑工程施工现场多采用需用系数法计算用电负荷。
    的头像 发表于 12-25 09:29 284次阅读

    for循环里的变量是局部变量

    对于一个普通for循环而言,循环变量是局部变量。在大多数编程语言中,循环变量只在循环内部的作用域中可见。换句话说,循环变量的声明和赋值仅在循
    的头像 发表于 11-23 14:50 1026次阅读

    什么是FB功能块?为什么要使用FB功能块?如何制作一个FB功能块?

      FB功能块是一种封装了特定逻辑功能的模块。它类似于一个子程序或函数,但是它有自己的内部变量和接口。FB功能块可以被多次调用,并且每次调用都会创建一个新的实例。
    的头像 发表于 11-09 16:13 1604次阅读
    什么是<b class='flag-5'>FB</b>功能块?为什么要使用<b class='flag-5'>FB</b>功能块?如何制作一个<b class='flag-5'>FB</b>功能块?

    如何优化DC/DC变换器中FB分压电阻的FB布线

    在 DC/DC 变换器中,反馈 (FB) 分压电阻的规格常给设计人员带来各种设计挑战,例如如何确定所需的电阻或调节参数(如输出电压、上分压电阻或下分压电阻)。 图 1 显示了 FB 上/下分压电
    的头像 发表于 08-17 17:04 1297次阅读
    如何优化DC/DC变换器中<b class='flag-5'>FB</b>分压电阻的<b class='flag-5'>FB</b>布线

    FC和NVMe FC Windows程序

    电子发烧友网站提供《FC和NVMe FC Windows程序.exe》资料免费下载
    发表于 08-07 10:52 2次下载
    <b class='flag-5'>FC</b>和NVMe <b class='flag-5'>FC</b> Windows程序

    西门子S7-1200PLC编程数组的使用方法

    从S7-1200 V4.2开始,FC的Input/Output/InOut以及FB的InOut可以定义形如Array[*]这种变长数组,要求必须是优化FC/FB块,在调用
    的头像 发表于 07-31 14:15 1405次阅读
    西门子S7-1200PLC编程数组的使用方法

    FC和NVMe FC Windows工具

    电子发烧友网站提供《FC和NVMe FC Windows工具.exe》资料免费下载
    发表于 07-28 09:17 0次下载
    <b class='flag-5'>FC</b>和NVMe <b class='flag-5'>FC</b> Windows工具

    PLC编程中OB块、FC块、FB块、DB块的使用原则

    西门子新加块中包含组织块(OB)、函数块(FB)、函数(FC)、数据块(DB)
    发表于 05-24 15:01 9962次阅读
    PLC编程中OB块、<b class='flag-5'>FC</b>块、<b class='flag-5'>FB</b>块、DB块的使用原则

    PLC FB函数块和FB函数如何调用?

    对于很多接触到SIMATIC系列PLC的新手玩家来说,例如在S7-1200或者S7-1500中,最常见的三个函数块:FCFB、DB,该如何调用是不太清楚的,包括小文在刚接触这个行业也还是个小白的时候,也不太明白,那时候觉得,只
    发表于 05-24 09:22 1888次阅读
    PLC <b class='flag-5'>FB</b>函数块和<b class='flag-5'>FB</b>函数如何调用?

    SAS:Data step中first和last变量的应用场景

    在SAS的data步中,可以使用by分组,在处理过程中会产生两个临时变量first.variable和last.variable,这两个临时变量的值不会写到结果中
    的头像 发表于 05-19 14:36 1649次阅读
    SAS:Data step中first和last<b class='flag-5'>变量</b>的应用场景

    西门子PLC动态加密计时程序设计

    首先调用RD_LOC_T读取日期时间存入到FB块本地临时变量中,读取秒数,根据秒数计算天数
    发表于 05-11 11:02 1123次阅读
    西门子PLC动态加密计时程序设计