From 3ce48f6dbeb537e252edb0d62c88a28796e36674 Mon Sep 17 00:00:00 2001 From: SWK <sungwk82@diteam.co.kr> Date: 월, 26 12월 2022 15:04:42 +0900 Subject: [PATCH] ongoing60 #4403 CF AOI Review TACT 지연 개선 1. 신호 출력 방식 재개선 - 유지 시간이 없는 신호는 바로 출력 진행하도록 변경 2. 불필요 Delay 제거 및 시퀀스 변경 - 얼라인 측정 종료 처리 간 제어 신호 먼저 출력 후 카메라 Stop으로 변경 - 물류 정보 읽기 처리 후 1000ms Delay 삭제 - 얼라인 측정 시작(카메라 Live Start) 후 Delay 300ms -> 100ms(이미지 들어오는 시간 확보 필요) - ReadRawFile 처리 시작 전 500ms Delay 삭제 - Path Scheduling 완료 후 Review Ready 신호 출력 전 1000ms Delay 삭제 3. 버그 수정 - 이미지 저장 경로 생성 간 예외 처리 부분 버그 수정 4. 로그 시간 출력 불합리 개선 - 로그 시간이 파일 출력 시점으로 작성되어 로그 스래드 지연 시 시간이 맞지 않는 불합리 있음 - 로그 시간은 로그 발생 시점에 시간 저장, 해당 시간 이용하여 파일에 기록하도록 변경 --- ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp | 223 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 223 insertions(+), 0 deletions(-) diff --git a/ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp b/ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp new file mode 100644 index 0000000..c37e6e5 --- /dev/null +++ b/ReviewHistory/ReveiwHistory/DitGlassRawClient.cpp @@ -0,0 +1,223 @@ +#include "StdAfx.h" +#include "DitGlassRawClient.h" + +CDitGlassRawClient::CDitGlassRawClient(void) +: m_mxCommandProcess(FALSE, MUTEX_RAWMESSENGER) +{ + m_hMapBasicInfo = NULL; + m_hMapGlassData = NULL; + + m_pGlassRawInfo = NULL; + m_pGlassRawData = NULL; + + m_nLastCommandIdx = -1; +} + +CDitGlassRawClient::~CDitGlassRawClient(void) +{ + if (m_hMapBasicInfo!=NULL) + { + ::UnmapViewOfFile(m_hMapBasicInfo); + m_pGlassRawInfo = NULL; + } + + if (m_hMapGlassData!=NULL) + { + ::UnmapViewOfFile(m_hMapGlassData); + m_pGlassRawData = NULL; + } +} + +BOOL CDitGlassRawClient::ConnectServer() +{ + if(isConnect()) return TRUE; + + if(ConnectGlassRawInfo() == FALSE) + { + return FALSE; + } + + if(ConnectGlassRawData() == FALSE) + { + return FALSE; + } + + return TRUE; +} + +BOOL CDitGlassRawClient::ConnectGlassRawInfo() +{ + if(m_hMapBasicInfo == NULL) + { + m_hMapBasicInfo = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_BASICINFO); + + if (m_hMapBasicInfo) + { + m_pGlassRawInfo = (_grmDitGlassRawInfo*)::MapViewOfFile(m_hMapBasicInfo, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(_grmDitGlassRawInfo)); + } + + if(m_hMapBasicInfo == NULL || m_pGlassRawInfo == NULL) + { + if (m_hMapBasicInfo!=NULL) + { + ::UnmapViewOfFile(m_hMapBasicInfo); + m_pGlassRawInfo = NULL; + } + m_pGlassRawInfo = NULL; + return FALSE; + } + } + + return TRUE; +} + +BOOL CDitGlassRawClient::ConnectGlassRawData() +{ + SIZE_T nGlassRawSharedSize = m_pGlassRawInfo->m_nGlassRawDataSize; + + if(m_hMapGlassData == NULL) + { + m_hMapGlassData = ::OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREDMEMNAME_GLASSDATA); + + if (m_hMapGlassData) + { + m_pGlassRawData = (char*)::MapViewOfFile(m_hMapGlassData, FILE_MAP_ALL_ACCESS, 0, 0, nGlassRawSharedSize); + } + + if(m_hMapGlassData == NULL || m_pGlassRawData == NULL) + { + if (m_hMapGlassData != NULL) + { + ::UnmapViewOfFile(m_hMapGlassData); + m_pGlassRawData = NULL; + } + m_pGlassRawData = NULL; + return FALSE; + } + } + m_pGlassData = (_grmGlassData*)&m_pGlassRawData[m_pGlassRawInfo->m_nGlassDataPoint]; + m_pBlockData = (_grmBlockData*)&m_pGlassRawData[m_pGlassRawInfo->m_nBlockDataPoint]; + m_pCellData = (_grmCellData*)&m_pGlassRawData[m_pGlassRawInfo->m_nCellDataPoint]; + m_pDefectData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nDefectDataPoint]; + m_pStackData = (_grmDefectData*)&m_pGlassRawData[m_pGlassRawInfo->m_nStackDataPoint]; + + return TRUE; +} + +BOOL CDitGlassRawClient::WriteAOIRawFile() +{ + return SetCommand(grcWriteRaw); +} + +BOOL CDitGlassRawClient::WriteAOIRawBinFile() +{ + return SetCommand(grcWriteBin); +} + +BOOL CDitGlassRawClient::ReadAOIRawBinFile() +{ + return SetCommand(grcReadBin); +} + +BOOL CDitGlassRawClient::WriteReviewRawBinFile() +{ + return SetCommand(grcReviewWriteBIn); +} + +BOOL CDitGlassRawClient::SetCommand( emGlassRawCommand nCmd ) +{ + if(m_pGlassRawInfo == NULL) return FALSE; + + m_mxCommandProcess.Lock(); + + int nCmdId = (m_pGlassRawInfo->m_nCommandIdxWrite+1) % COMMAND_MAXCOUNT; + + if(m_pGlassRawInfo->m_nCommandIdxRead == nCmdId)//占쏙옙占쏙옙 占쏙옙占쌕는곤옙占쏙옙 占쏙옙큘占쏙옙 占쏙옙占쌜곤옙 占싼뱄옙占쏙옙 占쏙옙占쌀다는곤옙!! [占쏙옙占쏙옙占쏙옙 2018/11/12] + { + m_pGlassRawInfo->m_nCommandIdxRead++;//占쏙옙占쏙옙 占쏙옙占쏙옙占쏙옙 占쏙옙占� 占싹놂옙占쏙옙 占쏙옙占쏙옙占싼댐옙. [占쏙옙占쏙옙占쏙옙 2018/11/12] + } + + m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nCommand = (short)nCmd; + m_pGlassRawInfo->m_nCommandBuffer[nCmdId].strParam; + m_pGlassRawInfo->m_nCommandBuffer[nCmdId].nResult = -1; //-1占쏙옙占쏙옙占쏙옙, 0占쏙옙占쏙옙, 1占쏙옙占쏙옙 [占쏙옙占쏙옙占쏙옙 2018/11/13] + + + m_nLastCommandIdx = m_pGlassRawInfo->m_nCommandIdxWrite = nCmdId; + + m_mxCommandProcess.Unlock(); + + return TRUE; +} + +emAOIProcStep CDitGlassRawClient::GetProcessStep() +{ + if(isConnect() == FALSE) return APS_None; + + if(m_pGlassRawInfo) + { + return m_pGlassRawInfo->m_ClientProcStep; + } + + return APS_None; +} + +BOOL CDitGlassRawClient::SetGlassLoading() +{ + if(isConnect() == FALSE) return FALSE; + m_pGlassRawInfo->m_ClientProcStep = APS_GlassLoading; + m_pGlassData->m_bStackRead = FALSE; + return SetCommand(grcSequenceGlassLoading); +} + +BOOL CDitGlassRawClient::SetInspectEnd() +{ + if(isConnect() == FALSE) return FALSE; + m_pGlassRawInfo->m_ClientProcStep = APS_InspectEnd; + return SetCommand(grcSequenceInspectEnd); +} + +BOOL CDitGlassRawClient::SetReviewStart() +{ + if(isConnect() == FALSE) return FALSE; + m_pGlassRawInfo->m_ClientProcStep = APS_ReviewStart; + return SetCommand(grcSequenceReviewStart); +} + +BOOL CDitGlassRawClient::SetReviewEnd() +{ + if(isConnect() == FALSE) return FALSE; + m_pGlassRawInfo->m_ClientProcStep = APS_ReviewEnd; + return SetCommand(grcSequenceReviewEnd); +} + +BOOL CDitGlassRawClient::SetReviewComtomize() +{ + if(isConnect() == FALSE) return FALSE; + m_pGlassRawInfo->m_ClientProcStep = APS_CustomReviewRead; + return SetCommand(grcSequenceCustomReviewDataRead); +} + +void CDitGlassRawClient::RemoveReviewDefects() +{ + int nDefectNum = m_pGlassData->m_nDefectNum; + int nRightDefectNum = 0;//占쏙옙占쏙옙占쏙옙 占쏙옙占쏙옙占십울옙 占쏙옙치占쏙옙 占쏙옙占쏙옙 占쏙옙占쏙옙 + int nDefectDeleteNum = 0; + for(int i=nDefectNum-1; i>=0; i--) + { + if(m_pDefectData[i].m_ReviewDefect.m_nPlanType > 0 && + m_pDefectData[i].m_ReviewDefect.m_nPlanType != 1000 ) + { + nDefectDeleteNum++; + if(nRightDefectNum) + { + memcpy(&m_pDefectData[i], &m_pDefectData[i+1], sizeof(_grmDefectData)*nRightDefectNum); + } + } + else + { + nRightDefectNum++; + } + } + + m_pGlassData->m_nDefectNum = nDefectNum-nDefectDeleteNum; +} -- Gitblit v1.9.3