回复:关于有临时变量的fc,被别的程序打断,会出现的问题?

youhm

  • 帖子

    4924
  • 精华

    81
  • 被关注

    51

论坛等级:至圣

注册时间:2008-06-28

普通 普通 如何晋级?

发布于 2012-02-26 10:16:35

24楼

情况1:
FC1和FC2都是被OB1调用,处于同一等级,FC1执行完好,FC1原来使用的临时变量区域又被分配给FC2了,但这个区域并没有被清除,所以在FC2里得到了FC1里临时变量的值。
而FC3是被OB35调用,OB1和OB35不是同一个优先级别,它们分配的临时变量区域是独立的互不影响,所以FC3里的临时变量没有变化。
情况2:
版主笔误了,结果没写出来,应该是和情况1一样
区别在于有没有在Temp里定义临时变量,根据前面的测试,可以这样理解,直接在Temp里定义临时变量是显示定义,使用LW0这样相当于隐式定义。
情况3:
如果在FC1里再定义一个LW2,那么MW10又可以得到FC1里LW0的值了,经过多次测试发现,为FC分配临时变量区域,首先为块调用分配堆栈(V区属于块调用堆栈),调用FC至少分配一个字,调用FB分配3个字,然后分别本块里定义的L区变量(包含显式、隐式定义),最后分配下一级块的临时变量。
以下是FC1、FC2被OB1调用,FC2调用FC3的测试



当FC1分配的临时变量区域大于FC2分配的区域时,FC1使用过的临时变量区域除去重新分配给FC2剩下的就分配给了下一级的FC3了,这时FC3就有可能得到FC1里临时变量的值。




分析结果:
1.临时变量是谁的零时变量
临时变量最上层是属于OB组织块的,下层程序块根据调用结构分配
2.临时变量的分配原则
分配原则:首先为块调用分配块接口堆栈,然后从临时变量最高地址依次分配块里定义的临时变量,最后分配下一级的临时变量。
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54711条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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