回复:Temp与Static区别的一个用法注意事项

已锁定

yming

西门子1847工业学习平台

  • 帖子

    23421
  • 精华

    891
  • 被关注

    1273

论坛等级:至圣

注册时间:2004-03-06

钻石 钻石 如何晋级?

发布于 2023-12-24 23:12:43

1楼

TEMP(临时变量)的概念可不是这样的。

每一个OB,FB,FC都可以声明Temp临时变量。它们仅是在被调用时,由操作系统,根据块声明,临时分配的内存空间。该块结束时,释放(收回)该空间。

若在一个块(例如FB10)内调用了自己(FB10)(递归),尽管Temp名称完全一样,系统也是再次分配该临时空间。在块结束返回时,收回临时空间。递归深度4层,即分配4次,4倍的临时空间。(每个临时空间仅属于自己的块。可以传递到下一“层”,作用域有效。)

如果若干块(OB、FB、FC)是多次单一调用,则最多可能占用的内存临时空间,仅是它们之中声明最多Temp的那个块空间。

中断使用的块也一样。

别说跨扫描周期了。主循环扫描中的每一个块结束,该空间都可能被中断功能块占用去了。


又如:OB1中声明了多个Temp,数据类型位、字节,整数、浮点等等。我可以反复地使用它们做暂存中间变量。因为是在OB1中,它们始终存在。

而在OB1中调用的FB11、FC22等等,块调用结束那一刻,它们声明的Temp全部被收回。

也就是说,Temp临时变量的作用域仅属于块。

FB的静态变量则不会。


块中声明的常量,则是附属于程序块的赋值,而不是调用时由系统分配,再赋值。


学而时习之,不亦说乎?温故而知新,不亦乐乎?
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有15585条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。