Ejemplo n.º 1
0
        /// <summary>
        /// 定時處理停機記錄的邏輯
        /// </summary>
        void m_tmrProjMacHalt_Elapsed(object sender, ElapsedEventArgs e)
        {
            if (m_blnIsRunningHalt)
            {
                return;
            }
            m_blnIsRunningHalt = true;

            if (m_CurrentHaltLogicStatus != EnmHaltLogicStatus.Running)
            {
                m_CurrentHaltLogicStatus = EnmHaltLogicStatus.Running;
            }

            int iHaltTaskMaxCount = base.ProjectMachineHaltLogicTime * 60;//時間間隔值(秒)

            if (m_iTmrCounter_Task < iHaltTaskMaxCount)//需要達到停機記錄時間間隔時,方可進行下一步操作
            {
                m_iTmrCounter_Task++;
            }
            else//到達停機記錄創建時間間隔
            {
                if (base.CurrentMachineHaltRecord == null)
                {
                    if (base.MachineHaltRecords == null)
                    {
                        base.MachineHaltRecords = new List<ProjectMachineHaltRecord>();
                    }

                    ProjectMachineHaltRecord recHalt = CreateNewHaltRec(true);
                    if (recHalt != null)
                    {
                        base.CurrentMachineHaltRecord = recHalt;

                        base.MachineHaltRecords.Add(recHalt);//將新的停機記錄添加到當前品檢記錄列表

                        base.OnProductionChanged(recHalt);//通知中心更新

                        this.m_statusProj = CustEnum.ProjectStatus.PROD_STOP;//當前狀態轉為生產停機狀態
                        base.OnMachineHaltStatusChanged(this.m_statusProj);

                        base.OnRecordEdit(recHalt);//通知界面編輯

                        m_tmrProjMacHalt.Stop();
                        m_iTmrCounter_Task = 0;

                        StartTimer_CheckOT();
                    }
                    else
                    {
                        base.OnException(mc_ControllerName, "m_tmrProjMacHalt_Elapsed", "無法創建新的停機記錄。" + DateTime.Now.ToString());
                    }

                }
                else
                {
                    m_tmrProjMacHalt.Stop();
                    m_iTmrCounter_Task = 0;
                }

                m_iTmrCounter_Task = 0;//將時間置零,準備下次操作
            }

            m_blnIsRunningHalt = false;
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 初始化參數
 /// </summary>
 void InitParams()
 {
     m_dtHaltBegin = null;
     m_statusProj = CustEnum.ProjectStatus.PROD_STOP;
     m_iTmrCounter_Task = 0;
     m_CurrentHaltLogicStatus = EnmHaltLogicStatus.None;
     m_dtPause = null;
     m_blnIsRunningHalt = false;
     m_blnIsCheckingHaltOverTime = false;
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 工程停機邏輯開始
        /// </summary>
        public override void MachineHaltLogicStart()
        {
            EnmHaltLogicStatus status = m_CurrentHaltLogicStatus;

            if (status != EnmHaltLogicStatus.Running)
            {
                ProjectMachineHaltRecord machineHaltRecord = this.GetCurrentMachineHaltRecord();

                if (machineHaltRecord != null)
                {
                    this.RegainHistoryMachineHaltRecord(machineHaltRecord);

                    return;
                }

                m_dtHaltBegin = DateTime.Now;
                m_CurrentHaltLogicStatus = EnmHaltLogicStatus.Running;
                if (status == EnmHaltLogicStatus.Pausing)//若之前的狀態為用餐暫停,則記錄用餐時長
                {
                    if (m_dtPause != null)
                    {
                        int iPauseTimeSpan = (DateTime.Now - m_dtPause.Value).Seconds;
                        base.DinnerTime += iPauseTimeSpan;
                        if (base.CurrentMachineHaltRecord != null)
                        {
                            base.CurrentMachineHaltRecord.psrd_iDinnerTime = iPauseTimeSpan;
                        }
                        m_dtPause = null;
                    }
                }

                StartTimer_Halt();
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 工程停機邏輯結束
        /// </summary>
        public override void MachineHaltLogicStop()
        {
            if (m_CurrentHaltLogicStatus != EnmHaltLogicStatus.Stopped)
            {
                m_dtHaltBegin = null;
                m_CurrentHaltLogicStatus = EnmHaltLogicStatus.Stopped;
                m_iTmrCounter_Task = 0;//計數器清零

                StopTimer_CheckOT();
                StopTimer_Halt();

                if (base.CurrentMachineHaltRecord != null)
                {
                    base.CurrentMachineHaltRecord.psrd_dEndTime = DateTime.Now;

                    if (this.CurrentMachineShiftData != null && this.CurrentMachineShiftData.sifo_dEndTime != null)
                    {
                        if (DateTime.Now > this.CurrentMachineShiftData.sifo_dEndTime.Value)
                        {
                            base.CurrentMachineHaltRecord.psrd_dEndTime = this.CurrentMachineShiftData.sifo_dEndTime;
                        }
                    }

                    base.OnProductionChanged(base.CurrentMachineHaltRecord);
                    base.OnProductionDataUpdate();
                    base.CurrentMachineHaltRecord = null;
                }
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// 用餐暫停
 /// </summary>
 public override void DinnerPause()
 {
     if (m_CurrentHaltLogicStatus != EnmHaltLogicStatus.Pausing)//當前狀態不是暫停中時,進行暫停處理邏輯
     {
         m_CurrentHaltLogicStatus = EnmHaltLogicStatus.Pausing;
         m_dtPause = DateTime.Now;//記錄暫停的當前時間
         StopTimer_Halt();//停止停機邏輯處理計時器,計數器不清零
         m_iTmrCounter_Task = 0;//計數器清零 //2015-04-15 避免因停機暫停前已在停機狀態,已在計數,使未夠停機時間間隔時就產生出一條停機記錄
         StopTimer_CheckOT();//停止停機是否超時檢查
     }
 }