Esempio n. 1
0
        //---------------------------------------------------------------------------
        public void fn_LotEnd()
        {
            m_tEndTime = DateTime.Now;

            //Lot Data Save...


            fn_WriteLog(string.Format($"[Lot End] Recipe : {m_sRecipeName} / LOT : {m_sLotNo}"), EN_LOG_TYPE.ltLot);

            m_dLotEndTime = TICK._GetTickTime();

            double dRunTotal = (double)TICK.ConvTimetoSec(m_dLotEndTime - m_dLotStartTime);

            m_sLogMsg = string.Format($"[Lot Run Time] {TICK.ConvTimeTickToStr(m_dLotEndTime - m_dLotStartTime)} / {dRunTotal} sec");
            fn_WriteLog(m_sLogMsg, EN_LOG_TYPE.ltLot);
            Console.WriteLine(m_sLogMsg);

            m_sLogMsg = string.Format($" -------------- UPH : {SPC.CalUPH(dRunTotal, 1).ToString("0.0000")} -------------- ");
            fn_WriteLog(m_sLogMsg, EN_LOG_TYPE.ltLot);
            Console.WriteLine(m_sLogMsg);

            //Clear Lot info
            m_bLotOpen    = false;
            m_sRecipeName = string.Empty;
            //m_sLotNo      = string.Empty;
        }
Esempio n. 2
0
        //---------------------------------------------------------------------------
        //Slurry
        private void THREAD_PROCESS_6()
        {
            bool   bGo      = false;
            double Start    = 0;
            double Scan     = 0;
            int    nNo      = TH6;
            int    nInteval = THREAD_INTERVAL6;

            //
            try
            {
                while (m_bThreadRun[nNo])
                {
                    Thread.Sleep(1);

                    if (!bGo)
                    {
                        Start = TICK._GetTickTime();

                        m_bWatchDog[TH6] = false;

                        if (FM.m_stSystemOpt.nUseAutoSlurry == 1)
                        {
                            //Auto Supply Update
                            SUPPLY[0].fn_PlcUpdate(); //SLURRY
                            SUPPLY[1].fn_PlcUpdate(); //SOAP
                        }

                        m_bWatchDog[TH6] = true;

                        Scan = TICK._GetTickTime() - Start;
                        bGo  = true;
                        m_tDelayTimer[nNo].Clear();
                    }

                    if (Scan < nInteval)
                    {
                        if (!m_tDelayTimer[nNo].OnDelay(bGo, nInteval - Scan))
                        {
                            continue;
                        }
                    }

                    bGo = false;

                    //Scan Time Check
                    m_nScanTime [nNo] = (uint)(TICK._GetTickTime() - m_nStartTime[nNo]);
                    m_nStartTime[nNo] = (uint)TICK._GetTickTime();
                }
            }
            catch (System.Exception ex)
            {
                m_bWatchDog[TH6] = false;
                System.Diagnostics.Trace.WriteLine(ex.Message);
                LOG.ExceptionTrace("[THREAD_PROCESS_6]", ex);
            }
        }
Esempio n. 3
0
        //---------------------------------------------------------------------------
        private void THREAD_PROCESS_7()
        {
            bool   bGo      = false;
            double Start    = 0;
            double Scan     = 0;
            int    idx      = TH7;
            int    interval = THREAD_INTERVAL7;

            //
            try
            {
                while (m_bThreadRun[idx])
                {
                    Thread.Sleep(1);

                    if (!bGo)
                    {
                        Start            = TICK._GetTickTime();
                        m_bWatchDog[TH7] = false;

                        //RFID
                        RFID.fn_Upate();

                        //REST API
                        REST.fn_Upate();

                        m_bWatchDog[TH7] = true;

                        Scan = TICK._GetTickTime() - Start;
                        bGo  = true;
                        m_tDelayTimer[idx].Clear();
                    }

                    if (Scan < interval)
                    {
                        if (!m_tDelayTimer[idx].OnDelay(bGo, interval - Scan))
                        {
                            continue;
                        }
                    }

                    bGo = false;


                    //Scan Time Check
                    m_nScanTime [idx] = (uint)(TICK._GetTickTime() - m_nStartTime[idx]);
                    m_nStartTime[idx] = (uint)TICK._GetTickTime();
                }
            }
            catch (System.Exception ex)
            {
                m_bWatchDog[TH7] = false;
                System.Diagnostics.Trace.WriteLine(ex.Message);
                LOG.ExceptionTrace($"[THREAD_PROCESS_{interval}]", ex);
            }
        }
Esempio n. 4
0
        //Method
        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        //생성자 & 소멸자. (Constructor & Destructor)
        public SpcManager()
        {
            m_tDayChangeTime = DateTime.Parse("23:00:00");
            m_bDayChanged    = false;

            //
            m_dSeqSrtTime  = TICK._GetTickTime();
            m_dSeqEndTime  = TICK._GetTickTime();
            m_dDrngJamTime = m_dDrngSeqTime = 0.0;
        }
Esempio n. 5
0
        //---------------------------------------------------------------------------
        //PMC
        private void THREAD_PROCESS_5()
        {
            bool   bGo   = false;
            double Start = 0;
            double Scan  = 0;


            //
            try
            {
                while (m_bThreadRun[TH5])
                {
                    Thread.Sleep(1);

                    if (!bGo)
                    {
                        Start            = TICK._GetTickTime();
                        m_bWatchDog[TH5] = false;

                        //PMC Update
                        //if(FM.m_stMasterOpt.nUsePMC == 1) PMC.fn_Update();

                        IO.fn_UpdateACSReboot();

                        m_bWatchDog[TH5] = true;

                        Scan = TICK._GetTickTime() - Start;
                        bGo  = true;
                        m_tDelayTimer[TH5].Clear();
                    }

                    if (Scan < THREAD_INTERVAL5)
                    {
                        if (!m_tDelayTimer[TH5].OnDelay(bGo, THREAD_INTERVAL5 - Scan))
                        {
                            continue;
                        }
                    }

                    bGo = false;



                    //Scan Time Check
                    m_nScanTime [TH5] = (uint)(TICK._GetTickTime() - m_nStartTime[TH5]);
                    m_nStartTime[TH5] = (uint)TICK._GetTickTime();
                }
            }
            catch (System.Exception ex)
            {
                m_bWatchDog[TH5] = false;
                System.Diagnostics.Trace.WriteLine(ex.Message);
                LOG.ExceptionTrace("[THREAD_PROCESS_5]", ex);
            }
        }
Esempio n. 6
0
        //---------------------------------------------------------------------------
        //LoadCell
        private void THREAD_PROCESS_4()
        {
            bool   bGo   = false;
            double Start = 0;
            double Scan  = 0;

            //
            try
            {
                while (m_bThreadRun[TH4])
                {
                    Thread.Sleep(1);

                    if (!bGo)
                    {
                        Start            = TICK._GetTickTime();
                        m_bWatchDog[TH4] = false;

                        //Load Cell Update
                        LDCBTM.fn_Update();

                        //Top Cell Data
                        IO.fn_UpdateTopLDC();

                        m_bWatchDog[TH4] = true;

                        Scan = TICK._GetTickTime() - Start;
                        bGo  = true;
                        m_tDelayTimer[TH4].Clear();
                    }

                    if (Scan < THREAD_INTERVAL4)
                    {
                        if (!m_tDelayTimer[TH4].OnDelay(bGo, THREAD_INTERVAL4 - Scan))
                        {
                            continue;
                        }
                    }

                    bGo = false;

                    //Scan Time Check
                    m_nScanTime [TH4] = (uint)(TICK._GetTickTime() - m_nStartTime[TH4]);
                    m_nStartTime[TH4] = (uint)TICK._GetTickTime();
                }
            }
            catch (System.Exception ex)
            {
                m_bWatchDog[TH4] = false;
                System.Diagnostics.Trace.WriteLine(ex.Message);
                LOG.ExceptionTrace("[THREAD_PROCESS_4]", ex);
            }
        }
Esempio n. 7
0
        //---------------------------------------------------------------------------
        //MANUAL, Sequence
        private void THREAD_PROCESS_2()
        {
            bool   bGo   = false;
            double Start = 0;
            double Scan  = 0;

            //
            try
            {
                while (m_bThreadRun[TH2])
                {
                    Thread.Sleep(1);

                    if (!bGo)
                    {
                        Start = TICK._GetTickTime();

                        m_bWatchDog[TH2] = false;

                        //Motor Data Update
                        MOTR.fn_Update(SEQ._bRun);

                        m_bWatchDog[TH2] = true;

                        Scan = TICK._GetTickTime() - Start;
                        bGo  = true;
                        m_tDelayTimer[TH2].Clear();
                    }

                    if (Scan < THREAD_INTERVAL2)
                    {
                        if (!m_tDelayTimer[TH2].OnDelay(bGo, THREAD_INTERVAL2 - Scan))
                        {
                            continue;
                        }
                    }

                    bGo = false;


                    //Scan Time Check
                    m_nScanTime [TH2] = (uint)(TICK._GetTickTime() - m_nStartTime[TH2]);
                    m_nStartTime[TH2] = (uint)TICK._GetTickTime();
                }
            }
            catch (System.Exception ex)
            {
                m_bWatchDog[TH2] = false;
                System.Diagnostics.Trace.WriteLine(ex.Message);
                LOG.ExceptionTrace("[THREAD_PROCESS_2]", ex);
            }
        }
Esempio n. 8
0
        //---------------------------------------------------------------------------
        //Log Process
        private void THREAD_PROCESS_1()
        {
            bool   bGo   = false;
            double Start = 0;
            double Scan  = 0;

            //
            try
            {
                while (m_bThreadRun[TH1])
                {
                    Thread.Sleep(30);

                    if (!bGo)
                    {
                        m_bWatchDog[TH1] = false;

                        //Log
                        LOG.fn_UpdateLog();

                        m_bWatchDog[TH1] = true;


                        bGo = true;
                        m_tDelayTimer[TH1].Clear();
                    }

                    //if(Scan < THREAD_INTERVAL1)
                    //{
                    //    if (!m_tDelayTimer[TH1].OnDelay(bGo, THREAD_INTERVAL1 - Scan)) continue;
                    //}

                    bGo = false;


                    m_dScanTime[TH1] = TICK._GetTickTime() - Start;
                    Start            = TICK._GetTickTime();


                    //Scan Time Check
                    m_nScanTime [TH1] = (uint)(TICK._GetTickTime() - m_nStartTime[TH1]);
                    m_nStartTime[TH1] = (uint)TICK._GetTickTime();
                }
            }
            catch (System.Exception ex)
            {
                m_bWatchDog[TH1] = false;
                System.Diagnostics.Trace.WriteLine(ex.Message);
                LOG.ExceptionTrace("[THREAD_PROCESS_1]", ex);
            }
        }
Esempio n. 9
0
        //---------------------------------------------------------------------------
        public bool fn_LotOpen(string recipe, string lotno = "") //Lot No = RFID No
        {
            //Vision Recipe Open
            if (g_VisionManager.fn_LoadRecipe(recipe))
            {
                m_sRecipeName   = recipe;
                FM._sRecipeName = recipe;

                m_bLotOpen = true;

                //
                SEQ_SPIND.fn_StepDataClear();


                if (lotno != "")
                {
                    m_sLotNo = string.Format($"[{DateTime.Now:yyMMdd}]LOT_{lotno}");
                }
                else
                {
                    m_sLotNo = string.Format($"[{DateTime.Now:yyMMdd}]LOT_{DateTime.Now:yyMMdd_HHmmss}");
                }

                m_tStartTime = DateTime.Now;

                fn_WriteLog(string.Format($"[Lot Open] Recipe : {m_sRecipeName} / LOT : {m_sLotNo}"));
                fn_WriteLog(string.Format($"[Lot Open] Recipe : {m_sRecipeName} / LOT : {m_sLotNo}"), EN_LOG_TYPE.ltLot);

                m_dLotStartTime = TICK._GetTickTime();

                return(true);
            }

            m_bLotOpen = false;
            m_sLotNo   = string.Empty;

            return(false);
        }
Esempio n. 10
0
        //---------------------------------------------------------------------------
        public void fn_Update(EN_SEQ_STATE iSeqStat)
        {
            //if(SEQ._bRun) return;

            bool bLotOpen  = LOT._bLotOpen;
            bool bDoorOpen = SEQ.fn_IsAnyDoorOpen(true);

            //Set Start.
            m_dSeqSrtTime = TICK._GetTickTime();

            //Get During Seq Time.
            m_dDrngSeqTime = m_dSeqSrtTime - m_dSeqEndTime;


            EN_ERR_KIND iLastErrKind = (EN_ERR_KIND)EPU.fn_GetKind(EPU._nLastErr);


            //Clear. //86400000 == 24:00:00

            //Day Sequence 별 시간 증가.
            //dPMTime : PM Time / dDownTime : 비가동 / dRunTime : 가동


            switch (iSeqStat)
            {
            case EN_SEQ_STATE.RUNNING:
            case EN_SEQ_STATE.RUNWARN:

                DAILY_DATA.dRunTime   += m_dDrngSeqTime;
                DAILY_DATA.dTotalTime += m_dDrngSeqTime;
                break;

            case EN_SEQ_STATE.INIT:
            case EN_SEQ_STATE.WARNING:
            case EN_SEQ_STATE.STOP:
            case EN_SEQ_STATE.IDLE:
                if (bLotOpen)
                {
                    DAILY_DATA.dPMTime += m_dDrngSeqTime;
                }
                else
                {
                    if (bDoorOpen)
                    {
                        DAILY_DATA.dPMTime += m_dDrngSeqTime;
                    }
                    else
                    {
                        DAILY_DATA.dDownTime += m_dDrngSeqTime;
                    }
                }

                DAILY_DATA.dTotalTime += m_dDrngSeqTime;
                break;

            case EN_SEQ_STATE.ERROR:
                if (bLotOpen)
                {
                    DAILY_DATA.dPMTime += m_dDrngSeqTime;
                }
                else
                {
                    if (bDoorOpen)
                    {
                        DAILY_DATA.dPMTime += m_dDrngSeqTime;
                    }
                    else
                    {
                        DAILY_DATA.dDownTime += m_dDrngSeqTime;
                    }
                }

                DAILY_DATA.dErrorTime += m_dDrngSeqTime;
                DAILY_DATA.dTotalTime += m_dDrngSeqTime;
                break;

            default:
                if (bLotOpen)
                {
                    DAILY_DATA.dPMTime += m_dDrngSeqTime;
                }
                else
                {
                    if (bDoorOpen)
                    {
                        DAILY_DATA.dPMTime += m_dDrngSeqTime;
                    }
                    else
                    {
                        DAILY_DATA.dDownTime += m_dDrngSeqTime;
                    }
                }

                DAILY_DATA.dTotalTime += m_dDrngSeqTime;
                break;
            }

            //
            //DAILY_DATA.dTotalTime += m_dDrngSeqTime;


            //Set End Time.
            m_dSeqEndTime = TICK._GetTickTime();

            //Check Changing Time.
            if (!IsChangedDay())
            {
                return;
            }

            string sLog = string.Empty;

            //string sLog = string.Format($"Day Change : MTBI= {CalMTBI(DAILY_DATA.dRunTime, DAILY_DATA.iJamQty)})");
            //fn_WriteLog(sLog);

            sLog = string.Format($"TOTAL TIME : {TICK.ConvTimeTickToStr(SPC.DAILY_DATA.dTotalTime)} / RUN TIME : {TICK.ConvTimeTickToStr(SPC.DAILY_DATA.dRunTime)} / DOWN TIME : {TICK.ConvTimeTickToStr(SPC.DAILY_DATA.dDownTime)} / PM TIME : {TICK.ConvTimeTickToStr(SPC.DAILY_DATA.dPMTime)}");
            fn_WriteLog(sLog);

            //Kill Past Log
            LOG.fn_DeleteOldFile();

            SPC_EFF.ResetData();
            DAILY_DATA.ResetData();
        }
Esempio n. 11
0
        //---------------------------------------------------------------------------
        private void THREAD_PROCESS_10()
        {
            bool   bGo      = false;
            double Start    = 0;
            double Scan     = 0;
            int    idx      = TH10;
            int    interval = THREAD_INTERVAL10;
            int    nIdex    = 0;

            //
            try
            {
                while (m_bThreadRun[idx])
                {
                    Thread.Sleep(1);

                    if (!bGo)
                    {
                        Start = TICK._GetTickTime();

                        //Check Thread
                        for (nIdex = 0; nIdex < MAX_THREAD - 1; nIdex++)
                        {
                            if (!m_bThreadRun[nIdex])
                            {
                                continue;
                            }

                            if (nIdex >= TH7)
                            {
                                continue;
                            }

                            m_tChkTimer[nIdex].OnDelay(!m_bWatchDog[nIdex], 3000);
                            if (m_tChkTimer[nIdex].Out)
                            {
                                //Console.WriteLine(string.Format($"THREAD ERROR_{nIdex}"));
                                //EPU.fn_SetErr(ERRID.EN_ERR_LIST.ERR_0120 + nIdex); //JUNG/200605
                            }
                        }


                        Scan = TICK._GetTickTime() - Start;
                        bGo  = true;
                        m_tDelayTimer[idx].Clear();
                    }

                    if (Scan < interval)
                    {
                        if (!m_tDelayTimer[idx].OnDelay(bGo, interval - Scan))
                        {
                            continue;
                        }
                    }

                    bGo = false;

                    //Scan Time Check
                    m_nScanTime [idx] = (uint)(TICK._GetTickTime() - m_nStartTime[idx]);
                    m_nStartTime[idx] = (uint)TICK._GetTickTime();
                }
            }
            catch (System.Exception ex)
            {
                System.Diagnostics.Trace.WriteLine(ex.Message);
                LOG.ExceptionTrace($"[THREAD_PROCESS_{interval}]", ex);
            }
        }
Esempio n. 12
0
        //---------------------------------------------------------------------------
        private void THREAD_PROCESS_9()
        {
            bool   bGo      = false;
            double Start    = 0;
            double Scan     = 0;
            int    idx      = TH9;
            int    interval = THREAD_INTERVAL9;

            m_TryCount_Cam = 0;
            //
            try
            {
                while (m_bThreadRun[idx])
                {
                    Thread.Sleep(1);

                    if (!bGo)
                    {
                        Start            = TICK._GetTickTime();
                        m_bWatchDog[TH9] = false;

                        // Cam Connection Try
                        if (g_VisionManager._CamManager.CameraRetryCount < 12)
                        {
                            if (g_VisionManager._CamManager.fn_OpenCam() == true)
                            {
                                g_VisionManager._CamManager.CameraRetryCount = 12;
                            }
                            else
                            {
                                g_VisionManager._CamManager.CameraRetryCount++;
                            }
                        }

                        m_bWatchDog[TH9] = true;

                        Scan = TICK._GetTickTime() - Start;
                        bGo  = true;
                        m_tDelayTimer[idx].Clear();
                    }

                    if (Scan < interval)
                    {
                        if (!m_tDelayTimer[idx].OnDelay(bGo, interval - Scan))
                        {
                            continue;
                        }
                    }

                    bGo = false;



                    //Scan Time Check
                    m_nScanTime [idx] = (uint)(TICK._GetTickTime() - m_nStartTime[idx]);
                    m_nStartTime[idx] = (uint)TICK._GetTickTime();
                }
            }
            catch (System.Exception ex)
            {
                m_bWatchDog[TH9] = false;
                System.Diagnostics.Trace.WriteLine(ex.Message);
                LOG.ExceptionTrace($"[THREAD_PROCESS_{interval}]", ex);
            }
        }
Esempio n. 13
0
        //---------------------------------------------------------------------------
        //Main Process
        private void THREAD_PROCESS_0()
        {
            bool   bGo   = false;
            double Start = 0;
            double Scan  = 0;

            //
            try
            {
                while (m_bThreadRun[TH0])
                {
                    Thread.Sleep(1);

                    if (!bGo)
                    {
                        //-----------------------------------------------
                        Monitor.Enter(Obj);
                        try
                        {
                            m_bWatchDog[TH0] = false;

                            //Main Sequence
                            if (m_bIOOn)
                            {
                                SEQ.fn_Update();
                            }
                            //SEQ.fn_Update1();

                            m_bWatchDog[TH0] = true;
                        }
                        finally
                        {
                            Monitor.Exit(Obj);
                        }
                        //-----------------------------------------------



                        bGo = true;
                        m_tDelayTimer[TH0].Clear();
                    }

                    //if (Scan < THREAD_INTERVAL0)
                    //{
                    //    if (!m_tDelayTimer[TH0].OnDelay(bGo, THREAD_INTERVAL0 - Scan)) continue;
                    //}

                    bGo = false;

                    m_dScanTime[TH0] = TICK._GetTickTime() - Start;
                    Start            = TICK._GetTickTime();


                    //Scan Time Check
                    m_nScanTime [TH0] = (uint)Environment.TickCount - m_nStartTime[TH0];
                    m_nStartTime[TH0] = (uint)Environment.TickCount;
                }
            }
            catch (System.Exception ex)
            {
                m_bWatchDog[TH0] = false;

                System.Diagnostics.Trace.WriteLine(ex.Message);
                LOG.ExceptionTrace("[THREAD_PROCESS_0]", ex);
            }
        }