首页 > 解决方案 > plc结构化文本循环延迟

问题描述

我试图有一个循环,它将从 100 开始并下降,直到它达到 while 条件不再成立的点。

我从

While Solar_Power_House_W_Solar_PER <= OneHundred AND BatChargePercent < OneHundred DO
    State_Dis_Charge := false
    FOR PLC_SetLoopChargeValue:= 100 TO 0 By -1  DO
        ConvertoReal   := INT_TO_LREAL(PLC_SetLoopChargeValue);
        Divide         := ConvertoReal DIV(100);
        PLC_SetCharge  := Divide;         
        PLC_Charge     := 1500 * PLC_SetCharge; 
        RB_Charge      := PLC_Charge;
        Visual_RBPower := 1500 * PLC_SetCharge;    (*Charge *) 
    END_FOR;

我认为我遇到的问题是它循环太快,所以条件永远不会退出 while 循环,因为系统更新需要一段时间,所以我想添加一个延迟部分:

While Solar_Power_House_W_Solar_PER <= OneHundred AND BatChargePercent < OneHundred DO
    State_Dis_Charge := false;
    wait(IN:=not wait.Q , PT:=T#50ms);
    if Wait.Q Then 
        FOR PLC_SetLoopChargeValue:= 100 TO 0 By -1  DO
            ConvertoReal   := INT_TO_LREAL(PLC_SetLoopChargeValue);
            Divide         := ConvertoReal DIV(100);
            PLC_SetCharge  := Divide;         
            PLC_Charge     := 1500 * PLC_SetCharge; 
            RB_Charge      := PLC_Charge;
            Visual_RBPower := 1500 * PLC_SetCharge;    (*Charge *) 
        END_FOR; 
    END_IF;
END_WHILE;     

我认为它应该如何工作是每 50 毫秒 1 个 for 循环应该运行。目前,每 50 毫秒没有任何事情发生。

标签: plcstructured-text

解决方案


有了这个答案,我只能解决您的问题,即 for 循环不是每 50 毫秒执行一次。Solar_Power_House_W_Solar_PER除非变量并且BatChargePercent未在并行线程中更改,否则为什么无法退出 while 循环的其他答案是正确的。

我建议wait是一个 TON 功能块。请注意,FB 的名称区分大小写:wait.Q可能是不相等Wait.Q的。我认为这是您的 for 循环未执行的主要原因,因为您检查了另一个 FB 的输出。也许检查您的声明列表中是否有大写或小写的双打。

另一种可能性是,您的 while 循环条件根本没有得到满足,您也没有注意到。在这种情况下,for 循环当然也不会被执行。


推荐阅读