电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

子程序的局部变量表中的临时变量的状态为什么不能保持?

2017-03-12 17:02分类:PLC自学教材 阅读:

 

    只有在执行S7-200的子程序时,它定义的临时变量才被使用,执行完后,不再使用临时变量中的数值。S7-200的局部变量区是各子程序公用的,所以在调用别的子程序时,它们中的数据可能被覆盖掉。
    为了深入了解CPU对局部变量中的临时变量的处理,编写了下面的主程序和子程序:
                                  



子程序中局部变量的地址是按先后次序自动分配的。在0号子程序中对局部临时变量TMPl (LWO)加1,程序中的“#”号是CPU自动添加的。在1号子程序中,将局部临时变量TMP2 (LWO)清零。TMP1和TMP2分别是两个子程序中的局部临时变量,它们在局部变量表中的地址相同,均为LWO。
    将程序下载到PI_C后,用程序状态功能监视0号子程序。不论上次RUN模式时TMP1的值是多少,PLC进入RUN模式时,TMP1的值都会被清零。说明CPU在第1个扫描周期时将局部变量表的数据全部清零。
    如果只调用子程序0,每调用一次,TMPI的值加1,说明在停止调用时临时变量TMP1并未被清零。如果调用子程序1,TMP2的值被清零,因为TMP1和TMP2使用同一物理存储器字LWO,所以在监视子程序0时可以看到,rrMPI也被清零。
由此可以看出,各子程序的局部变量区是共用的。
    在10.0的上升沿调用0号中断程序,将局部变量TMP3(LWO)清零。在子程序0中可以看到它的临时变量TMP1(LWO)并未被清零。     由此可以看出,子程序和中断程序分别使用不同的局部变量区。
    值得注意的是没有调用该子程序时,用监视功能是看不见TMP1的当前值的。只有在11.0的上升沿,才能看到TMP1的值。TMP1被子程序1清零后,第1次调用子程序0时,看到的TMP1的值为1,因为在调用它时TMP1被加1。
    如果有PLC,很多问题都可以通过设计适当的程序,观察运行的结果,自己求出答案

上一篇:步在顺序控制中有什么作用?

下一篇:什么是动作?

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部