internal static float GetSetupTime(this FabSubEqp subEqp, string shopID, string stepID, string productID, string prodVer, string ownerType, string ownerID) { var setupTime = SetupMaster.GetSetupTime(subEqp, shopID, stepID, productID, prodVer, ownerType, ownerID); return(setupTime); }
public static void SetSetupTime(this JobFilterInfo info, AoEquipment aeqp) { FabLot lot = info.Sample; if (lot == null) { return; } info.SetupTime = SetupMaster.GetSetupTime(aeqp, lot); var eqp = aeqp.ToFabAoEquipment(); }
private static bool IsNeedSetup(this FabAoEquipment eqp, string shopID, string stepID, string productID, string prodVer, string ownerType, string ownerID) { var setupTime = SetupMaster.GetSetupTime(eqp, shopID, stepID, productID, prodVer, ownerType, ownerID); if (setupTime > 0) { return(true); } return(false); }
private static bool IsSomeOneDummyWait(FabAoEquipment eqp, FabPlanInfo last) { //var list = last.FabStep.StdStep.GetWorkingEqpList(last.ProductID, last.ProductVersion, last.OwnerType, last.OwnerID); var list = ResHelper.GetEqpsByDspEqpGroup(eqp.DspEqpGroupID); if (list == null) { return(false); } //var waitEqps = list.FindAll(x => x.IsDummyWait && x.EqpID != eqp.EqpID); var waitEqps = new List <FabAoEquipment>(); foreach (FabAoEquipment item in list) { if (item.EqpID == eqp.EqpID) { continue; } if (item.IsDummyWait == false) { continue; } float setupTime = SetupMaster.GetSetupTime(item, last.ShopID, last.StepID, last.ProductID, last.ProductVersion, last.OwnerType, last.OwnerID); if (setupTime > 0) { continue; } waitEqps.Add(item); } if (waitEqps.Count > 0) { return(true); } return(false); }
private static Tuple <object, object> GetMinMax_SetupTime(AoEquipment eqp, List <JobFilterInfo> joblist) { float minVaule = float.MaxValue; float maxVaule = float.MinValue; foreach (JobFilterInfo it in joblist) { var sample = it.Sample; if (sample == null) { continue; } float setupTime = SetupMaster.GetSetupTime(eqp, sample); minVaule = Math.Min(setupTime, minVaule); maxVaule = Math.Max(setupTime, maxVaule); } return(new Tuple <object, object>(minVaule, maxVaule)); }
internal static List <FabLot> WaitForPrevStepWip_Dummy(IDispatchContext ctx, FabAoEquipment eqp) { List <JobFilterInfo> jobList = ctx.Get <List <JobFilterInfo> >(Constants.JobGroup, null); if (jobList == null) { return(null); } FabPlanInfo last = eqp.GetLastPlan(); //eqp.LastPlan as FabPlanInfo; if (last == null) { return(null); } //if (eqp.EqpID == "THWEM200" && LcdHelper.StringToDateTime("20191021235617") <= eqp.NowDT) // Console.WriteLine(); JobState state = InFlowMaster.GetJobState(last.ProductID, last.OwnerType); if (state == null) { return(null); } var holdWips = state.GetHoldWipList(last.FabStep, last.ProductVersion); var prvRunWips = state.GetPrevStepRunWipList(last.FabStep, last.ProductVersion); JobFilterInfo minSetupJobFilter = null; List <JobFilterInfo> filteredList = new List <JobFilterInfo>(); Dictionary <string, JobFilterInfo> current = new Dictionary <string, JobFilterInfo>(); foreach (var info in jobList) { if (info.IsEmpty) { continue; } string key = FilterHelper.GetJobFilterKey(info); current.Add(key, info); if (FilterHelper.CheckIsRunning(eqp, info)) { filteredList.Add(info); continue; } if (info.FilterType != DispatchFilter.None) { filteredList.Add(info); continue; } if (info.SetupTime == 0) { continue; } if (minSetupJobFilter == null) { minSetupJobFilter = info; } if (minSetupJobFilter.SetupTime > info.SetupTime) { minSetupJobFilter = info; } } if (minSetupJobFilter == null) { return(null); } Dictionary <string, FabLot> avableLots = new Dictionary <string, FabLot>(); foreach (var lot in holdWips) { if (eqp.IsLastPlan(lot.CurrentShopID, last.StepID, lot.CurrentProductID, lot.CurrentProductVersion, lot.OwnerType, lot.OwnerID)) { continue; } string key = FilterHelper.GetJobFilterKey(lot.CurrentShopID, last.StepID, lot.CurrentProductID, lot.CurrentProductVersion, lot.OwnerType); if (current.ContainsKey(key)) { continue; } Time remainHold = lot.HoldTime - (eqp.NowDT - lot.HoldStartTime); float setupTime = SetupMaster.GetSetupTime(eqp, lot); if (remainHold.TotalMinutes + setupTime < minSetupJobFilter.SetupTime) { if (avableLots.ContainsKey(key) == false) { avableLots.Add(key, lot); } } } foreach (var lot in prvRunWips) { string lastShopID = last.ShopID; string lastStepID = last.StepID; string currProductID = lot.CurrentProductID; string origProductVersion = lot.OrigProductVersion; string ownerType = lot.OwnerType; string ownerID = lot.OwnerID; //TODO : bong - product version ?? if (eqp.IsLastPlan(lastShopID, lastStepID, currProductID, origProductVersion, ownerType, ownerID)) { continue; } string key = FilterHelper.GetJobFilterKey(lastShopID, lastStepID, currProductID, origProductVersion, ownerType); if (current.ContainsKey(key)) { continue; } Time tranferTime = TransferMaster.GetTransferTime(lot, eqp); Time setupTime = SetupMaster.GetSetupTime(eqp, lastShopID, lastStepID, currProductID, origProductVersion, ownerType, ownerID); if (tranferTime + setupTime < minSetupJobFilter.SetupTime) { if (avableLots.ContainsKey(key) == false) { avableLots.Add(key, lot); } } } Dictionary <string, List <FabAoEquipment> > workingEqps = ResHelper.GetWorkingEqpInfos(eqp, true); List <FabLot> list = new List <FabLot>(); foreach (var lot in avableLots.Values) { FabPlanInfo plan = EntityControl.Instance.CreateLoadInfo(lot, last.Step) as FabPlanInfo; FabLot dummy = CreateHelper.CreateDispatchDummyLot(last.FabStep, plan); dummy.LotID = "DUMMY_PREVSTEP"; JobFilterInfo jobfilter = CreateHelper.CreateDispatchFilterInfo(last.Step as FabStep, lot.CurrentProductID, lot.OrigProductVersion, lot.OwnerType, lot.OwnerID); jobfilter.InitJobFilterInfo(eqp, workingEqps); jobfilter.LotList.Add(dummy); dummy.DispatchFilterInfo = jobfilter; list.Add(dummy); } return(list); }