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

    文章

    4353

    浏览量

    86099
  • 堆栈
    +关注

    关注

    0

    文章

    182

    浏览量

    19811

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

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

收藏 人收藏

    评论

    相关推荐

    西门子TIA Portal函数FC和函数块FB的相互转换

    描述 本文将介绍在西门子 TIA Portal 中使用 Add-In 插件实现函数 FC 和函数块 FB 的相互转换的方法和步骤。 第1步: 添加 PLC 设备。 选择西门子 CPU 1214C
    的头像 发表于 01-15 10:07 298次阅读
    西门子TIA Portal<b class='flag-5'>中</b>函数<b class='flag-5'>FC</b>和函数块<b class='flag-5'>FB</b>的相互转换

    智慧用电解决方案在临时展会场所的应用

    【摘要】简述了商场临时展会、展摊等场所电气装置用电的特性,针对此类场所隐含的电气安全隐患问题,结合安科瑞智慧用电解决方案,从安全用电管理设备到平台软件等方面介绍了其安全保障技术,以保证此
    的头像 发表于 12-17 08:46 254次阅读
    智慧用电解决方案在<b class='flag-5'>临时</b>展会场所<b class='flag-5'>中</b>的应用

    fc—sc是什么尾纤

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

    逻辑异和逻辑的比较分析

    逻辑异(Exclusive OR,简称XOR)和逻辑(OR)是数字逻辑和编程两种基本的逻辑运算,它们各自具有独特的功能和应用场景。以下是对逻辑异和逻辑
    的头像 发表于 11-19 09:48 492次阅读

    图纸模板的文本变量

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

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

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

    Linux环境变量配置方法

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

    光纤跳线fc-lc干嘛用的

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

    探索kHz范围晶体单元FC-12M/FC-12M TYPE的特性与应用

    探索kHz范围晶体单元FC-12M/FC-12M TYPE的特性与应用
    的头像 发表于 07-18 16:27 377次阅读

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

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

    全局变量太多有哪些弊端?

    随着全局变量的增多,不同模块的变量名可能会产生冲突混淆,导致代码难以理解和维护。同时,全局变量使得代码的依赖关系变得复杂,难以追踪和理解
    发表于 04-24 09:15 942次阅读

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

    STEP7-5.5-F程序FB块修改后的变化
    发表于 04-07 11:46 733次阅读
    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 835次阅读
    如何调整S7-1500<b class='flag-5'>中</b>S7-GRAPH <b class='flag-5'>FB</b>的保持性属性

    C语言变量应用详解

    变量其实只不过是程序可操作的存储区的名称。C 每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存,运算
    发表于 03-18 11:18 455次阅读
    C语言<b class='flag-5'>变量</b>应用详解

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

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