Example #1
0
        private static void AddItem(this EqpArrangeSet setInfo, EqpArrangeInfo item)
        {
            if (item == null)
            {
                return;
            }

            //All Items
            LcdHelper.AddSort(setInfo.Items, item, EqpArrangeInfoComparer.Default);

            //Group Items
            //SubEqp는 defaultArrange 미지정, 모두 Default로 처리(2019.09.07)
            bool isDefault = setInfo.IsSubEqp ? true : LcdHelper.Equals(item.LimitType, setInfo.DefaultArrange);

            var    groups   = isDefault ? setInfo.DefaultGroups : setInfo.EtcGroups;
            string groupKey = item.GetGroupKey();

            List <EqpArrangeInfo> list;

            if (groups.TryGetValue(groupKey, out list) == false)
            {
                groups.Add(groupKey, list = new List <EqpArrangeInfo>());
            }

            LcdHelper.AddSort(list, item, EqpArrangeInfoComparer.Default);
        }
Example #2
0
        private static bool IsLoadable(this EqpArrangeSet setInfo)
        {
            List <EqpArrangeInfo> loadableList = new List <EqpArrangeInfo>();

            //M수량 제약 체크 X
            int qty = 0;

            return(setInfo.IsLoadable(ref loadableList, qty));
        }
Example #3
0
        private static EqpArrangeSet ImportEqpArrangeSet(string key, string eqpID, FabEqp targetEqp, string stepID,
                                                         string productID, string productVer, FabStdStep stdStep, bool isFixedProductVer, bool isSubEqp)
        {
            //SubEqp의 경우는 defaultArrange 미지정
            string defaultArrange = isSubEqp ? null : stdStep.DefaultArrange;

            EqpArrangeSet setInfo = new EqpArrangeSet
            {
                Key                  = key,
                EqpID                = eqpID,
                TargetEqp            = targetEqp,
                StepID               = stepID,
                ProductID            = productID,
                ProductVer           = productVer,
                StdStep              = stdStep,
                DefaultArrange       = defaultArrange,
                DefaultLimitTypeList = LcdHelper.ParseLimitType(defaultArrange),
                IsFixedProductVer    = isFixedProductVer,
                IsSubEqp             = isSubEqp
            };

            var list = GetEqpArrangeInfo(eqpID);

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

            foreach (var arr in list)
            {
                if (arr.ActivateType == ActivateType.NONE)
                {
                    continue;
                }

                //MainRunStep이 등록된 설비의 경우, 타 Step의 M은 무시(2019.06.16 - by.liujian(유건))
                if (arr.ActivateType == ActivateType.M)
                {
                    var mainRunStep = targetEqp.MainRunSteps;
                    if (mainRunStep != null && mainRunStep.Count > 0)
                    {
                        if (mainRunStep.Find(t => t.StepID == stepID) == null)
                        {
                            continue;
                        }
                    }
                }

                if (arr.IsMatched(stepID, productID, productVer, isFixedProductVer))
                {
                    setInfo.AddItem(arr);
                }
            }

            return(setInfo);
        }
Example #4
0
        private static bool HasEtcGroups(this EqpArrangeSet setInfo)
        {
            var group = setInfo.EtcGroups;

            if (group != null && group.Count > 0)
            {
                return(true);
            }

            return(false);
        }
Example #5
0
        private static bool HasItems(this EqpArrangeSet setInfo)
        {
            var items = setInfo.Items;

            if (items != null && items.Count > 0)
            {
                return(true);
            }

            return(false);
        }
Example #6
0
        private static bool IsLoadable(this EqpArrangeSet setInfo, FabLot lot, bool checkQty, bool isLastPlan,
                                       out List <EqpArrangeInfo> loadableList)
        {
            loadableList = new List <EqpArrangeInfo>();

            int lotSize = SeeplanConfiguration.Instance.LotUnitSize;
            int unitQty = lot.IsDummy ? lotSize : lot.UnitQty;

            int qty = checkQty ? Math.Max(unitQty, 1) : 0;

            //연속 투입인 경우에만 소량 투입 허용(2019.09.06 - by.liujian(유건))
            if (checkQty && isLastPlan == false)
            {
                qty = Math.Max(qty, lotSize);
            }

            return(setInfo.IsLoadable(ref loadableList, qty));
        }
Example #7
0
        private static void MoveQty(this EqpArrangeSet setInfo, FabAoEquipment eqp, FabLot lot)
        {
            if (setInfo.HasItems() == false)
            {
                return;
            }

            int qty = lot.UnitQty;

            if (qty <= 0)
            {
                return;
            }

            string productVersion = lot.CurrentProductVersion;
            var    mask           = lot.CurrentMask;

            var list = setInfo.Items;

            foreach (var item in list)
            {
                if (item.ActivateType != ActivateType.M)
                {
                    continue;
                }

                if (item.IsMatchedByProductVersion(productVersion) == false)
                {
                    continue;
                }

                if (item.IsMatchedByMask(mask) == false)
                {
                    continue;
                }

                item.MoveQty += qty;
                item.Seq++;

                OutCollector.WriteLimitMLog(item, eqp, lot, eqp.NowDT);
            }
        }
Example #8
0
        private static bool IsLoadable(this EqpArrangeSet setInfo,
                                       ref List <EqpArrangeInfo> loadableList, int qty = 0)
        {
            //Default Group은 반드시 존재해야 함.
            if (setInfo.HasDefaultGroups() == false)
            {
                return(false);
            }

            List <EqpArrangeInfo> list = new List <EqpArrangeInfo>();

            //Default Group
            var  dgroup     = setInfo.DefaultGroups;
            bool isLoadable = IsLoadable(dgroup, ref list, qty);

            if (isLoadable == false)
            {
                return(false);
            }

            //Etc Group (추가 비가용 체크, 일치하는 비가용 정보 존재시 비가용 처리)
            if (setInfo.HasEtcGroups())
            {
                var egroup = setInfo.EtcGroups;
                list.RemoveAll(t => IsLoadable_Etc(t, egroup, qty) == false);
            }

            if (list.Count == 0)
            {
                return(false);
            }

            if (loadableList != null)
            {
                loadableList.AddRange(list);
            }

            return(isLoadable);
        }