发表于:2005-12-25 07:49:00
楼主
使用s7-224控制器,在主程序里多次调用同一个子程序时遇到了问题.
我的本意是有一个标准的子程序,可以多次的调用,每次调用应根据不同的输入,有相应的输出,且其中不希望有M和V这类的全局存储的地址.
* 第一种情况
在主程序中2次调用同一个子程序(子程序中没有上升,下降,计时和计数),子程序大概意思如下:
3个传递参数IN,3个输出参数OUT传递给,没有IN_OUT,其中子程序内部有set,set块置位了一个temp地址是L1.0,[color=#FF0000]这个temp值对输出有决定性影响[/color]
在主程序中第一次调用传递i0.0,i0.1,i0.2给IN参数,输出OUT参数输出给Q0.0,Q0.1,Q0.2
第二次调用传递I0.4,I0.5,I0.6给IN参数,输出OUT参数输出给Q0.4,Q0.5,Q0.6
当改变第一次调用的DI时(两次DI不同),两次调用的输出同时按照一样的规律变化,
想了下,觉得是这个temp对输出的影响,于是做了点改变就是下面的第二种情况
*第二种情况
把子程序复制成2个,然后分别调用2个子程序(但L局部存储的地址同第一种一样),分别测试两次调用,还是相互影响,第一次调用的输入同时改变两次调用的输出.
我想可能是因为两次调用的temp量地址是一样的.做了修改,见下
*第三种情况
改变子程序中的temp量,将原来的temp量L1.2放在IN_OUT中.有了好转,第一次调用的输入不影响第二次调用的输出.反过来也不影响.
我不知道这么做是否合理,
是不是不同的子程序里只要L存储的地址一样,就可以在子程序之间相互影响??
但从上面的情况看来,IN,OUT和IN_OUT的L存储地址一样,但不会在不同的调用中有影响.似乎是只有在temp里才会这样.
或者说用作参数传递的L存储器,即使地址一样也不会在不同的调用中相互影响,是这样么?
有没有更好的办法解决这种问题?请大家多指点~~