Beispiel #1
0
        public static void InitPM(this FabEqp eqp)
        {
            if (eqp.PMList == null)
            {
                eqp.PMList = new List <PMSchedule>();
            }

            List <PMSchedule> pmlist = DownMaster.GetPmList(eqp);

            if (eqp.State == ResourceState.Down && eqp.StatusInfo.MesStatus == MesEqpStatus.PM)
            {
                //EqpStatus PM 상태 반영
                FabPMSchedule initPM = CreateHelper.CreateFabPMSchedule(eqp.StatusInfo.StartTime, (int)eqp.StatusInfo.Duration, ScheduleType.PM, 0, 0);
                eqp.PMList.Add(initPM);

                //설비상태가 PM일경우 24시간 이내 PM은 무시
                DateTime pmFenceDate = ModelContext.Current.StartTime.AddDays(1);
                foreach (PMSchedule item in pmlist)
                {
                    if (item.StartTime < pmFenceDate)
                    {
                        continue;
                    }

                    eqp.PMList.Add(item);
                }
            }
            else
            {
                eqp.PMList.AddRange(pmlist);
            }
        }
Beispiel #2
0
        private static bool AllowAheadPM(FabPMSchedule pm, Time idleTime)
        {
            if (pm == null)
            {
                return(false);
            }

            if (idleTime.TotalMinutes <= 0)
            {
                return(false);
            }

            var pmTime = pm.EndTime - pm.StartTime;

            if (idleTime.TotalMinutes > (pmTime.TotalMinutes / 2))
            {
                return(true);
            }

            if (pm.StartTime < AoFactory.Current.NowDT.AddDays(1))
            {
                Time allowIdleTime = SiteConfigHelper.GetAllowAdjustPMIdleTime();
                if (idleTime.TotalMinutes > allowIdleTime)
                {
                    return(true);
                }
            }
            return(false);
        }
Beispiel #3
0
        internal static bool AdjustAheadPMProcessing(FabAoEquipment eqp, FabPMSchedule pm)
        {
            if (InputMart.Instance.GlobalParameters.ApplyFlexialePMSchedule == false)
            {
                return(false);
            }

            if (pm.IsNeedAdjust == false)
            {
                return(false);
            }

            if (pm.AllowAheadTime <= 0)
            {
                return(false);
            }

            Time idleTime = eqp.GetIdleTime();

            if (AllowAheadPM(pm, idleTime) == false)
            {
                return(false);
            }

            AoScheduleItem aoItem = null;

            foreach (var item in eqp.DownManager.ScheduleTable)
            {
                if (pm.Equals(item.Tag))
                {
                    if (item.Value == 1)
                    {
                        aoItem = item;
                        break;
                    }
                }
            }

            if (aoItem == null)
            {
                return(false);
            }

            float aheadTime = Math.Min((float)idleTime.TotalMinutes, pm.AllowAheadTime);

            var adjSchedule = aoItem.Tag as PeriodSection;

            adjSchedule.EndTime = adjSchedule.EndTime.AddMinutes(-aheadTime);

            pm.AheadStartTime   = adjSchedule.StartTime.AddMinutes(-aheadTime);
            eqp.AvailablePMTime = pm.AheadStartTime;

            aoItem.EventTime = adjSchedule.EndTime;
            return(true);
        }