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. 로그 시간 출력 불합리 개선
- 로그 시간이 파일 출력 시점으로 작성되어 로그 스래드 지연 시 시간이 맞지 않는 불합리 있음
- 로그 시간은 로그 발생 시점에 시간 저장, 해당 시간 이용하여 파일에 기록하도록 변경
| | |
| | | // return m_pSignalThread->AddThreadData(signalData); |
| | | // } |
| | | // |
| | | /*< SWK 20221226 - #4403 ADD Start >*/ |
| | | if (0 == nOnTime) |
| | | { |
| | | Write_SendSignal(nAddrIndex, nSignalIndex, wSignalValue != 0); |
| | | return TRUE; |
| | | } |
| | | /*< SWK 20221226 - #4403 ADD End >*/ |
| | | if (m_pSignalThread == NULL) return FALSE; |
| | | |
| | | CSignalData signalData; |
| | |
| | | return m_pSignalThread->AddThreadData(signalData); |
| | | /*< SWK 20221221 - #4403 MOD End >*/ |
| | | } |
| | | |
| | | /*< SWK 20221226 - #4403 ADD Start >*/ |
| | | inline void CSignalControl_DitSharedMemorySync::Write_SendSignal(int nAddrIndex, int nSignalIndex, bool bOn) |
| | | { |
| | | int nAddress = m_pSendSignalValueAddr[nAddrIndex]; |
| | | WORD wSendValue = 1 << nSignalIndex; |
| | | |
| | | WORD wCurValue = 0; |
| | | CSingleLock localLock(&m_csWriteSignal, TRUE); |
| | | memcpy(&wCurValue, m_pMemStartAddr + nAddress, sizeof(WORD)); |
| | | if (bOn) wCurValue |= wSendValue; |
| | | else wCurValue &= ~wSendValue; |
| | | memcpy(m_pMemStartAddr + nAddress, &wCurValue, sizeof(WORD)); |
| | | } |
| | | /*< SWK 20221226 - #4403 ADD End >*/ |
| | | |
| | | void CSignalControl_DitSharedMemorySync::IST2P_RunThreadProcess(const CSignalData& signalData) |
| | | { |
| | |
| | | m_pSignalThread->AddThreadData(NewSignalData); |
| | | return; |
| | | } |
| | | /*< SWK 20221226 - #4403 MOD Start >*/ |
| | | // int nAddress = m_pSendSignalValueAddr[signalData.nAddrIndex]; |
| | | // WORD wSendValue = 1 << signalData.nSignalIndex; |
| | | // |
| | | // WORD wCurValue = 0; |
| | | // memcpy(&wCurValue, m_pMemStartAddr + nAddress, sizeof(WORD)); |
| | | // if (true == signalData.wSignalValue) wCurValue |= wSendValue; |
| | | // else wCurValue &= ~wSendValue; |
| | | // memcpy(m_pMemStartAddr + nAddress, &wCurValue, sizeof(WORD)); |
| | | |
| | | int nAddress = m_pSendSignalValueAddr[signalData.nAddrIndex]; |
| | | WORD wSendValue = 1 << signalData.nSignalIndex; |
| | | |
| | | WORD wCurValue = 0; |
| | | memcpy(&wCurValue, m_pMemStartAddr + nAddress, sizeof(WORD)); |
| | | if (true == signalData.wSignalValue) wCurValue |= wSendValue; |
| | | else wCurValue &= ~wSendValue; |
| | | memcpy(m_pMemStartAddr + nAddress, &wCurValue, sizeof(WORD)); |
| | | Write_SendSignal(signalData.nAddrIndex, signalData.nSignalIndex, signalData.wSignalValue != 0); |
| | | /*< SWK 20221226 - #4403 MOD End >*/ |
| | | /*< SWK 20221221 - #4403 MOD End >*/ |
| | | } |
| | | |
| | |
| | | time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond()); |
| | | pAlignFinder->SaveResultImage(strPath); |
| | | |
| | | Sleep(10); |
| | | //< SWK 20221226 - #4403 DEL > |
| | | // Sleep(10); |
| | | if (nCameraIdx == 0) |
| | | { |
| | | m_AlignResult.strAlignFirest = strPath; |
| | |
| | | // { |
| | | // m_pDM2P->DM2P_DisplayMessage(strMessage); |
| | | // } |
| | | CString* pstrLog = new CString(strMessage); |
| | | PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(pstrLog), 0); |
| | | /*< SWK 20221226 - #4403 MOD Start >*/ |
| | | // CString* pstrLog = new CString(strMessage); |
| | | // PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(pstrLog), 0); |
| | | pLogData plogdata = new LogData; |
| | | ::GetLocalTime(&plogdata->currentTime); |
| | | plogdata->strLog = strMessage; |
| | | PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(plogdata), 0); |
| | | /*< SWK 20221226 - #4403 MOD End >*/ |
| | | |
| | | } |
| | | // #3417 LYWCF AOI Review 전설비 Log Process개선 ADD END |
| | |
| | | _vstprintf_s(strText, lpstrFormat, list); |
| | | va_end(list); |
| | | |
| | | CString* pstrLog = new CString(strText); |
| | | PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(pstrLog), 0); |
| | | /*< SWK 20221226 - #4403 MOD Start >*/ |
| | | // CString* pstrLog = new CString(strText); |
| | | // PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(pstrLog), 0); |
| | | pLogData plogdata = new LogData; |
| | | ::GetLocalTime(&plogdata->currentTime); |
| | | plogdata->strLog = strText; |
| | | PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(plogdata), 0); |
| | | /*< SWK 20221226 - #4403 MOD End >*/ |
| | | } |
| | | catch (...) |
| | | { |
| | |
| | | // #3417 LYWCF AOI Review 전설비 Log Process개선 ADD END |
| | | |
| | | // #3417 LYWCF AOI Review 전설비 Log Process개선 ADD START |
| | | void CDisplayMessage::ThreadDisplayMessage(const CString& strMessage) |
| | | //< SWK 20221226 - #4403 MOD > |
| | | //void CDisplayMessage::ThreadDisplayMessage(const CString& strMessage) |
| | | void CDisplayMessage::ThreadDisplayMessage(const LogData& logdata) |
| | | { |
| | | WriteToFile(strMessage); |
| | | WriteToFile(logdata.currentTime, logdata.strLog); |
| | | |
| | | if (m_pDM2P) |
| | | { |
| | | m_pDM2P->DM2P_DisplayMessage(strMessage); |
| | | m_pDM2P->DM2P_DisplayMessage(logdata.strLog); |
| | | } |
| | | } |
| | | |
| | | BOOL CDisplayMessage::WriteToFile(const CString& strMessage) |
| | | //< SWK 20221226 - #4403 MOD > |
| | | //BOOL CDisplayMessage::WriteToFile(const CString& strMessage) |
| | | BOOL CDisplayMessage::WriteToFile(const SYSTEMTIME& t, const CString& strMessage) |
| | | { |
| | | if(m_pFileLog == NULL) return FALSE; |
| | | |
| | | //EnterCriticalSection(&m_csLog); |
| | | |
| | | CTime time = CTime::GetCurrentTime(); |
| | | //< SWK 20221226 - #4403 MOD > |
| | | // CTime time = CTime::GetCurrentTime(); |
| | | CTime time(t); |
| | | CString strTimeStamp = _T(""); |
| | | // 날짜가 바뀌면 파일명을 갱신해서 쓴다. |
| | | if ((time.GetMonth() != m_TimeLogFile.GetMonth()) || (time.GetDay() != m_TimeLogFile.GetDay()) || !m_pFileLog) |
| | |
| | | //strTimeStamp.Format(_T("[%02d:%02d:%02d]"), time.GetHour(), time.GetMinute(), time.GetSecond()); |
| | | /*< SWK 20221221 - #4403 MOD Start >*/ |
| | | // strTimeStamp.Format(_T("[%02d:%02d:%02d_%02d:%02d:%02d]"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond()); |
| | | SYSTEMTIME currentTime; |
| | | ::GetLocalTime(¤tTime); |
| | | strTimeStamp.Format(_T("[%02d:%02d:%02d_%02d:%02d:%02d.%03d]"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond(), currentTime.wMilliseconds); |
| | | strTimeStamp.Format(_T("[%02d:%02d:%02d_%02d:%02d:%02d.%03d]"), time.GetYear(), time.GetMonth(), time.GetDay(), time.GetHour(), time.GetMinute(), time.GetSecond(), t.wMilliseconds); |
| | | /*< SWK 20221221 - #4403 MOD End >*/ |
| | | #ifdef UNICODE |
| | | strLog.Format(_T("%c%s %s\r\n"), strCommand, strTimeStamp, strMessage); |
| | |
| | | return TRUE; |
| | | } |
| | | |
| | | DWORD RunThreadDisplayLog(LPVOID param) |
| | | DWORD CDisplayMessage::RunThreadDisplayLog(LPVOID param) |
| | | { |
| | | MSG msg; |
| | | while (GetMessage(&msg, NULL, 0, 0)) |
| | | { |
| | | CString* pstrLog = reinterpret_cast<CString*>(msg.wParam); |
| | | //< SWK 20221226 - #4403 MOD > |
| | | // CString* pstrLog = reinterpret_cast<CString*>(msg.wParam); |
| | | CDisplayMessage::pLogData plogdata = reinterpret_cast<CDisplayMessage::pLogData>(msg.wParam); |
| | | switch (msg.message) |
| | | { |
| | | case WM_DIPLAY_LOG: |
| | | |
| | | g_pLog->ThreadDisplayMessage(*pstrLog); |
| | | delete pstrLog; |
| | | /*< SWK 20221226 - #4403 MOD Start >*/ |
| | | // g_pLog->ThreadDisplayMessage(*pstrLog); |
| | | // delete pstrLog; |
| | | g_pLog->ThreadDisplayMessage(*plogdata); |
| | | delete plogdata; |
| | | /*< SWK 20221226 - #4403 MOD End >*/ |
| | | break; |
| | | |
| | | default: |
| | |
| | | virtual void DM2P_DisplayMessage(const TCHAR* lpstrFormat, ...) = 0; |
| | | }; |
| | | |
| | | DWORD RunThreadDisplayLog(LPVOID param); |
| | | |
| | | class CDisplayMessage : public Singleton<CDisplayMessage> |
| | | { |
| | | /*< SWK 20221226 - #4403 ADD Start >*/ |
| | | typedef struct _Log_Data |
| | | { |
| | | SYSTEMTIME currentTime; |
| | | CString strLog; |
| | | }LogData, *pLogData; |
| | | /*< SWK 20221226 - #4403 ADD End >*/ |
| | | public: |
| | | CDisplayMessage(const CString& strPath); |
| | | virtual ~CDisplayMessage(void); |
| | |
| | | public: |
| | | void SetDM2P(IDisplayMessage2Parent* pDM2P) { m_pDM2P = pDM2P; } |
| | | void SetPath(const CString& strPath); |
| | | BOOL MakeLogFile(); |
| | | BOOL WriteToFile(const CString& strMessage); |
| | | void DisplayMessage(const CString& strMessage); |
| | | void DisplayMessage(const TCHAR* lpstrFormat, ...); |
| | | void ThreadDisplayMessage(const CString & strMessage); |
| | | //< SWK 20221226 - #4403 MOD > |
| | | // void ThreadDisplayMessage(const CString & strMessage); |
| | | void ThreadDisplayMessage(const LogData& logdata); |
| | | protected: |
| | | BOOL MakeLogFile(); |
| | | //< SWK 20221226 - #4403 MOD > |
| | | // BOOL WriteToFile(const CString& strMessage); |
| | | BOOL WriteToFile(const SYSTEMTIME& time, const CString& strMessage); |
| | | |
| | | public: |
| | | static DWORD RunThreadDisplayLog(LPVOID param); |
| | | private: |
| | | CTime m_TimeLogFile; |
| | | CFile* m_pFileLog; |
| | | CString m_strLogPath; |
| | |
| | | bRetFTPUploader = TRUE; |
| | | } |
| | | } |
| | | Sleep(1); |
| | | //Dit Glass Raw Messenger S/W Version |
| | | if (bRetGRM == FALSE) |
| | | { |
| | |
| | | bRetGRM = TRUE; |
| | | } |
| | | } |
| | | Sleep(1); |
| | | //Dit Shared Memory Sync Client S/W Version Start |
| | | if (bRetSync == FALSE) |
| | | { |
| | |
| | | m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Fail Data!")); |
| | | } |
| | | |
| | | AlignCamera_CameraControl(CameraControlStop); // 210805 Align Camera Sequence 변경 |
| | | |
| | | /*< SWK 20221226 - #4403 MOD Start >*/ |
| | | // AlignCamera_CameraControl(CameraControlStop); // 210805 Align Camera Sequence 변경 |
| | | // |
| | | // SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT); |
| | | // m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!")); |
| | | SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT); |
| | | m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!")); |
| | | |
| | | AlignCamera_CameraControl(CameraControlStop); |
| | | /*< SWK 20221226 - #4403 MOD End >*/ |
| | | |
| | | // LJY-20180905 |
| | | m_pSP2P->ISP2P_UpdateAlignResultStatus(0, pGlassResult); |
| | |
| | | /*bFileFind = FindRawBinFile(strFileName);*/ |
| | | |
| | | pDitRawClient->SetReviewStart(); |
| | | Sleep(1000); |
| | | //< SWK 20221226 - #4403 DEL > |
| | | // Sleep(1000); |
| | | |
| | | m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Transfer Data Read Success!")); |
| | | |
| | |
| | | } |
| | | //#3561 210908 LYW ADD End |
| | | |
| | | Sleep(300); |
| | | //< SWK 20221226 - #4403 MOD > |
| | | Sleep(100); |
| | | |
| | | //original |
| | | // if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT)) |
| | |
| | | |
| | | //pDitRawClient->SetReviewStart(); |
| | | |
| | | Sleep(500); |
| | | //< SWK 20221226 - #4403 DEL > |
| | | // Sleep(500); |
| | | |
| | | //CString strJudgeData; |
| | | m_pSP2P->ISP2P_GetSignalControl()->WriteData(_T("17110"), sizeof(pDitRawClient->GetGlassData()->m_strGlassJudge), pDitRawClient->GetGlassData()->m_strGlassJudge); |
| | | m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] ReadRawFile!")); |
| | |
| | | int nTotalPlanCount = CalculatePlanData(pGlassResult); |
| | | m_pSP2P->ISP2P_DisplayMessage(_T("[Read Raw File] Review All Plan Total Count : %d"), nTotalPlanCount); |
| | | |
| | | Sleep(1000); |
| | | //< SWK 20221226 - #4403 DEL > |
| | | // Sleep(1000); |
| | | // send review ready |
| | | //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START |
| | | if (GetSimulationMode() == FALSE) |
| | |
| | | tmServerLoadingTime = CTime::GetCurrentTime(); |
| | | m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] access Shared Memory Fail")); |
| | | strPath.Format(_T("%s\\%s_%04d%02d%02d%02d%02d%02d"), pNetworkInfo->m_strUploadImagePath, strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond()); |
| | | strImagePath.Format(_T("%s\\%s_%04d%02d%02d%02d%02d%02d"), strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond()); |
| | | //< SWK 20221226 - #4403 MOD > |
| | | // strImagePath.Format(_T("%s\\%s_%04d%02d%02d%02d%02d%02d"), strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond()); |
| | | strImagePath.Format(_T("%s_%04d%02d%02d%02d%02d%02d"), strGlassID, tmServerLoadingTime.GetYear(), tmServerLoadingTime.GetMonth(), tmServerLoadingTime.GetDay(), tmServerLoadingTime.GetHour(), tmServerLoadingTime.GetMinute(), tmServerLoadingTime.GetSecond()); |
| | | CreateDirectory(strPath, NULL); |
| | | pReviewProcessor->SetUploadImagePath(strPath); |
| | | pReviewProcessor->SetReviewImagePath(strImagePath); |
| | |
| | | |
| | | virtual BOOL Read_ReceiveSignal(int nAddrIndex, WORD& dwValue); |
| | | virtual BOOL Write_SendSignal(int nAddrIndex, int nSignalIndex, WORD wSignalValue, int nOnTime=1000); |
| | | /*< SWK 20221226 - #4403 ADD Start >*/ |
| | | protected: |
| | | inline void Write_SendSignal(int nAddrIndex, int nSignalIndex, bool bOn); |
| | | public: |
| | | /*< SWK 20221226 - #4403 ADD End >*/ |
| | | virtual BOOL Read_SendSignal(int nAddrIndex, WORD& dwValue); |
| | | virtual BOOL ReadData(const CString strAddr, int nSize, CString& strData); |
| | | virtual BOOL ReadData(const CString strAddr, int nSize, char* pData); |