[WO#] machine description status =setup =production =suspended operator minimum cycle (0.000) nominal cycle (0.000) maximum cycle (0.000) downtime limit (0.000) current cycle (0.000) previous cycle (0.000) line status color job status color job start date (yyyy/MM/dd HH:mm:ss.fff) job runtime (0.000) job runtime in hours (0.000) job suspended (0.000) job cycle count (0) job downtime (0.000) job downtime in hours (0.000) job downtime occurs (0) job average cycle (0.000) job average efficiency (0.000) job run cycle (0.000) job run efficiency (0.000) job required by date (yyyy/MM/dd) job OEE availability (0.000) job OEE performance (0.000) shift shift runtime (0.000) shift runtime in hours (0.000) shift runtime in HHmmss (HH:mm:ss) shift cycle count (0) shift downtime (0.000) shift downtime occurs (0) shift average cycle (0.000) shift average efficiency (0.000) shift run cycle (0.000) shift run efficiency (0.000) DOWN downtime duration (0.000) last downtime start date (yyyy/MM/dd HH:mm:ss.fff) last downtime end date (yyyy/MM/dd HH:mm:ss.fff) last downtime duration (0.000) last downtime reason machine = JOB.TRACKER_LINE job start date = JOB.STARTDATE current cycle = CURRENT.SECONDS previous cycle = LASTFULL.SECONDS **** COUNT RESETS if CURRENT.EVENT="TRUE" then CLEAR shift runtime if CURRENT.EVENT="TRUE" then CLEAR shift cycle count if CURRENT.EVENT="TRUE" then CLEAR shift downtime if CURRENT.EVENT="TRUE" then CLEAR shift downtime occurs **** CURRENT SHIFT if shift = NULL then shift = CURRENT.EVENT_TEXT if CURRENT.EVENT="TRUE" then shift = CURRENT.EVENT_TEXT **** RUNTIME, CYCLE COUNTS AND JOB SUSPENDED if previous.status = "production" and status = "production" and not CURRENT.SUSPENDED then job runtime = job runtime + (CURRENT.SECONDS - PREVIOUS.SECONDS) job runtime in hours = job runtime / 3600 if status = "production" and not CURRENT.SUSPENDED and not CURRENT.PARTIAL then job cycle count = job cycle count + 1 if previous.status = "production" and status = "production" and not CURRENT.SUSPENDED then shift runtime = shift runtime + (CURRENT.SECONDS - PREVIOUS.SECONDS) shift runtime in hours = shift runtime / 3600 shift runtime in HHmmss = shift runtime if status = "production" and not CURRENT.SUSPENDED and not CURRENT.PARTIAL then shift cycle count = shift cycle count + 1 if previous.status = "production" and status = "production" and CURRENT.SUSPENDED then job suspended = job suspended + (CURRENT.SECONDS-PREVIOUS.SECONDS) **** DOWNTIME if previous.status = "production" and status = "production" and not CURRENT.SUSPENDED and downtime limit > 0 and current cycle > downtime limit then DOWN = "TRUE" else DOWN = "FALSE" if (previous.DOWN = "FALSE" or previous.DOWN = NULL) and DOWN = "TRUE" then last downtime start date = LASTFULL.TIMESTAMP + downtime limit if (previous.DOWN = "FALSE" or previous.DOWN = NULL) and DOWN = "TRUE" then job downtime occurs = job downtime occurs + 1 if (previous.DOWN = "FALSE" or previous.DOWN = NULL) and DOWN = "TRUE" then shift downtime occurs = shift downtime occurs + 1 if (previous.DOWN = "FALSE" or previous.DOWN = NULL) and DOWN = "TRUE" then CLEAR last downtime end date if (previous.DOWN = "FALSE" or previous.DOWN = NULL) and DOWN = "TRUE" then CLEAR last downtime duration if (previous.DOWN = "FALSE" or previous.DOWN = NULL) and DOWN = "TRUE" then CLEAR last downtime reason if (previous.DOWN = "FALSE" or previous.DOWN = NULL) and DOWN = "TRUE" then CLEAR downtime duration if (previous.DOWN = "FALSE" or previous.DOWN = NULL) and DOWN = "TRUE" then SNAPSHOT last downtime start date if previous.DOWN = "TRUE" and DOWN = "TRUE" then downtime duration = downtime duration + (CURRENT.SECONDS - PREVIOUS.SECONDS) if previous.DOWN = "TRUE" and DOWN = "TRUE" then job downtime = job downtime + (CURRENT.SECONDS - PREVIOUS.SECONDS) job downtime in hours = (job downtime - ((job downtime \ 86400) * 86400)) / 3600 if previous.DOWN = "TRUE" and DOWN = "TRUE" then shift downtime = shift downtime + (CURRENT.SECONDS - PREVIOUS.SECONDS) if previous.DOWN = "TRUE" and DOWN = "FALSE" then last downtime end date = CURRENT.TIMESTAMP if previous.DOWN = "TRUE" and DOWN = "FALSE" then last downtime duration = CURRENT.TIMESTAMP - last downtime start date if previous.DOWN = "TRUE" and DOWN = "FALSE" then job downtime = previous.job downtime + (CURRENT.SECONDS - PREVIOUS.SECONDS) if previous.DOWN = "TRUE" and DOWN = "FALSE" then shift downtime = previous.shift downtime + (CURRENT.SECONDS - PREVIOUS.SECONDS) if previous.DOWN = "TRUE" and DOWN = "FALSE" then CLEAR downtime duration if previous.DOWN = "TRUE" and DOWN = "FALSE" then SNAPSHOT last downtime end date **** CALCULATIONS job average cycle = job runtime / job cycle count job average efficiency = (nominal cycle / job average cycle) * 100 job run cycle = (job runtime - job downtime) / job cycle count job run efficiency = (nominal cycle / job run cycle) * 100 job OEE availability = (job runtime - job downtime) / job runtime job OEE performance = nominal cycle / ((job runtime - job downtime) / job cycle count) shift average cycle = shift runtime / shift cycle count shift average efficiency = (nominal cycle / shift average cycle) * 100 shift run cycle = (shift runtime - shift downtime) / shift cycle count shift run efficiency = (nominal cycle / shift run cycle) * 100 **** LINE STATUS COLORS line status color = COLOR_GREEN if status = "production" and CURRENT.PARTIAL and previous cycle < minimum cycle then line status color = COLOR_MAGENTA if status = "production" and not CURRENT.PARTIAL and current cycle < minimum cycle then line status color = COLOR_MAGENTA if status = "production" and maximum cycle > 0 and CURRENT.PARTIAL and previous cycle > maximum cycle then line status color = COLOR_YELLOW if status = "production" and maximum cycle > 0 and not CURRENT.PARTIAL and current cycle > maximum cycle then line status color = COLOR_YELLOW if DOWN = "TRUE" then line status color = COLOR_RED if CURRENT.SUSPENDED then line status color = COLOR_ROYALBLUE **** JOB STATUS COLORS job status color = COLOR_MEDIUMSEAGREEN if status = "production" and (job average cycle < minimum cycle ) then job status color = COLOR_VIOLET if status = "production" and maximum cycle > 0 and (job average cycle > maximum cycle) then job status color = COLOR_KHAKI if CURRENT.SUSPENDED then job status color = COLOR_ROYALBLUE **** ALERTS if previous.DOWN = "FALSE" and DOWN = "TRUE" then ALERT machine down if previous.DOWN = "TRUE" and DOWN = "TRUE" and previous.downtime duration <= 150 and downtime duration > 150 then ALERT machine still down if previous.DOWN = "TRUE" and DOWN = "FALSE" then ALERT end of down event [WO# part] part number cavities (0) part weight (0.000) shift parts made (0) shift flash (0) shift short (0) shift burnt (0) shift parts rejected (0) shift percent parts rejected (0.000) job parts requested (0) job parts made (0) job parts rejected (0) job percent parts rejected (0.000) job parts to go (0) job hours to go (0.000) job material to go (0.000) job stop date (yyyy/MM/dd) JOB LATE cushion in hours (0.000) OEE quality (0.000) OEE overall (0.000) previous job parts rejected (0) if CURRENT.EVENT="TRUE" then CLEAR shift parts made if CURRENT.EVENT="TRUE" then previous job parts rejected = job parts rejected if CURRENT.EVENT="TRUE" then CLEAR shift flash if CURRENT.EVENT="TRUE" then CLEAR shift short if CURRENT.EVENT="TRUE" then CLEAR shift burnt if status = "production" and not CURRENT.SUSPENDED and not CURRENT.PARTIAL then shift parts made = shift parts made + cavities shift parts rejected = shift flash + shift short + shift burnt shift percent parts rejected = (shift parts rejected / shift parts made) * 100 if status = "production" and not CURRENT.SUSPENDED and not CURRENT.PARTIAL then job parts made = job parts made + cavities job parts rejected = previous job parts rejected + shift flash + shift short + shift burnt job percent parts rejected = (job parts rejected / job parts made) * 100 job parts to go = job parts requested - (job parts made - job parts rejected) job hours to go = ((job parts to go / cavities) * nominal cycle) / 3600 job material to go = job parts to go * part weight job stop date = CURRENT.TIMESTAMP + ((job parts to go / cavities) * nominal cycle) if job required by date > 0 and job stop date > job required by date then JOB LATE = COLOR_CYAN else JOB LATE = "FALSE" if job required by date > 0 then cushion in hours = (job stop date - job required by date) / 3600 else cushion in hours = 0 OEE quality = (job parts made - job parts rejected) / job parts made OEE overall = job OEE availability * job OEE performance * OEE quality