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 调用结束就释放给系统了,其它后续程序可以任意使用。所以下列用法都是错误的:

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

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

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

审核编辑:郭婷

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

    关注

    13

    文章

    4316

    浏览量

    85861
  • 堆栈
    +关注

    关注

    0

    文章

    182

    浏览量

    19767

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

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

收藏 人收藏

    评论

    相关推荐

    fc—sc是什么尾纤

    Connector)连接器的光纤跳线。这种尾纤通常用于连接不同类型的光纤通信设备,如光纤收发器、光纤交换机、测试设备光纤配线架(ODF)等,以实现光纤信号在不同设备接口之间的传输。 二、连接器特点 FC连接器:
    的头像 发表于 12-05 10:48 166次阅读

    图纸模板的文本变量

    进行定义。无论是系统内置的变量,还是用户自定义的变量,都以这种方式表述。 系统内置文本变量 以下表格展示系统内置的文本变量,无需定义,可以直接使用: 比如说,如果在图纸编辑器
    的头像 发表于 11-13 18:21 179次阅读
    图纸模板<b class='flag-5'>中</b>的文本<b class='flag-5'>变量</b>

    如何在文本字段中使用上标、下标及变量

    在KiCad的任何文本字段,都可以通过以下的方式实现上标、下标、上划线以及显示变量及字段值的描述: 文本变量“文本变量”可以在 原理图设置->工程->文本
    的头像 发表于 11-12 12:23 115次阅读
    如何在文本字段中使用上标、下标及<b class='flag-5'>变量</b>

    Linux环境变量配置方法

    Linux上环境变量配置分为设置永久变量临时变量两种。环境变量设置方法同时要考虑环境Shell类型,不同类型的SHELL设置
    的头像 发表于 10-23 13:39 172次阅读

    光纤跳线fc-lc干嘛用的

    Connector)连接器,能够在FC接口设备和LC接口设备之间进行灵活连接。以下是关于光纤跳线FC-LC的详细用途: 一、设备互连 在数据中心局域网,经常需要将使用LC连接器的
    的头像 发表于 10-11 10:25 575次阅读

    CC2340R5有没有变量可以代替直接使用地址0x400043FC,该如何使用?

    我现在需要SYS0_DEVICED内存中高位数据,目前在内存对应的是0x400043FC。 SYS0_DEVICED会一直是0x400043FC吗? 有没有变量可以代替直接使用地址
    发表于 05-30 08:21

    STEP7-5.5-F程序FB块修改后的变化

    STEP7-5.5-F程序FB块修改后的变化
    发表于 04-07 11:46 648次阅读
    STEP7-5.5-F程序<b class='flag-5'>中</b><b class='flag-5'>FB</b>块修改后的变化

    如何调整S7-1500S7-GRAPH FB的保持性属性

    FB 块属性“优化的块访问”默认勾选并且显示灰色无法操作,如图 2 所示。对于需要从CPU停止时所处步号继续运行的应用场合,必须设置保持性属性为“保持”。
    发表于 04-03 09:17 742次阅读
    如何调整S7-1500<b class='flag-5'>中</b>S7-GRAPH <b class='flag-5'>FB</b>的保持性属性

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

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

    西门子博途:SCLFB模块的结构

    模块FB是用于控制执行器和单元的功能模块执行某一功能的其他FB的块。 VASS库不可用的块必须由系统供应商与负责的标准化电气工程部门协商创建。
    发表于 01-18 10:38 1451次阅读
    西门子博途:SCL<b class='flag-5'>中</b><b class='flag-5'>FB</b>模块的结构

    SCLFB模块的结构

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

    智能安全配电装置在临时展会场所的应用

    ​ 智能安全配电装置在临时展会场所的应用 【摘要】 简述了商场临时展会、展摊等场所电气装置用电的特性,针对此类场所隐含的电气安全隐患问
    的头像 发表于 01-16 13:50 311次阅读
    智能安全配电装置在<b class='flag-5'>临时</b>展会场所<b class='flag-5'>中</b>的应用

    自动控制系统的操纵变量指什么

    自动控制系统的操纵变量指的是在系统由控制器控制的可调节参数,用于调节改变被控对象的输出状态。操纵
    的头像 发表于 01-15 11:29 5267次阅读

    C语言:指针内存是如何存放变量

    在程序定义一个变量,那么在程序编译的过程,系统会根据你定义变量的类型来分配「相应尺寸」的内存空间。那么如果要使用这个变量,只需要用
    发表于 01-08 10:14 477次阅读

    Linux环境变量配置方法

    想必大家平时工作也会配置Linux的环境变量,但是可能也仅仅是为解决某些工具的运行环境,对于Linux环境变量本身的配置学问还没深入了解。今天浩道跟大家分享Linux环境
    的头像 发表于 01-04 09:51 547次阅读