恭喜,你发布的帖子
发布于 2020-01-13 21:22:22
17楼
这个需要探讨,最后一行。
可能是这个情况:
真对smart S7-200,一个子程序系统分配会分配64字节的存储空间,不会因调用不调用而丢失或重新分配,保存上一次调用后的值,不管是输入,输出,还是 临时类型的变量,也就是说这64字节就是给这个子程序的,用户可访问的是60个字节。
我做个测试,主程序,子程序如下:
1,主程序
子程序:
测试过程:
主程序中先让M1.0 M0.0 接通 而后让 M0.0 断开。
接下来让M1.0 接通 断开,接通断开多次(此时M0.0始终是0)。无论M1.0通断多少次 M0.1始终输出 1.
如下图:
说明程序中除晒出的代码没有其他任何代码
测试结果是 : 临时变量 LW1值不会随程序的调用次数而改变。是保留的上次调用的结果。
感谢sangshunyang的测试,
如果您多次调用子程序,可能就不一样了,现在我手头没有PLC,所以没有测试。
我个人认同yanxiao版主的观点(很多资料也是这样说明的)。
目前我只是对系统什么时间将这64字节的存储空间收回感觉不明白。
第一种收回情况:在子程序调用期间(就是EN端一直用SM0.0接通),系统将一直保持这64字节的存储空间不变,直至EN端没有使能了,或者说:子程序调用条件不再满足了,系统将收回这64字节的存储空间。
第二种收回情况:在子程序调用期间,扫描周期进入子程序就分配64字节的存储空间,扫描周期从子程序中出来,就将64字节的存储空间收回,扫描周期再次进入这个子程序,就再次分配64字节的存储空间......
如果是第一种分配情况,使用TEMP变量,我只需要给TEMP变量赋个初始值就可以了。如果是第二种情况,,,那我就对这个"TEMP"变量,不知道该咋用了。。。。
请填写推广理由:
分享
只看
楼主