写了一个泵和阀门的控制子函数,开机第一次调用时正常(开启时先开阀门延时2S再开泵,关闭时先关泵延时2S再关阀。)。但是第二次接通这个启停(M20.1)时,泵和阀同时启动,关闭时泵和阀同时关闭,延时未起到作用。
不是很了解西门子这个子函数的调用逻辑。还是说帮助文档里我没看到。


以下是程序:
#开关正跳变(CLK:=#启停,Q=> #启动开始计时);
IF #启动开始计时 = 1
THEN
#阀1 := 0;
#阀2 := 0;
#泵 := 0;
#启动开始 := 0;
#关闭开始 := 0;
#启动开始 := 1;
END_IF;
IF #启动开始 = TRUE
THEN
#阀1 := TRUE;
#阀2 := TRUE;
#TIME1(IN :=#启动开始, //开始检测延时启动
PT := #延时时间,
Q => #打开泵 );
// ET => #打开延时当前时间
IF #打开泵 = true
THEN
#泵 := true;
#启动开始 := 0;
#打开泵 := 0;
#启动中间量 := 0;
// #启停 := 0;
//#打开延时当前时间 := #"TIME-A";
END_IF;
END_IF;
#开关负跳变(CLK:=#启停,Q=> #关闭开始计时);
IF #关闭开始计时 = 1
THEN
#关闭开始 := 1;
#启动开始 := 0;
END_IF;
IF #关闭开始 = true
THEN
#泵 := FALSE;
#TIME2(IN := #关闭开始,
PT := #延时时间,
Q => #关闭延时到达);
// ET => #关闭延时当前时间
IF #关闭延时到达 = true
THEN
#阀1 := FALSE;
#阀2 := FALSE;
#关闭开始 := 0;
#关闭延时到达 := 0;
#关闭中间量 := 0;
// #启停 := 0;
// #关闭延时当前时间 := #"TIME-A";
END_IF;
END_IF;