技术论坛

 回复:子程序相互干扰的问题

返回主题列表
作者 主题
Automann
至圣

经验值:18299
发帖数:6168
精华帖:137
楼主    2012-10-18 07:49:54
主题:子程序相互干扰的问题
两个子程序的局部变量和程序完全相同(见下面右图),I0.0为1时Q0.0和Q1.0同时变为1,为什么?
主程序转换为STL后:
LD SM0.0
= L60.0
LD I0.0
= L63.7
LD L60.0
CALL SBR_0:SBR0, L63.7, Q0.0



追求完美
芳季
至圣

经验值:72120
发帖数:15507
精华帖:101
2楼    2012-10-18 12:22:22
精华帖  主题:回复:子程序相互干扰的问题
因为你以为set指令不执行的时候线圈会off。然而。set指令不执行的时候是保持线圈原有的状态。
那原有的是什么状态呢?
你设定成了out参数。也就是说进入子程序的时候不对他进行初始化,也就是说仍然保持原值。
那原有的是什么状态呢?
这个值就是L本身的值。这个值是谁给的呢?可以追索到上次调用子程序的是谁。
是子程序自己。(连自己做过的事情都忘记了吗?不会忘的,真的不会忘的。)是 “1”。所以出现了你看见的1。
仔细斟酌上面的过程。你会发现当set指令rst指令在不执行的时候对象的值是不确定的。所以两个指令不可以在多次调用的子程序上用。除非设定成in/out。但是通常这样做都失去set指令的作用。倒不如用out指令代替set和rst。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。