/// <summary> /// </summary> /// <param name="da"/> /// <param name="hb"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public bool IS_BUCKET_PROCESSING0(Mozart.SeePlan.Simulation.DispatchingAgent da, IHandlingBatch hb, ref bool handled, bool prevReturnValue) { try { MicronBEAssyBELot lot = hb as MicronBEAssyBELot; MicronBEAssyBEStep step = hb.CurrentStep as MicronBEAssyBEStep; foreach (EqpArrange eqpArrange in InputMart.Instance.EqpArrange.DefaultView) { if (lot.Product.LineID != eqpArrange.LINE_ID) { continue; } if (step.StepID != eqpArrange.STEP_ID) { continue; } return(false); } return(true); } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); return(false); } }
/// <summary> /// </summary> /// <param name="da"/> /// <param name="info"/> /// <param name="handled"/> public void WRITE_DISPATCH_LOG0(Mozart.SeePlan.Simulation.DispatchingAgent da, Mozart.SeePlan.Simulation.EqpDispatchInfo info, ref bool handled) { var targetEqp = info.TargetEqp as FabEqp; string eqpID = targetEqp.EqpID; if (eqpID == "THCVD200") { Console.WriteLine(); } var eqp = da.GetEquipment(eqpID) as FabAoEquipment; //ParallelChamber는 SubEqp별로 별도로 기록 (더미Lot선택은 기록) if (eqp.IsParallelChamber && info.DispatchWipLog.StartsWith("DUMMY")) { foreach (var subEqp in targetEqp.SubEqps.Values) { if (subEqp.Current != null) { continue; } DispatchLogHelper.WriteDispatchLog(eqp, info, subEqp); } } //ParallelChamber도 ParentEqpID 기준으로 추가 기록함(2019.11.08) ////ParallelChamber는 SubEqp별로 별도로 기록 //if (eqp.IsParallelChamber) // return; DispatchLogHelper.WriteDispatchLog(eqp, info); }
/// <summary> /// </summary> /// <param name="da"/> /// <param name="hb"/> /// <param name="destCount"/> /// <param name="handled"/> public void ON_NOT_FOUND_DESTINATION0(Mozart.SeePlan.Simulation.DispatchingAgent da, Mozart.SeePlan.Simulation.IHandlingBatch hb, int destCount, ref bool handled) { FabLot lot = hb.ToFabLot(); //TODO: if (lot.CurrentFabStep.StdStep.IsMandatory) { ErrHist.WriteIf(string.Format("{0}/{1}/{2}", "NotFoundArrange", lot.CurrentFabStep.StepID, lot.CurrentProductID), ErrCategory.SIMULATION, ErrLevel.INFO, lot.CurrentFactoryID, lot.CurrentShopID, lot.LotID, lot.CurrentProductID, lot.CurrentProductVersion ?? lot.Wip.ProductVersion, lot.CurrentProcessID, Constants.NULL_ID, lot.CurrentStepID, "ON NOT FOUND DESTINATION0", string.Format("Check Arrange → LOT_ID:{0}", lot.ToString()) ); return; } da.Factory.AddToBucketer(hb); }
/// <summary> /// </summary> /// <param name="da"/> /// <param name="hb"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public IList <string> GET_LOADABLE_EQP_LIST0(Mozart.SeePlan.Simulation.DispatchingAgent da, Mozart.SeePlan.Simulation.IHandlingBatch hb, ref bool handled, IList <string> prevReturnValue) { var lot = hb.Sample as FabLot; if ((hb.CurrentStep as FabStep).StdStep.IsMandatory == false) { return(null); } List <string> eqps = EqpArrangeMaster.GetLoadableEqpList(lot); return(eqps); }
/// <summary> /// </summary> /// <param name="da"/> /// <param name="aeqp"/> /// <param name="wips"/> /// <param name="handled"/> public void ON_DISPATCHED0(Mozart.SeePlan.Simulation.DispatchingAgent da, Mozart.SeePlan.Simulation.AoEquipment aeqp, Mozart.SeePlan.Simulation.IHandlingBatch[] wips, ref bool handled) { var eqp = aeqp.ToFabAoEquipment(); foreach (var item in wips) { var lot = item.ToFabLot(); SetProductVersion(eqp, lot); EqpArrangeMaster.OnDispatched(eqp, lot); FilterMaster.StartEqpRecipeTime(lot, eqp); } }
/// <summary> /// </summary> /// <param name="da"/> /// <param name="hb"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public Time GET_HOLD_TIME0(Mozart.SeePlan.Simulation.DispatchingAgent da, Mozart.SeePlan.Simulation.IHandlingBatch hb, ref bool handled, Mozart.Simulation.Engine.Time prevReturnValue) { Time t = Time.Zero; FabLot lot = hb.ToFabLot(); FabWipInfo wip = lot.Wip; //FabPlanInfo plan = lot.CurrentFabPlan; if (lot.IsInitHold) { t = wip.AvailableTime - da.NowDT; lot.HoldStartTime = da.NowDT; lot.HoldTime = t; lot.IsInitHold = false; // Hold → ExitHold → IsHold 이므로 false로 설정해야됨. 바꿔주지 않을 경우 계속 Hold됨. } return(t); }
/// <summary> /// </summary> /// <param name="da"/> /// <param name="hb"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public bool IS_BUCKET_PROCESSING0(Mozart.SeePlan.Simulation.DispatchingAgent da, Mozart.SeePlan.Simulation.IHandlingBatch hb, ref bool handled, bool prevReturnValue) { FabLot lot = hb.ToFabLot(); if (lot.LotID == "TH930454N01") { Console.WriteLine(); } FabStep step = hb.CurrentStep as FabStep; if (step.IsMandatoryStep == false) { return(true); } //if(step.StdStep != null && step.StdStep.) // return true; return(false); }
/// <summary> /// </summary> /// <param name="da"/> /// <param name="hb"/> /// <param name="handled"/> /// <param name="prevReturnValue"/> /// <returns/> public IList <string> GET_LOADABLE_EQP_LIST0(Mozart.SeePlan.Simulation.DispatchingAgent da, IHandlingBatch hb, ref bool handled, IList <string> prevReturnValue) { try { List <string> list = new List <string>(); return(list); MicronBEAssyBELot lot = hb as MicronBEAssyBELot; #if DEBUG if (lot.LotID == "LOT10_L") { Console.WriteLine(); } #endif MicronBEAssyBEStep step = hb.CurrentStep as MicronBEAssyBEStep; foreach (EqpArrange eqpArrange in InputMart.Instance.EqpArrange.DefaultView) { if (step.StepID != eqpArrange.STEP_ID) { continue; } if (lot.Product.LineID != eqpArrange.LINE_ID) { continue; } if (LikeUtility.Like(lot.Product.ProductID, eqpArrange.PRODUCT_ID) == false) { continue; } //if (LikeUtility.Like(lot.Product.Process.ProcessID, eqpArrange.PROCESS_ID) == false) // continue; foreach (MicronBEAssyEqp eqp in InputMart.Instance.MicronBEAssyEqp.Values) { //if (LikeUtility.Like(eqp.EqpModel, eqpArrange.EQP_MODEL) == false) // continue; if (LikeUtility.Like(eqp.EqpID, eqpArrange.EQP_ID) == false) { continue; } list.Add(eqp.EqpID); } } return(list); } catch (Exception e) { WriteHelper.WriteErrorHistory(ErrorLevel.FATAL, string.Format("ErrorMessage : {0} MethodName : {1}", e.Message, System.Reflection.MethodInfo.GetCurrentMethod().Name)); return(default(IList <string>)); } }
/// <summary> /// </summary> /// <param name="dispatchingAgent"/> /// <param name="hb"/> /// <param name="handled"/> public void ON_HOLD_EXIT0(Mozart.SeePlan.Simulation.DispatchingAgent dispatchingAgent, Mozart.SeePlan.Simulation.IHandlingBatch hb, ref bool handled) { FabLot lot = hb.ToFabLot(); lot.HoldTime = 0; }
/// <summary> /// </summary> /// <param name="da"/> /// <param name="hb"/> /// <param name="handled"/> public void ON_DISPATCH_IN0(Mozart.SeePlan.Simulation.DispatchingAgent da, Mozart.SeePlan.Simulation.IHandlingBatch hb, ref bool handled) { }