SDC C-Project CF Review 프로그램
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. 로그 시간 출력 불합리 개선
- 로그 시간이 파일 출력 시점으로 작성되어 로그 스래드 지연 시 시간이 맞지 않는 불합리 있음
- 로그 시간은 로그 발생 시점에 시간 저장, 해당 시간 이용하여 파일에 기록하도록 변경
12개 파일 변경됨
155 ■■■■ 파일 변경됨
ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp 41 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraControlAlign.cpp 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DisplayMessage.cpp 55 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DisplayMessage.h 22 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 27 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/bin/CHSignalControls_x64_vc15.dll 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/bin/CHSignalControls_x64_vc15.pdb 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/bin/ReviewSystem.exe 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/bin/ReviewSystem.pdb 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/CHSignalControls/SignalControl_DitSharedMemorySync.h 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/lib/CHSignalControls_x64_vc15.lib 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/CHSignalControls/SignalControl_DitSharedMemorySync.cpp
@@ -191,6 +191,13 @@
//         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;
@@ -202,6 +209,21 @@
    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)
{
@@ -266,15 +288,18 @@
        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 >*/
}
ReviewSystem/ReviewSystem/CameraControlAlign.cpp
@@ -766,7 +766,8 @@
        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;
ReviewSystem/ReviewSystem/DisplayMessage.cpp
@@ -73,8 +73,14 @@
//     {
//         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
@@ -90,8 +96,14 @@
        _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 (...)
    {
@@ -109,23 +121,28 @@
// #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)
@@ -139,9 +156,7 @@
        //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(&currentTime);
        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);
@@ -159,18 +174,24 @@
    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:
ReviewSystem/ReviewSystem/DisplayMessage.h
@@ -11,10 +11,16 @@
    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);
@@ -22,13 +28,19 @@
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;
ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -732,6 +732,7 @@
                bRetFTPUploader = TRUE;
            }
        }
        Sleep(1);
        //Dit Glass Raw Messenger S/W Version
        if (bRetGRM == FALSE)
        {
@@ -741,6 +742,7 @@
                bRetGRM = TRUE;
            }
        }
        Sleep(1);
        //Dit Shared Memory Sync Client S/W Version Start
        if (bRetSync == FALSE)
        {
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -550,10 +550,16 @@
        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);
@@ -1101,7 +1107,8 @@
            /*bFileFind = FindRawBinFile(strFileName);*/
            pDitRawClient->SetReviewStart();
            Sleep(1000);
            //< SWK 20221226 - #4403 DEL >
//            Sleep(1000);
             m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::Loading] Transfer Data Read Success!"));
 
@@ -1318,7 +1325,8 @@
    }
    //#3561 210908 LYW ADD End
    Sleep(300);
    //< SWK 20221226 - #4403 MOD >
    Sleep(100);
    //original
//     if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT))
@@ -1440,7 +1448,9 @@
    
    //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!"));
@@ -1501,7 +1511,8 @@
        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)
@@ -3674,7 +3685,9 @@
            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);
ReviewSystem/bin/CHSignalControls_x64_vc15.dll
Binary files differ
ReviewSystem/bin/CHSignalControls_x64_vc15.pdb
Binary files differ
ReviewSystem/bin/ReviewSystem.exe
Binary files differ
ReviewSystem/bin/ReviewSystem.pdb
Binary files differ
ReviewSystem/include/CHSignalControls/SignalControl_DitSharedMemorySync.h
@@ -14,6 +14,11 @@
    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);
ReviewSystem/lib/CHSignalControls_x64_vc15.lib
Binary files differ