FUNCTION_BLOCK FB999
VAR_IN_OUT
M0:INT:=0;//定义M0并初始化
END_VAR
VAR_TEMP
// Temporary Variables
END_VAR
VAR
pointer_i:INT:=1; // Static Variables
pointer_j:INT;
resetTime:BOOL;
actFlag:BOOL;
biVal:WORD;
CurrTime:S5TIME;
END_VAR
//M0=0为空,
//M0=101为自动清理 启动中 ,
//M0=102自动清理启动完成,
//M0=103启动中故障关闭,
//M0=104运行中故障关闭。
IF M0=101 THEN//如果点击启动清理自动
// FOR pointer_i:= 1 AND actFlag TO 17 BY 1 DO
WHILE resetTime=0 AND pointer_i<= 17 DO
DB6.DBX[pointer_i,0]:=1;// 启动设备
resetTime:=DB6.DBX[pointer_i,0];
IF pointer_i=17 THEN M0:=102; resetTime:=false;pointer_i:=1; END_IF;//如果最后一台设备启动完成,则指示为自动清理启动完成。
END_WHILE;
CurrTime:=S_ODT(T_NO :=T50,S:=resetTime,TV:=T#20s, R:=false,BI:=biVal,Q:=actFlag);//如果设备1输出后延时没有反馈,则认为 故障
//END_FOR;
IF actFlag THEN
IF DB6.DBX[pointer_i,1]=1 THEN //如果时间到达有反馈
resetTime:=false;
pointer_i:=pointer_i+1;
END_IF;
IF DB6.DBX[pointer_i,1]=0 THEN //如果时间到达没有反馈
FOR pointer_j:= 1 TO pointer_i BY 1 DO
DB6.DBX[pointer_j,0]:=0;// 关闭已经启动的所有设备
END_FOR;
M0:=pointer_i;//指示成启动过程i 中故障
resetTime:=false;
pointer_i:=1;
END_IF;
END_IF;
END_IF;
END_FUNCTION_BLOCK
以上我想像的运行。可是循环是不会延时运行的。怎么办?请大侠帮助
问题补充:
主要功能 是完成从1到20的循环,在1的时候 延时,2的时候也用同一个延时,一直到20
最佳答案
请参考:《 程序中如何延时,而且可随时暂停重启退出》
http://topic.csdn.net/u/20101016/13/5347304c-8ba1-4cff-a795-3e70f2709b3d.html
《 使用西门子的SCL语言编写ABB变频器的总线控制程序块 》
http://www.gongkong.com/webpage/*/200806/2008062014062500001.htm
提问者对于答案的评价:
已经写完了谢谢!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc245461.html