Esempio n. 1
0
        public static void OnStateChanged(this FabAoEquipment eqp, LoadingStates state,
                                          FabLot lot = null, bool isDone = false)
        {
            //if (eqp.EqpID == "FHUPH100" && lot != null && lot.LotID == "TH011010N0F")
            //	Console.WriteLine("B");

            DateTime now = eqp.NowDT;

            bool isAheadSetup = false;

            if (IsAhead(eqp, state, now))
            {
                if (state == LoadingStates.SETUP)
                {
                    now = eqp.AvailableSetupTime;
                }

                if (state == LoadingStates.PM)
                {
                    now = eqp.AvailablePMTime;
                }

                isAheadSetup = true;
            }

            eqp.UpdateLastLoadInfo(now, state);
            eqp.SetLastFabLoadInfo(state, now, lot, isDone, isAheadSetup);

            UpdateAheadSetupInfo(eqp, state, now);

            if (eqp.IsParallelChamber)
            {
                if (state == LoadingStates.BUSY && lot != null)
                {
                    FabPlanInfo plan = lot.CurrentFabPlan;
                    if (plan.IsInitRunWip == false)
                    {
                        plan.TrackInTime = now;
                        plan.InQty       = lot.UnitQty;
                    }
                }
            }
            else
            {
                if (state == LoadingStates.BUSY && lot != null)
                {
                    lot.CurrentFabPlan.TrackInTime = now;
                }
            }

            OnChamberStateChanged(eqp, lot, state, now, isDone);

            if (state == LoadingStates.IDLERUN || state == LoadingStates.IDLE)
            {
                if (state == LoadingStates.IDLERUN)
                {
                    if (eqp.LastIdleRunStartTime == DateTime.MinValue)
                    {
                        eqp.LastIdleRunStartTime = now;
                    }
                }

                if (eqp.LastIdleStartTime == DateTime.MinValue)
                {
                    eqp.LastIdleStartTime = now;
                }
            }
            else
            {
                //reset (not idle state)
                eqp.LastIdleRunStartTime = DateTime.MinValue;
                eqp.LastIdleStartTime    = DateTime.MinValue;
            }
        }