Beispiel #1
0
        /// <summary>
        /// </summary>
        /// <param name="db"/>
        /// <param name="aeqp"/>
        /// <param name="wips"/>
        /// <param name="handled"/>
        /// <param name="prevReturnValue"/>
        /// <returns/>
        public IHandlingBatch[] SELECT0(Mozart.SeePlan.Simulation.DispatcherBase db, Mozart.SeePlan.Simulation.AoEquipment aeqp, IList <Mozart.SeePlan.Simulation.IHandlingBatch> wips, ref bool handled, Mozart.SeePlan.Simulation.IHandlingBatch[] prevReturnValue)
        {
            var eqp = aeqp.ToFabAoEquipment();

            if (wips == null || wips.Count == 0)
            {
                return(null);
            }

            var lot = wips[0].ToFabLot();

            //if (eqp.EqpID == "THCVD300" && eqp.NowDT >= LcdHelper.StringToDateTime("20191107 075929"))
            //	Console.WriteLine("B");

            if (lot.IsDummy)
            {
                eqp.IsDummyWait = true;
                return(null);
            }

            if (eqp.IsParallelChamber)
            {
                if (ChamberMaster.IsLoadable_ParallelChamber(eqp, lot) == false)
                {
                    return(null);
                }
            }

            eqp.IsDummyWait = false;

            return(new IHandlingBatch[] { lot });
        }
Beispiel #2
0
        /// <summary>
        /// </summary>
        /// <param name="aeqp"/>
        /// <param name="loadableChambers"/>
        /// <param name="hb"/>
        /// <param name="handled"/>
        /// <param name="prevReturnValue"/>
        /// <returns/>
        public ISet <string> GET_NEED_SETUP_CHAMBERS0(Mozart.SeePlan.Simulation.AoEquipment aeqp, Mozart.SeePlan.Simulation.ChamberInfo[] loadableChambers, Mozart.SeePlan.Simulation.IHandlingBatch hb, ref bool handled, ISet <string> prevReturnValue)
        {
            FabLot lot = hb.ToFabLot();
            FabEqp eqp = aeqp.Target as FabEqp;

            List <FabSubEqp> list = ChamberMaster.GetSubEqps(eqp, loadableChambers);

            return(ChamberMaster.GetNeedSetupChamberIDs(list, lot));
        }
Beispiel #3
0
        /// <summary>
        /// 설비 초기화를 합니다. GetEqpList 직후 호출됨
        /// </summary>
        /// <param name="aeqp"/>
        /// <param name="handled"/>
        public void INITIALIZE_EQUIPMENT0(Mozart.SeePlan.Simulation.AoEquipment aeqp, ref bool handled)
        {
            //※ Inline 설비의 경우 설정확인 (true : ProessTime 사용, False : FlowTime 사용)
            aeqp.UseProcessingTime = false;

            //AoEqp 초기화
            FabAoEquipment eqp = aeqp.ToFabAoEquipment();

            var now = eqp.NowDT;

            eqp.LoadInfos            = new List <FabLoadInfo>();
            eqp.LastIdleStartTime    = now;
            eqp.LastIdleRunStartTime = now;
            eqp.AvailablePMTime      = DateTime.MaxValue;

            eqp.InitAcidDensity();

            ResHelper.AddEqpByGroup(eqp);

            //FabEqp 초기화
            FabEqp targetEqp = eqp.TargetEqp;

            targetEqp.InitPM();
            targetEqp.SetInitEqpStatus(eqp);

            //패럴러챔버 초기화
            if (aeqp.IsParallelChamber)
            {
                ChamberMaster.InitializeParallelChamber(eqp);
            }

            //설비상태가 Down 설정
            if (targetEqp.StatusInfo.Status == ResourceState.Down)
            {
                targetEqp.State = ResourceState.Down;
            }
        }