private static bool IsDummyState(this FabLoadInfo info) { if (IsIgnorableState(info.State) == false) { return(false); } return(info.StartTime == info.EndTime); }
private static bool IsDummyState_Busy(this FabLoadInfo info) { if (info.State != LoadingStates.BUSY) { return(false); } return(info.StartTime == info.EndTime); }
/// <summary> /// </summary> /// <param name="aeqp"/> /// <param name="fs"/> /// <param name="det"/> /// <param name="handled"/> public void ON_PMEVENT3(Mozart.SeePlan.Simulation.AoEquipment aeqp, Mozart.SeePlan.DataModel.PMSchedule fs, Mozart.SeePlan.Simulation.DownEventType det, ref bool handled) { FabAoEquipment eqp = aeqp.ToFabAoEquipment(); if (eqp.SetParallelChamberPM(fs, det)) { if (det == DownEventType.Start) { eqp.OnStateChanged(LoadingStates.PM); } return; } if (det == DownEventType.Start) { ResHelper.SetLastLoadingInfo(aeqp, null); aeqp.Loader.Block(); aeqp.WriteHistory(LoadingStates.PM); FabPMSchedule pm = fs as FabPMSchedule; DownMaster.AdjustAheadPMProcessing(eqp, pm); //PM의 경우 OnStateChange 함수를 별도로 호출 필요함. LoadingStates state = GetPMLoadingState(pm.Type); eqp.OnStateChanged(state); FabLoadInfo loadInfo = eqp.LoadInfos.Last(); if (loadInfo.State == LoadingStates.PM) { if (pm.Type == ScheduleType.RENT) { loadInfo.StateInfo = "RENT"; } if (loadInfo.StateInfo != "AHEAD" && LcdHelper.IsEmptyID(pm.Description) == false) { loadInfo.StateInfo = pm.Description; } } } else { aeqp.Loader.Unblock(); aeqp.WriteHistoryAfterBreak(); aeqp.SetModified(); eqp.OnStateChanged(LoadingStates.IDLE); eqp.AvailablePMTime = DateTime.MaxValue; } }
internal static bool IgnoreStateChange(FabLoadInfo lastInfo, LoadingStates state) { if (lastInfo.State != LoadingStates.PM) { return(false); } if (IsIgnoreStateForPM(state)) { return(true); } return(false); }
private static FabLoadInfo SetLastFabLoadInfo(List <FabLoadInfo> infos, LoadingStates state, DateTime now, FabLot lot = null, bool isDone = false, bool isAheadSetup = false) { FabLoadInfo newInfo = new FabLoadInfo(); newInfo.State = state; newInfo.StartTime = now; if (lot != null && state == LoadingStates.BUSY) { lot.CurrentFabPlan.EqpLoadInfo = newInfo; } //PlanEndTime 마감처리 if (isDone) { newInfo.EndTime = now; } FabPlanInfo target = null; if (lot != null && IsRunState(state)) //true = BUSY or SETUP { target = lot.CurrentFabPlan; newInfo.Target = target; if (state == LoadingStates.BUSY) { newInfo.UnitQty = target.UnitQty; } if (state == LoadingStates.SETUP) { if (isAheadSetup) { newInfo.StateInfo = "AHEAD"; } if (target.IsIdleSetup) { newInfo.StateInfo = "IDLE_SETUP"; } if (isAheadSetup && target.IsIdleSetup) { newInfo.StateInfo = "AHEAD_IDLE_SETUP"; } var eqp = ResHelper.GetFabAoEquipment(lot.CurrentPlan.LoadedResource.ResID); if (eqp != null && eqp.IsAcidConst && eqp.AcidDensity.IsSetupMark) { if (isAheadSetup) { newInfo.StateInfo = "AHEAD_ACID"; } else { newInfo.StateInfo = "ACID"; } //용액교체 마크 해제 AcidMaster.SetSetupMark(eqp, false); } } } if (state == LoadingStates.PM) { if (isAheadSetup) { newInfo.StateInfo = "AHEAD"; } } infos.Add(newInfo); return(newInfo); }