中国领先的工业平台

返回贤集网 返回微头条
贤集网技术微头条APP获取

求相助!遇到一个问题,写了一个如图所示的子程序,在...

 扬眉吐气

下载贤集网APP入驻自媒体

求相助!遇到一个问题,写了一个如图所示的子程序,在主程序中两次调用,但只有第一个调用有输入输出,第二个调用的输入好象未传入子程序,但输出完全与第一个输出同值且同步变化.不知道错在哪里?请高手指点,CPU226.感谢!

最新回复
发布回复
反复调用子程序时,调用计数,系统时钟,系统脉冲等指令需要慎重。程序扫描是从左至右,从上至下,看主程序:执行第一个调用子程序后,立马进入下一个子程序调用,那问题就来了:LD4是输出,并且在扫描到C100为ON时才输出,下一步是L20.0为ON,下一步跳出第一个子程序并进入第二个子程序,此时L20.0在扫描周期内被置位为ON,C100复位。也就是说主程序没进入第二个周期,C100就被复位了。所以第二个子程序永远只能读到第一个子程序的块输出。
个人感觉,是对局部变量的理解问题,子程序每个网络都有错误。程序中大量使用了局部变量,你把所有的局部变量变为全局变量就应该会好。网络1:L20.0 开始执行时,状态并不确定网络2:大量的局部变量,除DQSL外,均未赋值就使用,幸亏你没除法,否则会严重错误。网络3:输出DQLS,在C100断开时是无效输出 而此时对L20.0 赋值及LD16的清零,(截图无后面)如果该子程序中没有后续使用,则毫无意义。
我觉得像是一个扫描周期内调用子程序并不一定能完成6次计数运行.因此第二次调用后返回值一样,因你返回值用的是:LD C100........也即必须C100计数到后才输出.因此就只有第一次起作用.

为您推荐

热门交流