用SCL写延时启停的

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月2日 上午12:02
下一篇 2018年12月2日 上午12:02

相关推荐