//--------------------------------------------------------------------------- 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; }
//--------------------------------------------------------------------------- //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); } }
//--------------------------------------------------------------------------- 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); } }
//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; }
//--------------------------------------------------------------------------- //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); } }
//--------------------------------------------------------------------------- //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); } }
//--------------------------------------------------------------------------- //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); } }
//--------------------------------------------------------------------------- //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); } }
//--------------------------------------------------------------------------- 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); }
//--------------------------------------------------------------------------- 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(); }
//--------------------------------------------------------------------------- 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); } }
//--------------------------------------------------------------------------- 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); } }
//--------------------------------------------------------------------------- //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); } }