Example #1
0
        //private static void OnChamberStateChangedTemp(FabAoEquipment eqp, FabLot lot, LoadingStates state, DateTime now, bool isDone)
        //{
        //	if (eqp.IsParallelChamber == false)
        //		return;

        //	int count = eqp.SubEqps.Length;
        //	for (int i = 0; i < count; i++)
        //	{
        //		var subEqp = eqp.SubEqps[i];

        //		if (isDone)
        //		{
        //			subEqp.OnStateChanged(eqp, state, lot, isDone);
        //			continue;
        //		}

        //		ChamberInfo chamberInfo;
        //		if (eqp.CheckParallelChamberState(i, state, lot, out chamberInfo))
        //		{
        //			subEqp.OnStateChanged(eqp, state, lot, isDone);

        //			//TODO : 임시처리로직 ParallelChamber 설비의 BUSY 이벤트 누락 발생으로 임시 처리함. (이슈 확인 후 삭제 필요함.)
        //			if (state == LoadingStates.SETUP)
        //			{
        //				Time delay = Time.Max((subEqp.ChamberInfo.SetupEndTime - now), Time.Zero);
        //				if (delay > Time.Zero)
        //				{
        //					object[] args = new object[3] { subEqp, LoadingStates.BUSY.ToString(), lot };
        //					eqp.AddTimeout(delay, SimHelper.OnEqpLoadingStateChanged, args);
        //				}
        //			}
        //		}
        //		else
        //		{
        //			if (state == LoadingStates.BUSY && subEqp.ChamberInfo.Next != null)
        //			{
        //				FabLot itsMe = subEqp.ChamberInfo.Next as FabLot;
        //				if (lot.CurrentPlan == itsMe.CurrentPlan)
        //				{
        //					if (subEqp.ChamberInfo.OutTime > subEqp.SetupEndTime)
        //					{
        //						Time delay = Time.Max((subEqp.ChamberInfo.OutTime - now), Time.Zero);
        //						if (delay > Time.Zero)
        //						{
        //							object[] args = new object[3] { subEqp, LoadingStates.BUSY.ToString(), lot };
        //							eqp.AddTimeout(delay, SimHelper.OnEqpLoadingStateChanged, args);
        //						}
        //					}
        //				}
        //			}
        //			else if (state == LoadingStates.IDLERUN)
        //			{
        //				if (subEqp.ChamberInfo.Current != null)
        //				{
        //					Time delay = Time.Max((subEqp.ChamberInfo.OutTime - now), Time.Zero);
        //					if (delay > Time.Zero)
        //					{
        //						object[] args = new object[3] { subEqp, LoadingStates.IDLERUN.ToString(), lot };
        //						eqp.AddTimeout(delay, SimHelper.OnEqpLoadingStateChanged, args);
        //					}
        //				}
        //			}
        //			else if (state == LoadingStates.SETUP)
        //			{

        //				if (subEqp.ChamberInfo.Current != null)
        //				{
        //					var workInfo = subEqp.ChamberInfo.List.Find(p => (p.Entity as FabLot).CurrentPlan == lot.CurrentPlan);
        //					if (workInfo != null)
        //					{
        //						Time delay = Time.Max((workInfo.SetupStartTime - now), Time.Zero);
        //						if (delay > Time.Zero)
        //						{
        //							object[] args = new object[3] { subEqp, LoadingStates.SETUP.ToString(), lot };
        //							eqp.AddTimeout(delay, SimHelper.OnEqpLoadingStateChanged, args);

        //							subEqp.SetupStartTime = workInfo.SetupStartTime;
        //						}

        //						delay = Time.Max((workInfo.SetupEndTime - now), Time.Zero);
        //						if (delay > Time.Zero)
        //						{
        //							object[] args = new object[3] { subEqp, LoadingStates.BUSY.ToString(), lot };
        //							eqp.AddTimeout(delay, SimHelper.OnEqpLoadingStateChanged, args);

        //							subEqp.SetupEndTime = workInfo.SetupEndTime;
        //						}
        //					}
        //				}
        //			}
        //		}

        //		//if (eqp.EqpID == "THCVD500")
        //		//{
        //		//    string lotID = "-";
        //		//    if (subEqp.ChamberInfo.Current != null)
        //		//        lotID = (subEqp.ChamberInfo.Current as FabLot).LotID;

        //		//    Logger.MonitorInfo("{0};{1};{2};{3};{4};{5};{6};{7};{8}\t", eqp.NowDT.ToString("HH:mm:ss"), state, lot == null ? "-" : lot.LotID, subEqp.SubEqpID, lotID, subEqp.ChamberInfo.OutTime == Time.Zero ? "-" : subEqp.ChamberInfo.OutTime.ToString(), subEqp.ChamberInfo.Next == null ? "-" : (subEqp.ChamberInfo.Next as FabLot).LotID, subEqp.ChamberInfo.Next == null ? "-" : subEqp.ChamberInfo.NextOutTime.ToString(), subEqp.ChamberInfo.LastUnits);
        //		//}
        //	}
        //}

        private static void OnChamberStateChanged(FabAoEquipment eqp, FabLot lot, LoadingStates state, DateTime now, bool isDone)
        {
            var findSubEqps = isDone ? eqp.GetSubEqpList() : eqp.FindSubEqpsByState(state, lot);

            if (findSubEqps != null && findSubEqps.Count > 0)
            {
                foreach (var subEqp in findSubEqps)
                {
                    subEqp.OnStateChanged(eqp, state, lot, isDone);

                    //TODO : 임시처리로직 ParallelChamber 설비의 BUSY 이벤트 누락 발생으로 임시 처리함. (이슈 확인 후 삭제 필요함.)
                    if (state == LoadingStates.SETUP)
                    {
                        Time delay = Time.Max((subEqp.ChamberInfo.SetupEndTime - now), Time.Zero);
                        if (delay > Time.Zero)
                        {
                            object[] args = new object[3] {
                                subEqp, LoadingStates.BUSY.ToString(), lot
                            };
                            eqp.AddTimeout(delay, SimHelper.OnEqpLoadingStateChanged, args);
                        }
                    }
                }
            }
        }