FUNCTION_BLOCK FB 1
TITLE =
VERSION : 0.1
VAR_INPUT
iSegment1Hours : INT ;
iSegment1Minutes : INT ;
iSegment2Hours : INT ;
iSegment2Minutes : INT ;
iSegment3Hours : INT ;
iSegment3Minutes : INT ;
bSegment1Start : BOOL ;
bSegment2Start : BOOL ;
bSegment3Start : BOOL ;
END_VAR
VAR_OUTPUT
bTimer1Timing : BOOL ;
bTimer2Timing : BOOL ;
bTimer3Timing : BOOL ;
END_VAR
VAR
fbTimer1 : SFB4;
fbTimer2 : SFB4;
fbTimer3 : SFB4;
bTimer1StartEdge : BOOL ;
bTimer1FinishEdge : BOOL ;
END_VAR
VAR_TEMP
Times : ARRAY [1 .. 3 ] OF TIME ;
ElapsedTimes : ARRAY [1 .. 3 ] OF TIME ;
ElapsedHours : ARRAY [1 .. 3 ] OF INT ;
ElapsedMinutes : ARRAY [1 .. 3 ] OF INT ;
END_VAR
BEGIN
NETWORK
TITLE =calc time in ms for sfb4
L #iSegment1Hours;
L L#3600000;
*D ;
T #Times[1];
L #iSegment1Minutes;
L L#60000;
*D ;
L #Times[1];
+D ;
T #Times[1];
L #iSegment2Hours;
L L#3600000;
*D ;
T #Times[2];
L #iSegment2Minutes;
L L#60000;
*D ;
L #Times[2];
+D ;
T #Times[2];
L #iSegment3Hours;
L L#3600000;
*D ;
T #Times[3];
L #iSegment3Minutes;
L L#60000;
*D ;
L #Times[3];
+D ;
T #Times[3];
NETWORK
TITLE =iec timer
A #bSegment1Start;
= L 36.0;
BLD 103;
CALL #fbTimer1 (
IN := L 36.0,
PT := #Times[1],
ET := #ElapsedTimes[1]);
NOP 0;
NETWORK
TITLE =iec timer
A #bSegment2Start;
= L 36.0;
BLD 103;
CALL #fbTimer2 (
IN := L 36.0,
PT := #Times[2],
ET := #ElapsedTimes[2]);
NOP 0;
NETWORK
TITLE =iec timer
A #bSegment3Start;
= L 36.0;
BLD 103;
CALL #fbTimer3 (
IN := L 36.0,
PT := #Times[3],
ET := #ElapsedTimes[3]);
NOP 0;
NETWORK
TITLE =timer timing
A #bSegment1Start;
AN #fbTimer1.Q;
= #bTimer1Timing;
NETWORK
TITLE =timer timing
A #bSegment2Start;
AN #fbTimer2.Q;
= #bTimer2Timing;
NETWORK
TITLE =timer timing
A #bSegment3Start;
AN #fbTimer3.Q;
= #bTimer3Timing;
NETWORK
TITLE =give elapsed time in hours/mins
L #ElapsedTimes[1];
L L#3600000;
/D ;
T #ElapsedHours[1];
L L#3600000;
*D ;
L #ElapsedTimes[1];
TAK ;
-D ;
L L#60000;
/D ;
T #ElapsedMinutes[2];
L #ElapsedTimes[2];
L L#3600000;
/D ;
T #ElapsedHours[2];
L L#3600000;
*D ;
L #ElapsedTimes[2];
TAK ;
-D ;
L L#60000;
/D ;
T #ElapsedMinutes[2];
L #ElapsedTimes[3];
L L#3600000;
/D ;
T #ElapsedHours[3];
L L#3600000;
*D ;
L #ElapsedTimes[3];
TAK ;
-D ;
L L#60000;
/D ;
T #ElapsedMinutes[3];
END_FUNCTION_BLOCK