【发布时间】:2019-01-21 16:52:18
【问题描述】:
我正在尝试创建一个循环,它将从 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 毫秒没有任何事情发生。
【问题讨论】:
-
嗨托尼!由于您没有提供完整的示例,因此有点难以理解代码。有必要拥有软件的所有声明。但我可以立即明白为什么它没有跳出循环。您似乎没有更改变量 Solar_Power_House_W_Solar_PER 也没有更改变量 BatChargePercent。 WHILE 循环开始时他们持有的任何值都是他们将保留的值。
-
是的,这是更大代码的一部分。 Solar_Power_House_W_Solar_PER 是根据仪表读数计算的百分比,这将确定它是否进入或退出循环。更详细地说,当它运行时,条件得到满足,因此它在每个 for 循环周期中将充电率更改 1%。问题是它的循环速度太快,例如当它在不到一秒的时间内从 100% 变为 30% 时,系统对变化的反应不够快,因此它会循环回到 100% 并一遍又一遍地下降。所以我尝试添加延迟,但它会导致问题
-
Solar_Power_House_W_Solar_PER,OneHundred或BatChargePercent必须在循环内更改,否则循环将永远不会结束。
标签: plc structured-text