在使用子程序构建自定义功能块时,里面的L类型的地址有个疑问:假设在执行子程序时发生中断,那么当中断执行完毕回来再次执行子程序时,使用L类型地址保存的数据是否还正常,也就是这些局部变量是否在子程序暂时不执行时,还保持数据;另外,局部变量里可以选择INOUT,TEMP两种处理中间运算,这两种有什么区别?
问题补充:
在多次调用同一个子程序时发现有干扰,我通过全局变量将子程序内的局部变量的实时值传出来发现:在每次调用子程序的时候,内部的局部变量temp中的数据是一直保持着的,如图中所示,执行定时器功能子程序,当我执行程序段1,一段时间后停止,这时的temp=A(非零值),然后启动程序段2,这时我发现,内部使用的temp局部变量是从A开始计数的,也就是说内部的temp值是保持的,那么在多次调用同一个子程序时不是要相互干扰?
图片说明:
最佳答案
是这样理解子程序调用问题的。
当子程序离开时,这些局部变量的数据才被释放出来,变为随机数据,调用时不被释放。
当触发了中断时,plc优先执行中断子程序内容,而这时,子程序并没有离开,所以,你的顾虑是不必要的。
局部变量只能是temp变量,inout是接口变量区。
补充问题回复:
局部变量temp的调用原则,必须是先赋值后使用。
你的图片没有子程序的具体内容,不好评判其中的原因。
提问者对于答案的评价:
从监控到的数据看确实是保持的,如果不是执行中断,而是同一个子程序多次调用,那么相互之间就会存在数据干扰,除非每次执行一个子程序,内部的temp变量都重新初始化
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc287754.html