Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TYPE "udtRunningTimer"
- VERSION : 0.1
- STRUCT
- udiSetDays : UDInt := 1; // Timer set day count
- usSetHours : USInt := 10; // Timer set hours count
- usSetMinutes : USInt := 25; // Timer set minutes count
- usSetSeconds : USInt := 13; // Timer set seconds count
- udiDaysLeft : USInt;
- usHoursLeft : USInt;
- usMinutesLeft : USInt;
- usSecondsLeft : USInt;
- bSetTimer : BOOL; // Activate new timer PT
- bStartTimer : BOOL; // Start timer
- timUser : TIME; // Calculated time offset
- timLeft : TIME; // Left time
- END_STRUCT;
- END_TYPE
- FUNCTION "fcConvParamToLTime" : VOID
- { S7_Optimized_Access := 'TRUE' }
- VERSION : 0.1
- VAR_INPUT
- udiDays : UDInt; // Days left
- usHours : USInt; // Hours left
- usMins : USInt; // Minutes left
- usSecs : USInt; // Seconds left
- END_VAR
- VAR_OUTPUT
- outTIME_LTIME : Variant; // Output is TIME or LTIME
- END_VAR
- VAR_TEMP
- ltimTotal : LTime;
- END_VAR
- BEGIN
- (*
- fcConvParamToLTime
- adfox@horsefucker.org
- Convert parameters to LTime
- *)
- #ltimTotal := LT#0ms;
- #ltimTotal := INT_TO_LTIME(USINT_TO_INT(#usSecs) * 1000);
- #ltimTotal := #ltimTotal + DINT_TO_LTIME(USINT_TO_DINT(#usMins) * 60000);
- #ltimTotal := #ltimTotal + DINT_TO_LTIME(USINT_TO_DINT(#usHours) * 3600000);
- #ltimTotal := #ltimTotal + LINT_TO_LTIME(UDINT_TO_LINT(#udiDays) * (24 * 3600000));
- #ltimTotal := #ltimTotal * 1000000;
- IF TypeOf(#outTIME_LTIME) = LTime THEN
- // -- LTIME
- //
- VariantPut(SRC := #ltimTotal,
- DST := #outTIME_LTIME);
- ELSIF TypeOf(#outTIME_LTIME) = TIME THEN
- // -- TIME
- //
- IF #ltimTotal > T#24D THEN
- #ltimTotal := T#24D;
- END_IF;
- VariantPut(SRC := LTIME_TO_TIME(#ltimTotal),
- DST := #outTIME_LTIME);
- ELSE
- // -- Error
- //
- #ltimTotal := T#0ms;
- VariantPut(SRC := #ltimTotal,
- DST := #outTIME_LTIME);
- ENO := FALSE;
- END_IF;
- END_FUNCTION
- FUNCTION "fcConvTimeToDHMS" : VOID
- { S7_Optimized_Access := 'TRUE' }
- VERSION : 0.1
- VAR_INPUT
- timInput : TIME; // Input time
- END_VAR
- VAR_OUTPUT
- usDays : USInt; // Days left
- usHours : USInt; // Hours left
- usMins : USInt; // Minutes left
- usSecs : USInt; // Seconds left
- END_VAR
- VAR_TEMP
- udiDiffSec : UDInt; // Time difference in seconds
- END_VAR
- BEGIN
- (*
- fcTimerRemainL
- adfox@horsefucker.org
- This function is used to convert TIME into
- days, hours, minutes and seconds.
- *)
- #udiDiffSec := TIME_TO_UDINT(#timInput) / 1000; // -- Get total seconds
- #usDays := UDINT_TO_USINT(#udiDiffSec / 86400); // -- Get days left
- #usHours := UDINT_TO_USINT((#udiDiffSec MOD 86400) / 3600); // -- Get hours left
- #usMins := UDINT_TO_USINT((#udiDiffSec MOD 3600) / 60); // -- Minutes
- #usSecs := UDINT_TO_USINT(#udiDiffSec MOD 60); // -- Seconds
- END_FUNCTION
- FUNCTION_BLOCK "fbTestTimer"
- { S7_Optimized_Access := 'TRUE' }
- VERSION : 0.1
- VAR_IN_OUT
- udtTimer : "udtRunningTimer"; // HMI Struct
- END_VAR
- VAR
- "Timer" {InstructionName := 'TON_TIME'; LibVersion := '1.0'} : TON_TIME; // TON Timer
- END_VAR
- BEGIN
- // -- Convert D/H/M/S To time or Ltime
- //
- "fcConvParamToLTime"(udiDays := #udtTimer.udiSetDays,
- usHours := #udtTimer.usSetHours,
- usMins := #udtTimer.usSetMinutes,
- usSecs := #udtTimer.usSetSeconds,
- outTIME_LTIME => #udtTimer.timUser);
- // -- Increment comamnd
- //
- IF #udtTimer.bSetTimer
- THEN
- PRESET_TIMER(PT := #udtTimer.timUser, // -- Set timer value
- TIMER := #Timer);
- #udtTimer.bSetTimer := FALSE;
- END_IF;
- // -- Start Timer
- //
- #Timer(IN:=#udtTimer.bStartTimer,
- PT:=#udtTimer.timUser
- );
- //-- Calculate left time
- #udtTimer.timLeft := #Timer.PT - #Timer.ET;
- // -- Running timer left time
- //
- "fcConvTimeToDHMS"(timInput:=#udtTimer.timLeft,
- usDays=>#udtTimer.udiDaysLeft,
- usHours=>#udtTimer.usHoursLeft,
- usMins=>#udtTimer.usMinutesLeft,
- usSecs=>#udtTimer.usSecondsLeft);
- END_FUNCTION_BLOCK
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement