回复:200smart子程序的TEMP变量如何正确使用?

已锁定

zbhdm

  • 帖子

    1933
  • 精华

    2
  • 被关注

    18

论坛等级:至圣

注册时间:2007-05-30

钻石 钻石 如何晋级?

发布于 2020-01-13 21:22:22

17楼

展开查看
以下是引用sangshunyang在2020-01-13 17:43:21的发言 >15楼

这个需要探讨,最后一行。


可能是这个情况:

真对smart S7-200,一个子程序系统分配会分配64字节的存储空间,不会因调用不调用而丢失或重新分配,保存上一次调用后的值,不管是输入,输出,还是 临时类型的变量,也就是说这64字节就是给这个子程序的,用户可访问的是60个字节。

我做个测试,主程序,子程序如下:


1,主程序

子程序:



测试过程:

      主程序中先让M1.0    M0.0 接通  而后让 M0.0 断开。 

接下来让M1.0 接通  断开,接通断开多次(此时M0.0始终是0)。无论M1.0通断多少次  M0.1始终输出  1.


如下图:


  


说明程序中除晒出的代码没有其他任何代码


测试结果是 : 临时变量 LW1值不会随程序的调用次数而改变。是保留的上次调用的结果。


以下是引用yanxiao在2020-01-11 09:28:33的发言 >10楼:任何变量都要遵守先...

引用10楼详细内容:

任何变量都要遵守先赋值后使用,除非对其中的值没有价值的情况,可以不赋值。 有些变量看似没有赋值就可以使用。比如作为V区的全局变量。这个初值可以在下载程序时确定,也可以利用PLC的清零规则确定。 对于全局变量,变量的分配是可控的,且是编程者有意安排的,所以使用上清楚明白。 但是,临时变量,重点在‘临时’。临时变量在没有赋值前,也是有一个值的,只是这个值是什么,有没有价值,你无法把握。就因为它是临时使用,用完后系统会回收,用于别的用途,当第二回来再用时,已经物是人非了。

感谢sangshunyang的测试,

如果您多次调用子程序,可能就不一样了,现在我手头没有PLC,所以没有测试。

我个人认同yanxiao版主的观点(很多资料也是这样说明的)。

目前我只是对系统什么时间将这64字节的存储空间收回感觉不明白。

第一种收回情况:在子程序调用期间(就是EN端一直用SM0.0接通),系统将一直保持这64字节的存储空间不变,直至EN端没有使能了,或者说:子程序调用条件不再满足了,系统将收回这64字节的存储空间。

第二种收回情况:在子程序调用期间,扫描周期进入子程序就分配64字节的存储空间,扫描周期从子程序中出来,就将64字节的存储空间收回,扫描周期再次进入这个子程序,就再次分配64字节的存储空间......



如果是第一种分配情况,使用TEMP变量,我只需要给TEMP变量赋个初始值就可以了。如果是第二种情况,,,那我就对这个"TEMP"变量,不知道该咋用了。。。。

努力学习西门子
评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-200 SMART

共有9019条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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