网友秀全说:“我编写的功能FC1里边有一个SR置位复位块,在OB1调用4次FC1,怎么搞也不行,后来我把它改为分开的置位、复位指令就好了。我怎么也想不明白怎么回事。”
下图是他的FC的局部程序。
首先要注意SR触发器用来对图中的M0.0置位和复位,同时也对Q输出端可选的BOOL变量置位和复位。程序中的M0.0和局部变量#zuudianyuan(主电源)的作用是重复的,可以只用其中之一。
SR触发器有记忆和保持的功能。调用一次FC1,M0.0用来记忆一台设备的启动、停止命令。调用两次FC1,能用M0.0同时记忆两台设备的启动、停止命令吗?当然不行。
要想多次调用FC,其中有记忆功能的变量不能使用绝对地址,也不能使用局部变量中的临时变量。
最简单的解决方法是删除图中的线圈,将M0.0改为要控制的#zuudianyuan。
对于S7-300来说,SR方框上的地址可以使用输出参数。但是对于S7-200的子程序(相当于S7-300的FC),如果使用输出参数,多次调用该子程序时就会出错。应改为IN_OUT参数。