回复:S7-200smart 子程序调用问题

芳季

西门子1847工业学习平台

  • 帖子

    15507
  • 精华

    101
  • 被关注

    960

论坛等级:至圣

注册时间:2007-08-03

钻石 钻石 如何晋级?

发布于 2017-12-14 14:54:06

16楼

楼主,你估计,你做一个按钮启动按钮停止接触器自锁的这样的基本程序,你能够做成库程序,并可以完美使用吗?

你说过“按道理说局部变量是不会存在地址冲突的。”这个道理,你从哪里得到的消息的?你认真核实一下消息来源。

在同级子程序里面使用的L是同一个L,是相同的64字节的空间。所有级之间使用各自级所属的64字节空间。中断使用属于中断的64字节,中断属下下级的子程序以及所属嵌套,使用我暂未明确。

那么,你多次调用同一个子程序,也就是说(假设)主程序调用10次你这个子程序,这10次调用都是赋予一级子程序的级别,那么这10次都是使用相同的一片L空间。所以他们之间是共享这64字节的。也所以,他们之间是互相影响的。

你需要从共享的区域中重新安排属于本次调用的数据,你可以使用in或者in/out参数,从调用开始时,向L区注入适当的新值(此动作是系统完成的)。

L区仅仅是为你提供临时使用的空间让你开展运算,并没有义务为你保留任何值。因为你的调用一旦离开,轮到其他(一级)子程序使用的时候,别人也会把你的痕迹清场,开展他自己的工作。任何你觉得需要保留的数值,你必须使用in/out或者out参数把数据拉出去保存。(这个也是系统完成的)

以上一入一出的行为,就像你租用图书馆一个卡位进行做功课、自习。你必须带上自己的未完成作业,进去做,然后把做好的作业带回家。即使作业未完成,也要把做了一半的作业带回家。你明天再次进来的时候,你将不再看得见自己昨天的痕迹。(除非你离开之后再没有人来过。有这个可能性,那就是变成了一级子程序仅仅有一个。那就不是多次调用了。)

你必须明白,这个区域是共享的。但是不同于其他绝对地址的全局共享。

道理就先说这么多。你还是想想我头一行字给你的题目。看看?

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200

共有33257条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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