public static void InitPM(this FabEqp eqp) { if (eqp.PMList == null) { eqp.PMList = new List <PMSchedule>(); } List <PMSchedule> pmlist = DownMaster.GetPmList(eqp); if (eqp.State == ResourceState.Down && eqp.StatusInfo.MesStatus == MesEqpStatus.PM) { //EqpStatus PM 상태 반영 FabPMSchedule initPM = CreateHelper.CreateFabPMSchedule(eqp.StatusInfo.StartTime, (int)eqp.StatusInfo.Duration, ScheduleType.PM, 0, 0); eqp.PMList.Add(initPM); //설비상태가 PM일경우 24시간 이내 PM은 무시 DateTime pmFenceDate = ModelContext.Current.StartTime.AddDays(1); foreach (PMSchedule item in pmlist) { if (item.StartTime < pmFenceDate) { continue; } eqp.PMList.Add(item); } } else { eqp.PMList.AddRange(pmlist); } }
private static bool AllowAheadPM(FabPMSchedule pm, Time idleTime) { if (pm == null) { return(false); } if (idleTime.TotalMinutes <= 0) { return(false); } var pmTime = pm.EndTime - pm.StartTime; if (idleTime.TotalMinutes > (pmTime.TotalMinutes / 2)) { return(true); } if (pm.StartTime < AoFactory.Current.NowDT.AddDays(1)) { Time allowIdleTime = SiteConfigHelper.GetAllowAdjustPMIdleTime(); if (idleTime.TotalMinutes > allowIdleTime) { return(true); } } return(false); }
internal static bool AdjustAheadPMProcessing(FabAoEquipment eqp, FabPMSchedule pm) { if (InputMart.Instance.GlobalParameters.ApplyFlexialePMSchedule == false) { return(false); } if (pm.IsNeedAdjust == false) { return(false); } if (pm.AllowAheadTime <= 0) { return(false); } Time idleTime = eqp.GetIdleTime(); if (AllowAheadPM(pm, idleTime) == false) { return(false); } AoScheduleItem aoItem = null; foreach (var item in eqp.DownManager.ScheduleTable) { if (pm.Equals(item.Tag)) { if (item.Value == 1) { aoItem = item; break; } } } if (aoItem == null) { return(false); } float aheadTime = Math.Min((float)idleTime.TotalMinutes, pm.AllowAheadTime); var adjSchedule = aoItem.Tag as PeriodSection; adjSchedule.EndTime = adjSchedule.EndTime.AddMinutes(-aheadTime); pm.AheadStartTime = adjSchedule.StartTime.AddMinutes(-aheadTime); eqp.AvailablePMTime = pm.AheadStartTime; aoItem.EventTime = adjSchedule.EndTime; return(true); }