登录
首页 PLC论坛 三菱Mitsubishi
回帖 发帖
正文

主题:请问关于调用子程序 问题

点击:3001 回复:5

各位高人 本人请问当程序调用子程序的时候  子程序中指令是否会对主程序产生影响
本人学习调用子程序仿真时候发现这样的问题 请指教
例子:---x0------call p0
       ----x1------set m0
----------------------fend
p0 -----x2------rst m0
   -----------------sret
当X1动作 SET MO 后 调用P0 X2动作 发现MO没有被 复位   请问调用子程序时候是否像跳转指令那样 处于被跳过指令程序段中的Y,M,S,即使梯形图中涉及的工作条件发生变化 他们的工作状态还保持跳转前的状态
请赐教 谢谢
10-06-02 18:49

引用 yuyinliu168 在 2010-6-2 18:49:53 发言【内容省略】

不清楚您如何模拟的,为何我无法模拟出您的问题?
因此,我特地录下屏幕状态,供您参考。而对于子程序来说,其存在限制,具体限制可以参考FX3U编程手册(即使您不使用FX3U,也建议参考FX3U的手册,除了清晰以外,其很多内容都值得参考,子程序限制在FX3U的第195页).
附件:
[本地下载]
Good Luck
10-06-02 20:00
您好 谢谢您的回答和录像 我是X1一直动作 按动X2而无法复位M0  您是点动 请问为什么呢  RST不是比SET更优先呢   还有我之前也测试一个程序
---X0---CALL P0
----X1----SET M0
----------FEND
P0  ----X2----RST M0
            -----SET M1
   -----X3-----CALL P1
P1 -----X4-----RST M1
--------------------SRET
-------------------SRET  得出这样的结果  调用P0 P1  X2一直动作 复位M0 和置位M1 然后按X4却能把M1复位   为什么这里X2一直动作X4却能够复位M1  而X1一直动作X2却不能复位M0需要X1断开后 才能复位M0  呢  
请指教 谢谢
10-06-02 20:38
您好 谢谢您的回答和录像 我是X1一直动作 按动X2而无法复位M0  您是点动 请问为什么呢  RST不是比SET更优先呢   还有我之前也测试一个程序
---X0---CALL P0
----X1----SET M0
----------FEND
P0  ----X2----RST M0
            -----SET M1
   -----X3-----CALL P1
P1 -----X4-----RST M1
--------------------SRET
-------------------SRET  得出这样的结果  调用P0 P1  X2一直动作 复位M0 和置位M1 然后按X4却能把M1复位   为什么这里X2一直动作X4却能够复位M1  而X1一直动作X2却不能复位M0需要X1断开后 才能复位M0  呢  
请指教 谢谢
10-06-02 20:39
附件
调试之后,一切正常,可以复位,call指令与cj的不同点在于,cj指令实行时,cj指令后没的程序是不能实行的,而call指令实行时,每个扫描周期所有的主程序都是实行的,sret是返回指令,就好比在主程序中加入了一些程序!
希望我的解释能帮到你!
10-06-02 21:18

引用 yuyinliu168 在 2010-6-2 20:38:19 发言【内容省略】

当程序中出现两个m0时,以最后的一个驱动m0为准,而你的最后一个m0是由x1置位的,当第一个调用复位就无效了!
10-06-02 21:22

工控新闻

更多新闻资讯