(**********************************)
(* First copy Inputs to Outputs *)
(**********************************)
P1StC:= xP1SC;
P2StC:= xP2SC;
P1SLH:= xP1SH;
P2SLH:= xP2SH;
P1CRT:= xP1CR;
P2CRT:= xP2CR;
P1TRT:= xP1TR;
P2TRT:= xP2TR;
RTCHr:= xRTCHr;
RTCLH:= xRTCLH;
(******************************)
(* Accumulate Pump Starts *)
(******************************)
(* Pump 1 Starts *)
IF (P1Running AND NOT P1Running_prev) THEN
P1StC := xP1SC + 1;
END_IF;
(* Pump 2 Starts *)
IF (P2Running AND NOT P2Running_prev) THEN
P2StC := xP2SC + 1;
END_IF;
(* Rollover Pump Starts every hour *)
IF xRTCHr <> xRTCLH THEN
P1SLH := xP1SC;
P1StC := 0;
P2SLH := xP2SC;
P2StC := 0;
RTCLH:= xRTCHr;
END_IF;
(*************************************)
(* Accumulate Runtime Statistics *)
(*************************************)
IF RTCSecs_prev > RTCSecs THEN
SecondsPassed := RTCSecs + (60 - RTCSecs_prev);
ELSE
SecondsPassed := RTCSecs - RTCSecs_prev;
END_IF;
(* Pump 1 Runtime *)
IF (P1Running) THEN
P1CRT := xP1CR + SecondsPassed;
P1TRT := xP1TR + SecondsPassed;
ELSE
P1CRT := 0;
END_IF;
(* Pump 2 Runtime *)
IF (P2Running) THEN
P2CRT := xP2CR + SecondsPassed;
P2TRT := xP2TR + SecondsPassed;
ELSE
P2CRT := 0;
END_IF;
(********************************************)
(* Update previous values for next scan *)
(********************************************)
P1Running_prev := P1Running;
P2Running_prev := P2Running;
RTCSecs_prev := RTCSecs;
P1StC
xP1SC
P2StC
xP2SC
P1SLH
xP1SH
P2SLH
xP2SH
P1CRT
xP1CR
P2CRT
xP2CR
P1TRT
xP1TR
P2TRT
xP2TR
RTCHr
xRTCHr
RTCLH
xRTCLH
P1Running
P1Running_prev
P2Running
P2Running_prev
RTCSecs_prev
RTCSecs
SecondsPassed