Ejemplo n.º 1
0
        /// <summary>
        /// </summary>
        /// <param name="db"/>
        /// <param name="aeqp"/>
        /// <param name="wips"/>
        /// <param name="ctx"/>
        /// <param name="handled"/>
        /// <param name="prevReturnValue"/>
        /// <returns/>
        public IHandlingBatch[] DO_SELECT0(Mozart.SeePlan.Simulation.DispatcherBase db, Mozart.SeePlan.Simulation.AoEquipment aeqp, IList <Mozart.SeePlan.Simulation.IHandlingBatch> wips, Mozart.SeePlan.Simulation.IDispatchContext ctx, ref bool handled, Mozart.SeePlan.Simulation.IHandlingBatch[] prevReturnValue)
        {
            WeightPreset   preset = aeqp.Target.Preset;
            FabAoEquipment eqp    = aeqp as FabAoEquipment;

            //InPort Wip 처리
            if (eqp.HasInPortWip)
            {
                //여러 Lot을 넘길 경우 첫번째 투입, 나머지는 설비의 Buffer에 넣음.
                IHandlingBatch[] list = eqp.InitInPortWips.ToArray();

                eqp.InitInPortWips.Clear();

                return(list);
            }

            IHandlingBatch[] selected = null;

            if (wips.Count > 0)
            {
                List <IHandlingBatch> newlist = new List <IHandlingBatch>(wips);
                var control = DispatchControl.Instance;

                //if (eqp.EqpID == "FHRPH100" && eqp.NowDT >= LcdHelper.StringToDateTime("20200113 073000"))
                //	Console.WriteLine("B");

                var dummy = WeightHelper.NeedAllowRunDown_Dummy(eqp, wips);
                if (dummy != null)
                {
                    newlist.Add(dummy);
                    dummy.DispatchFilterInfo = eqp.LastPlanFilterInfo;
                }

                var dummyList = FilterMaster.WaitForPrevStepWip_Dummy(ctx, eqp);
                if (dummyList != null && dummyList.Count > 0)
                {
                    newlist.AddRange(dummyList);
                }

                var lotList = control.Evaluate(db, newlist, ctx);
                selected = control.Select(db, eqp, lotList);

                if (control.IsWriteDispatchLog(eqp))
                {
                    DispatchLogHelper.AddDispatchInfo(eqp, lotList, selected, preset);
                    //eqp.EqpDispatchInfo.AddDispatchInfo(lotList, selected, preset);
                }
            }

            if (selected == null)
            {
                eqp.CheckAvailableSubEqps();
            }

            return(selected);
        }