Я пытаюсь создать цикл, в котором он начнется со 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
,OneHundred
илиBatChargePercent
должны быть изменены внутри цикла, иначе цикл никогда не закончится. - person Sergey Romanov   schedule 05.12.2018