SDC C-Project CF Review 프로그램
Ongoing90 #3361 CF AOI Review 전설비 Align Cam 비정상 연결 시 팝업 기능 추가
1) Align Cam, Review Cam 비정상 연결 시 팝업 기능 추가
2) 팝업 후 프로그램 종료 기능 추가
3) #3360_CF AOI QD Review WSI XY MotorMoving Error 알람 발생 원인 분석 및 조치
#3359_CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER 알람 발생 원인 분석
트러블 조치 포함
13개 파일 변경됨
273 ■■■■ 파일 변경됨
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp 4 ●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp 101 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp 62 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h 10 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/Extern/DitGlassRawStruct.h 17 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/ReviewRecipeEditorDlg.cpp 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/stdafx.h 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraController.cpp 26 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DitGlassRawStruct.h 17 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/MainFrm.cpp 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 26 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystemSetting/ReviewSystemSettingDlg.cpp 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystemSetting/stdafx.h 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawBase.cpp
@@ -13,6 +13,7 @@
BOOL CGlassRawBase::WriteBinFile( CgrmGlassRawData* pData )
{
    AKLOG("WriteBinFile Start");
    CString strFileName;
    strFileName.Format("%s\\%s", pData->GetGlassData()->m_strPath, pData->GetGlassData()->m_strFileName);
    FILE* pf = fopen(strFileName.GetBuffer(0), "wb");
@@ -36,9 +37,10 @@
    }
    else
    {
        AKLOG("WriteBinFile Fail");
        return FALSE;
    }
    AKLOG("WriteBinFile Finish");
    return TRUE;
}
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
@@ -106,10 +106,13 @@
    }
    strcpy(pData->GetGlassData()->m_strPath, LOCAL_AOIRAWBIN_PATH);
    if(!WriteBinFile(pData))
        return FALSE;
    
    if (1) ReadMuraFile(pData);
    if (WriteAOIFile(pData) == FALSE)
        return FALSE;
@@ -338,6 +341,7 @@
BOOL CGlassRawCPJT::MakeAOIFile( CgrmGlassRawData* pData )
{
    AKLOG("MakeAOIFile Start");
    m_nWriteRawDefectIdx = 1;
    _grmGlassData* pGlass = pData->GetGlassData();
@@ -430,7 +434,7 @@
    
    strValue = "ITEM PANEL MODULETYPE MODULEID PROCESSID PRODUCTID STEPID PROD_TYPE BATCHID H_PANELID E_PANELID P_PANELID OPERID COMP_COUNT PPID GRADE CODE R_GRADE MAP_IMAGE L_TIME U_TIME S_TIME E_TIME T_DEFECT TR PR TB TW RB RW T_STACK MAX_AVG_GRAY MAX_PORTION OK_CELL RJ_CELL RW_CELL NR_CELL CSTID SLOT_NO JOB_END TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT BR_DEFECT IMG_COUNT RECIPE SHRINK RAW_CUT"; //53ea
    strLine += strValue; strLine += "\n";
    strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT PRO_IMAGE AVG_GRAY PORTION"; //24ea result 0404nwh 삭제 : S_DEFECT CRACK P_SHIFT
    strValue = "ITEM SUBPANEL SUBPANELID COORD_X COORD_Y SIZE_X SIZE_Y GATELINE DATALINE GRADE CODE R_GRADE T_DEFECT TD_DEFECT SD_DEFECT PD_DEFECT SP_DEFECT PAD_GATE PAD_DATA M_DEFECT C_DEFECT PRO_IMAGE AVG_GRAY_0 PORTION_0 AVG_GRAY_1 PORTION_1 AVG_GRAY_2 PORTION_2 AVG_GRAY_3 PORTION_3"; //30ea 21-05-12 Mura Data 추가
    strLine += strValue; strLine += "\n";
    //210405
    //ITEM DEFECT ID DEF_NO COORD_X COORD_Y GATELINE DATALINE SIZE_S SIZE_W SIZE_L SIZE_H GRADE CODE STACK_FLAG STACK_COUNT STACK_STEP IMAGE_FILE DSC_CODE VC_CODE DCR_CODE DEFECT_SIZE REPEAT_DEFECT WSI_HEIGHT CS_HEIGHT C_GRADE GRAY_MIN GRAY_MAX GRAY_AVG GRAY_DEF WSI_IMAGE USE_CCDIMAGE SCAN_NUM CAM_POSITION CCD_NO R_GRAY_MIN R_GRAY_MAX R_GRAY_AVG SCAN_AI REVIEW_AI INS_MODE INS_CHANNEL COMPACTNESS THICKNESS MAJOR MINOR WSI_TYPE DEFECT_TYPE SHRINK
@@ -698,9 +702,23 @@
    // 31   6   T_STACK        // Panel 정보 08    SD+SP 수 입력
    SPRINTRAW(12, "%d", pGlassData->m_nDefectNumStackSD + pGlassData->m_nDefectNumStackSP);
    //32   6   BMDF        // Panel 정보 09 -> 변경 MAX_AVG_GRAY 04/12 nwh
    SPRINTRAW(12, "%5.4f", pGlassData->m_fMaxAvgGray);
    if (strlen(pGlassData->m_strMaxAvgGray) == 0)
    {
        SPRINTRAW(12, "*");
    }
    else
    {
        SPRINTRAW(12, "%s", pGlassData->m_strMaxAvgGray);
    }
    // 33   6   CJ            // Panel 정보 10 -> 변경 MAX_PORTION  04/12 nwh
    SPRINTRAW(12, "%5.6f", pGlassData->m_fMaxPortion);
    if (strlen(pGlassData->m_strMaxPortion) == 0)
    {
        SPRINTRAW(12, "*");
    }
    else
    {
        SPRINTRAW(12, "%s", pGlassData->m_strMaxPortion);
    }
    // 34   6   OK_CELL        // OK Cell Count    
    SPRINTRAW(12, "*");
    // 35   6   RJ_CELL        // RJ Cell Count    
@@ -884,11 +902,80 @@
        SPRINTRAW(12,"*");
    }
    // 23 6  CRACK        ->  23 6  AVG_GRAY 변경
    SPRINTRAW(12, "%5.4f", pCellData->m_fAvgGray);
    // 23 12  AVG_GRAY_0
    if (strlen(pCellData->m_strAvgGray_0))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgGray_0);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    
    // 24 6  P_SHIFT   ->24 6  PORTION
    SPRINTRAW(12, "%5.6f", pCellData->m_fPortion);
    // 24 12 PORTION_0
    if (strlen(pCellData->m_strPortion_0))
    {
        SPRINTRAW(12, "%s", pCellData->m_strPortion_0);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 25 12  AVG_GRAY_1
    if (strlen(pCellData->m_strAvgGray_1))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgGray_1);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 26 12 PORTION_1
    if (strlen(pCellData->m_strPortion_1))
    {
        SPRINTRAW(12, "%s", pCellData->m_strPortion_1);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 27 12  AVG_GRAY_2
    if (strlen(pCellData->m_strAvgGray_2))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgGray_2);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 28 12 PORTION_2
    if (strlen(pCellData->m_strPortion_2))
    {
        SPRINTRAW(12, "%s", pCellData->m_strPortion_2);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 29 12  AVG_GRAY_3
    if (strlen(pCellData->m_strAvgGray_3))
    {
        SPRINTRAW(12, "%s", pCellData->m_strAvgGray_3);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    // 30 12 PORTION_3
    if (strlen(pCellData->m_strPortion_3))
    {
        SPRINTRAW(12, "%s", pCellData->m_strPortion_3);
    }
    else
    {
        SPRINTRAW(12, "*");
    }
    SPRINTRAWEND;   //중요!!! 젤 마지막에 꼭 있어야함!!!(삭제금지) [김태현2020/9/23]
}
DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.cpp
@@ -227,26 +227,43 @@
    char* pReadPoint = NULL;
    char *pStr;
    CString stranelData = "DATA PANEL";
    CString strSubPanelData = "DATA SUBPANEL";
    CString strMaxAvgGray, strMaxPortion;
    while (!feof(pf))
    {
        pStr = fgets(buffer, 1024, pf);
        if (!strncmp(buffer, "DATA,", 5)) continue;
        if (strlen(buffer) <= 0 || pStr == NULL)
            break;
        //else if (!strncmp(buffer, "DATA\tSUBPANEL\t", 14))// 탭 파싱
        else if (!strncmp(buffer, "DATA SUBPANEL ", 14))// 띄어쓰기 파싱
        if (!strncmp(buffer, stranelData, strlen(stranelData)))// 띄어쓰기 파싱
        {
            CakParser paser;
            if (strlen(buffer) <= 0) continue;
            paser.process(buffer);
            paser.process(buffer, " ");
            int nTokNum = paser.getTokNum();
            if (nTokNum < 1) continue;
            if (nTokNum < 42) continue;
            strMaxAvgGray = paser.getTokStr(41);
            strMaxPortion = paser.getTokStr(42);
        }
            if (nTokNum > 0) MacroSubPanel.PRO_IMAGE = paser.getTokStr(20);
            if (nTokNum > 1) MacroSubPanel.AVG_GRAY = atof(paser.getTokStr(21));
            if (nTokNum > 2) MacroSubPanel.PORTION = atof(paser.getTokStr(22));
        if (!strncmp(buffer, strSubPanelData, strlen(strSubPanelData)))// 띄어쓰기 파싱
        {
            CakParser paser;
            if (strlen(buffer) <= 0) continue;
            paser.process(buffer, " ");
            int nTokNum = paser.getTokNum();
            if (nTokNum < 31) continue;
            MacroSubPanel.PRO_IMAGE = paser.getTokStr(20);
            MacroSubPanel.AVG_GRAY_0 = paser.getTokStr(21);
            MacroSubPanel.PORTION_0 = paser.getTokStr(22);
            MacroSubPanel.AVG_GRAY_1 = paser.getTokStr(24);
            MacroSubPanel.PORTION_1 = paser.getTokStr(25);
            MacroSubPanel.AVG_GRAY_2 = paser.getTokStr(27);
            MacroSubPanel.PORTION_2 = paser.getTokStr(28);
            MacroSubPanel.AVG_GRAY_3 = paser.getTokStr(30);
            MacroSubPanel.PORTION_3 = paser.getTokStr(31);
            vecMacroSubPanel.push_back(MacroSubPanel);
        }
@@ -260,23 +277,18 @@
    {
        pGrmMura= pShared->GetCellData(i);
        
        //pGrmMura->clear();
        strcpy(pGrmMura->m_strProImage, m_vecMacroSubPanel[i].PRO_IMAGE);
        pGrmMura->m_fAvgGray = m_vecMacroSubPanel[i].AVG_GRAY;
        pGrmMura->m_fPortion = m_vecMacroSubPanel[i].PORTION;
        strcpy(pGrmMura->m_strProImage, m_vecMacroSubPanel[i].PRO_IMAGE.GetBuffer(0));
        strcpy(pGrmMura->m_strAvgGray_0, m_vecMacroSubPanel[i].AVG_GRAY_0.GetBuffer(0));
        strcpy(pGrmMura->m_strPortion_0, m_vecMacroSubPanel[i].PORTION_0.GetBuffer(0));
        strcpy(pGrmMura->m_strAvgGray_1, m_vecMacroSubPanel[i].AVG_GRAY_1.GetBuffer(0));
        strcpy(pGrmMura->m_strPortion_1, m_vecMacroSubPanel[i].PORTION_1.GetBuffer(0));
        strcpy(pGrmMura->m_strAvgGray_2, m_vecMacroSubPanel[i].AVG_GRAY_2.GetBuffer(0));
        strcpy(pGrmMura->m_strPortion_2, m_vecMacroSubPanel[i].PORTION_2.GetBuffer(0));
        strcpy(pGrmMura->m_strAvgGray_3, m_vecMacroSubPanel[i].AVG_GRAY_3.GetBuffer(0));
        strcpy(pGrmMura->m_strPortion_3, m_vecMacroSubPanel[i].PORTION_3.GetBuffer(0));
    }
    float Max_AVG_GRAY = m_vecMacroSubPanel[0].AVG_GRAY;
    float Max_PORTION = m_vecMacroSubPanel[0].PORTION;
    for (int i = 1; i < m_vecMacroSubPanel.size(); ++i)
    {
        Max_AVG_GRAY = max(Max_AVG_GRAY, m_vecMacroSubPanel[i].AVG_GRAY);    //큰 값을 다시 largest에 대입
        Max_PORTION = max(Max_PORTION, m_vecMacroSubPanel[i].PORTION);
    }
    pShared->GetGlassData()->m_fMaxAvgGray = Max_AVG_GRAY;
    pShared->GetGlassData()->m_fMaxPortion = Max_PORTION;
    strcpy(pShared->GetGlassData()->m_strMaxAvgGray, strMaxAvgGray.GetBuffer(0));
    strcpy(pShared->GetGlassData()->m_strMaxPortion, strMaxPortion.GetBuffer(0));
    m_bReadSuccess = TRUE;
    return TRUE;
DitGlassRawMessenger/DitGlassRawMessenger/MacroResultFile.h
@@ -125,8 +125,14 @@
struct _MacroSubPanel
{
    CString PRO_IMAGE;
    float    AVG_GRAY;
    float    PORTION;
    CString    AVG_GRAY_0;  // 0 Scan 0 Model
    CString    PORTION_0;
    CString    AVG_GRAY_1; // 0 Scan 1 Model
    CString    PORTION_1;
    CString    AVG_GRAY_2; // 1 Scan 0 Model
    CString    PORTION_2;
    CString    AVG_GRAY_3; // 1 Scan 1 Model
    CString    PORTION_3;
};
class CMacroResultFile
DitGlassRawMessenger/Extern/DitGlassRawStruct.h
@@ -173,8 +173,8 @@
    char m_strCount2[2];
    //Mura Data 0412 nwh
    float m_fMaxAvgGray;
    float m_fMaxPortion;
    char m_strMaxAvgGray[12];
    char m_strMaxPortion[12];
     //1226NWH
@@ -254,11 +254,14 @@
    //Mura Data nwh 0404 
    char        m_strProImage[32];
    float        m_fAvgGray;
    float        m_fPortion;
    char        m_strAvgGray_0[12];
    char        m_strPortion_0[12];
    char        m_strAvgGray_1[12];
    char        m_strPortion_1[12];
    char        m_strAvgGray_2[12];
    char        m_strPortion_2[12];
    char        m_strAvgGray_3[12];
    char        m_strPortion_3[12];
    int            m_nDefectNumJudgeOKWhite;
    int            m_nDefectNumJudgeOKBlack;
ReviewSystem/ReviewRecipeEditor/ReviewRecipeEditorDlg.cpp
ReviewSystem/ReviewRecipeEditor/stdafx.h
@@ -43,8 +43,6 @@
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("\\\\126.100.100.10\\d\\DIT Back up\\DIT Review\\Recipe")
#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.10\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
//#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("E:\\DIT Back up\\DIT Review\\Recipe")
//#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("E:\\DIT Back up\\DIT Review\\ReviewServerConfig")
#define    NETIP_A2E_AOI_SERVER                        _T("126.100.100.1")
#define    NETIP_A2E_REVIEW_SYSTEM                        _T("126.100.100.210")
ReviewSystem/ReviewSystem/CameraController.cpp
@@ -107,6 +107,32 @@
        
        if (!pCameraControl->Connect(*it))
        {
            //#3361_ LYW CF AOI Review 전설비 Align Cam 비정상 연결 시 팝업 기능 추가 START
            if (it->GetLibraryType() == CAMERA_LIBRARY_PYLON)
            {
                CString strMessage;
                strMessage.Format(_T("Align카메라 연결 실패 idx = %d"), nCamIndex);
                if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONQUESTION))
                {
                    g_pLog->DisplayMessage(_T("Align Camera Connet Fail! Exit Review System"));
                    //exit(1);
                    return FALSE;
                }
            }
            else if(it->GetLibraryType() == CameraLibrary_Sapera)
            {
                CString strMessage;
                strMessage.Format(_T("Review카메라 연결 실패 idx = %d"), nCamIndex);
                if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONQUESTION))
                {
                    g_pLog->DisplayMessage(_T("Review Camera Connet Fail! Exit Review System"));
                    //exit(1);
                    return FALSE;
                }
            }
            ////#3361_ LYW CF AOI Review 전설비 Align Cam 비정상 연결 시 팝업 기능 추가 END
            delete pCameraControl;
            continue;
        }
ReviewSystem/ReviewSystem/DitGlassRawStruct.h
@@ -173,8 +173,8 @@
    char m_strCount2[2];
    //Mura Data 0412 nwh
    float m_fMaxAvgGray;
    float m_fMaxPortion;
    char m_strMaxAvgGray[12];
    char m_strMaxPortion[12];
     //1226NWH
@@ -254,11 +254,14 @@
    //Mura Data nwh 0404 
    char        m_strProImage[32];
    float        m_fAvgGray;
    float        m_fPortion;
    char        m_strAvgGray_0[12];
    char        m_strPortion_0[12];
    char        m_strAvgGray_1[12];
    char        m_strPortion_1[12];
    char        m_strAvgGray_2[12];
    char        m_strPortion_2[12];
    char        m_strAvgGray_3[12];
    char        m_strPortion_3[12];
    int            m_nDefectNumJudgeOKWhite;
    int            m_nDefectNumJudgeOKBlack;
ReviewSystem/ReviewSystem/MainFrm.cpp
@@ -84,6 +84,12 @@
    SetTimer(ID_TIMER_SEND_SIGNAL_ALIVE, 100, NULL);
    system("net use Y: \\\\126.100.100.1\\d\\DIT_ResultData pw:dit/user:Server/persistent:yes");
    //LYW Align Reconnect
    //system("netsh interface set interface name = \"Align #1\" admin = disable&& netsh interface set interface name = \"Align #1\" admin = enable&& netsh interface set interface name = \"Align #2\" admin = disable&& netsh interface set interface name = \"Align #2\" admin = enable");
    //Sleep(2000);
//    SetTimer(ID_TIMER_WSI_LONGRUN_TEST_TIME, 10000, NULL);
    return 0;
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -48,6 +48,7 @@
#define AOIRAWBIN_PATH        "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin"
#define AOIRAWBIN_TEST_PATH        "d:\\DIT_ResultData\\RawBin"
#define AOIRAWBIN_NETWORK_DRIVE_PATH    "Y:\\RawBin"
enum CPJT_MeasureMode { CPJT_ModeAuto = 0, CPJT_ModeManual };
// [2017:4:18]-[WEZASW] : WSI Module 장착 설비의 경우 PlanType 번호 변경.
@@ -2635,11 +2636,22 @@
    {
        CTime tmReviewLoading = CTime::GetCurrentTime();
        CString strWild;
        strWild.Format("%s\\%s_*.bin", strFilePath, strFileName);
        //strWild.Format("%s\\%s_*.bin", strFilePath, strFileName);
        CakFileUtil akFileFinder;
        while (nReTryTime--)
        {
            //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER 알람 발생 원인 분석 START
            if (nReTryTime%2 == 0)
            {
                strFilePath = AOIRAWBIN_PATH;
            }
            else strFilePath = AOIRAWBIN_NETWORK_DRIVE_PATH;
            strWild.Format("%s\\%s_*.bin", strFilePath, strFileName);
            akFileFinder.FindFile(strWild.GetBuffer(0), FALSE);
            //LYW LOG추가
            g_pLog->DisplayMessage(_T("[GlassLoading][FindRawBinFile] Find Path = %s, RetryCount = %d, ResultCode = [%d]"), strFilePath, 30-nReTryTime, GetLastError());
            //#3359_LYW CF AOI Review REVIEW_LOADING_COMPLETE_TIMEOVER 알람 발생 원인 분석 END
            VECFINDDATA* pFindData = akFileFinder.getFindData();
            int nFileNamePos = strlen(akFileFinder.getProcessPath());
            std::map<LONGLONG, CString> mapSpanFileName;
@@ -2684,6 +2696,7 @@
                    break;
                }
            }
            akFileFinder.clear();
            Sleep(100);
        }
@@ -3108,7 +3121,7 @@
                    strReadData = pTransferData->strRerferData;
                    break;
                }
                m_pSP2P->ISP2P_DisplayMessage(_T("[ReadTransferData] Name: %s, Addr: %s, Size: %d, Data: %s"), pInfo->strName, strReadAddress, nReadSize, strReadData);
                //m_pSP2P->ISP2P_DisplayMessage(_T("[ReadTransferData] Name: %s, Addr: %s, Size: %d, Data: %s"), pInfo->strName, strReadAddress, nReadSize, strReadData); //0517
        }
    }
@@ -4517,7 +4530,8 @@
    strPath  = strPath + _T("\\WSI");
    if(CreateDirectory(strPath,NULL)==FALSE)
    {
        g_pLog->DisplayMessage(_T("[MakeWSIUpLoadDirectory]Directory Create Fail %s "),strPath);
        //LYW LOG추가
        g_pLog->DisplayMessage(_T("[MakeWSIUpLoadDirectory]Directory Create Fail %s, ERROR CODE = %d "),strPath, GetLastError());
    }
    
}
@@ -4673,9 +4687,11 @@
        //보낼 포인트가 있는지 없는지 체크
        if (vectorPosX.empty() == TRUE)
        {
            g_pLog->DisplayMessage(_T("[GantryAutoGo] No Exist Send Point "), vectorPosX.size());
            //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error 알람 발생 원인 분석 및 조치 START
            g_pLog->DisplayMessage(_T("[GantryAutoGo] No Exist Send Point,TwoGantrySyncMode OFF!"), vectorPosX.size());
            g_pLog->DisplayMessage(_T("[GantryAutoGo] (%d)Gantry Path Send Fail"), pModuleStatus->GetGantryIndex()); //taek 210128
            pMotorControl->GantrySetTwoGantrySyncModeSend(1);
            //3360 LYW_ CF AOI QD Review WSI XY MotorMoving Error 알람 발생 원인 분석 및 조치 END
        }
        else
        {
ReviewSystem/ReviewSystemSetting/ReviewSystemSettingDlg.cpp
ReviewSystem/ReviewSystemSetting/stdafx.h
@@ -41,8 +41,6 @@
#define _REVIEW_SERVER_CONFIG_PATH_                    _T("C:\\DIT_Review\\ReviewServerConfig")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _REVIEW_SERVER_SYSTEM_PASSWORD_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.dat")
//#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("E:\\DIT Back up\\DIT Review\\Recipe")
//#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("E:\\DIT Back up\\DIT Review\\ReviewServerConfig")
#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("\\\\126.100.100.10\\d\\DIT Back up\\DIT Review\\Recipe")
#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.10\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
#define _REVIEW_SYSTEM_TITLE_                        _T("ReviewSystem")