//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); } } } } }