component time "Time on in Hours, Minutes, Seconds"; description """ Time When either the time.N.start or time.N.pause bits goes true the cycle timer resets and starts to time until time.N.start AND time.N.pause go false. When the time.N.pause bit goes true timing is paused until time.N.pause goes false. If you connect time.N.start to halui.program.is-running and leave time.N.pause unconnected the timer will reset during a pause. See the example connections below for more information. Time returns the hours, minutes, and seconds that time.N.start is true. Sample PyVCP code to display the hours:minutes:seconds. "time-hours" ("Helvetica",14) "2d" "time-minutes" ("Helvetica",14) "2d" "time-seconds" ("Helvetica",14) "2d" In your post-gui.hal file you might use one of the following to connect this timer: For a new config: loadrt time addf time.0 servo-thread net cycle-timer time.0.start <= halui.program.is-running net cycle-timer-pause time.0.pause <= halui.program.is-paused net cycle-seconds pyvcp.time-seconds <= time.0.seconds net cycle-minutes pyvcp.time-minutes <= time.0.minutes net cycle-hours pyvcp.time-hours <= time.0.hours Previous to this version if you wanted the timer to continue running during a pause instead of resetting, you had to use a HAL NOT component to invert the halui.program.is-idle pin and connect to time.N.start as shown below: loadrt time loadrt not addf time.0 servo-thread addf not.0 servo-thread net prog-running not.0.in <= halui.program.is-idle net cycle-timer time.0.start <= not.0.out net cycle-seconds pyvcp.time-seconds <= time.0.seconds net cycle-minutes pyvcp.time-minutes <= time.0.minutes net cycle-hours pyvcp.time-hours <= time.0.hours For those who have this setup already, you can simply add a net connecting time.N.pause to halui.program.is-paused: net cycle-timer-pause time.0.pause <= halui.program.is-paused """; author "John Thornton, itaib, Moses McKnight"; license "GPL"; // Input Pins pin in bit start "Timer On"; pin in bit pause = 0 "Pause"; // Output Pins pin out u32 seconds "Seconds"; pin out u32 minutes "Minutes"; pin out u32 hours "Hours"; // Global Variables variable double totalnsec; variable int old_start; function _; ;; #include "rtapi_math.h" FUNCTION(_) { rtapi_u32 totalseconds; int running = start | pause; if(running && !old_start) totalnsec = 0; if(start && !pause){ totalnsec = totalnsec + period; totalseconds = totalnsec * 0.000000001; seconds = totalseconds % 60; minutes = (totalseconds / 60) % 60; hours = (totalseconds / 3600); } old_start = running; }