SDC C-Project CF Review 프로그램
bd13fa3f9396f1f681759f4623c55d5f91d74a9c..03152a241b9463c582b56896f5f5f73717497ab4
2021-08-25 LYW
Ongoing100 #3486 CF AOI Review Review History 프로그램 테스트 및 적용
03152a 비교 | 트리
2021-08-23 LYW
머지간 오류 수정
f9623a 비교 | 트리
2021-08-18 LYW
Merge branch 'feature/#3561_CF_AOI_Review_Align_카메라_끊김_현상_조치' into feature/...
6c4831 비교 | 트리
2021-08-17 LYW
Ongoing100 #3561 CF AOI Review Align 카메라 끊김 현상 조치
572aeb 비교 | 트리
2021-08-17 LYW
Ongoing50 #3584 CF AOI Review 시뮬레이션 기능 정상화
67bcde 비교 | 트리
2021-08-17 LYW
이전 머지간 누락된 코드 삽입
9aa3a8 비교 | 트리
2021-08-10 LYW
Ongoing50 #3562 CF AOI Review 실행 프로그램 경로 변경
8ac735 비교 | 트리
2021-08-10 LYW
1. Defect Picking 기능 OFF
ebfd7a 비교 | 트리
2021-08-09 LYW
Ongoing90 #3563 CF AOI Review Offset 파라미터 저장시 완료 팝업 추가
2ecc61 비교 | 트리
2021-08-09 LYW
Merge branch 'feature/#3477_CF_AOI_Review_FrameLost_현상_조치' into develop
5c62f2 비교 | 트리
2021-08-09 LYW
Ongoing70 #3477 CF AOI Review [BANK, OC, QD, Blue] FrameL...
a559b5 비교 | 트리
2021-08-09 LYW
Ongoing50 #3561 CF AOI Review Align 카메라 끊김 현상 조치
b354c1 비교 | 트리
2021-07-29 LYW
Ongoing70 #3477 CF AOI Review [BANK, OC, QD, Blue] FrameL...
4f526f 비교 | 트리
31개 파일 변경됨
982 ■■■■■ 파일 변경됨
Internal_Library/CHCameraControl_Sapera/CameraControl_Sapera.cpp 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp 70 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewHistory/bin/ReviewHistroy.exe 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/CHDefectPicker/DefectPicker.cpp 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp 21 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/DlgReview.cpp 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/ReviewRecipeEditorDlg.cpp 156 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewRecipeEditor/stdafx.h 49 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraControlAlign.cpp 3 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/CameraControlReview.cpp 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DisplayMessage.cpp 17 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgControl.cpp 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgControl.h 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.cpp 11 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.h 6 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/FileUploadControl.cpp 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/MainFrm.cpp 6 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 6 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp 16 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewSystem.rc 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.cpp 4 ●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.h 15 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 337 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.h 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/resource.h 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/stdafx.h 32 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystemSetting/ReviewSystemSettingDlg.cpp 77 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystemSetting/stdafx.h 39 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/CHReviewRecipe/RsRcpAlignInfo.h 8 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisInfo.h 29 ●●●● 패치 | 보기 | raw | blame | 히스토리
Internal_Library/CHCameraControl_Sapera/CameraControl_Sapera.cpp
@@ -257,6 +257,16 @@
        if (!m_bGrabbing) return 1;
        nReturn = m_pXfer->Freeze();
        //#3477_210729_LYW_FrameLost_현상 초치_ADD_START
        if (m_pXfer->Wait(1000) == TRUE)
        {
        }
        else
        {
            m_pXfer->Abort();
        }
        //#3477_210729_LYW_FrameLost_현상 초치_ADD_END
        m_bGrabbing = m_pXfer->IsGrabbing();
    }
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.cpp
@@ -279,7 +279,15 @@
//             // 그림을 Picture Control 크기로 화면에 출력한다.
//             m_ReviewImage.Draw(dc, m_picture_rect);
//         }
        if (!m_DefectImage.IsNull())
        //LYW 20210825 #3486 ADD START
        if (!m_DefectRotateImage.IsNull())
        {
            dc.SetStretchBltMode(COLORONCOLOR);
            // 그림을 Picture Control 크기로 화면에 출력한다.
            m_DefectRotateImage.Draw(dc, m_picture_rect2);
        }
        //LYW 20210825 #3486 ADD END
        else if (!m_DefectImage.IsNull())
        {
            dc.SetStretchBltMode(COLORONCOLOR);
            // 그림을 Picture Control 크기로 화면에 출력한다.
@@ -1968,6 +1976,9 @@
    m_DefectImage.Destroy();
    m_ReviewImage.Destroy();
    //LYW 20210825 #3486 ADD START
    m_DefectRotateImage.Destroy();
    //LYW 20210825 #3486 ADD END
    m_AlignFirst.Destroy();
    m_AlignSecend.Destroy();
@@ -2055,7 +2066,7 @@
    DeftectPath.Format(_T("%s\\%s\\%s"), strReviewPath, strReviewImagePath, strReviewImageName);
    //DeftectPath2.Format(_T("%s\\%s"), strInspectorPath, strInspectorName);
    if (strInspectorName == "*" || strInspectorName == "**" || strInspectorName == "***") strInspectorName = "";
    DeftectPath2.Format(_T("%s\\%s\\%s"), strInspectorPath, pImageInfo->m_strGlassID, strReviewImageName);
    DeftectPath2.Format(_T("%s\\%s\\%s"), strInspectorPath, pImageInfo->m_strGlassID, strInspectorName);
    AlignPath.Format(_T("%s\\%s\\%s"), strAlignPath, pImageInfo->m_strGlassID, strAlignName);
    AlignPath2.Format(_T("%s\\%s\\%s"), strAlignPath, pImageInfo->m_strGlassID, strAlignName2);
@@ -2096,13 +2107,21 @@
    if (CFile::GetStatus(DeftectPath2, FileOn) && strInspectorName != "") //파일이 있을 때
    {
        m_DefectImage.Load(DeftectPath2);
        //LYW 20210825 #3486 ADD START
        m_DefectRotateImage.Create(m_DefectImage.GetWidth(), m_DefectImage.GetHeight(), m_DefectImage.GetBPP(), 0);
        ImageRotate(m_DefectImage, m_DefectRotateImage);
        //LYW 20210825 #3486 ADD END
        HBITMAP hBmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(), DeftectPath2,
            IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
        InvalidateRect(m_picture_rect2, FALSE);
        dc.SetStretchBltMode(COLORONCOLOR);
        m_DefectImage.Draw(dc, m_picture_rect2);
        //LYW 20210825 #3486 MOD START
        m_DefectRotateImage.Draw(dc, m_picture_rect2);
        //LYW 20210825 #3486 MOD END
        //original
        //m_DefectImage.Draw(dc, m_picture_rect2);
    }
    else
    {
@@ -2490,6 +2509,9 @@
//    m_ReviewImage.Destroy();
    m_DefectImage.Destroy();
    //LYW 20210825 #3486 ADD START
    m_DefectRotateImage.Destroy();
    //LYW 20210825 #3486 ADD END
    m_AlignFirst.Destroy();
    m_AlignSecend.Destroy();
@@ -2527,6 +2549,48 @@
    m_AlignSecend.Draw(dc, m_Align_rect2);
}
//LYW 20210825 #3486 ADD START
void CReveiwHistoryDlg::ImageRotate(CImage & SrcImage, CImage & DstImage, double degree/* = 180.0 */)
{
    int Height = SrcImage.GetHeight(); // 세로 길이 저장
    int Width = SrcImage.GetWidth(); // 가로 길이 저장
    int new_x, new_y;
    int R, G, B;
    int center_x = (SrcImage.GetWidth() / 2); // 회전 중심점
    int center_y = (SrcImage.GetHeight() / 2); // 회전 중심점
    double seta = 3.14 / (180.0 / degree); // 라디안
    double CosSeta = cos(seta);
    double SinSeta = sin(seta);
    for (int y = 0; y < Height; y++)
    {
        for (int x = 0; x < Width; x++)
        {
            new_x = (int)((x - center_x) * CosSeta - (y - center_y) * SinSeta + center_x);
            new_y = (int)((x - center_x) * SinSeta + (y - center_y) * CosSeta + center_y);
            if ((new_x < 0) || (new_x > Width) || (new_y < 0) || (new_y > Height))
                //이미지 범위를 벗어나면 0 값
            {
                R = 0;
                G = 0;
                B = 0;
            }
            else
            {
                R = GetRValue(SrcImage.GetPixel(new_x, new_y));
                G = GetGValue(SrcImage.GetPixel(new_x, new_y));
                B = GetBValue(SrcImage.GetPixel(new_x, new_y));
            }
            DstImage.SetPixel((int)x, (int)y, RGB(R, G, B));
            new_x = 0; new_y = 0;
        }
    }
}
//LYW 20210825 #3486 ADD END
void CReveiwHistoryDlg::OnChangeEditFileCount()
{
    // TODO:  RICHEDIT 컨트롤인 경우, 이 컨트롤은
ReviewHistory/ReveiwHistory/ReveiwHistoryDlg.h
@@ -83,6 +83,9 @@
    std::vector<_akDefect> m_vectest;
    CImage m_DefectImage;
    //LYW 20210825 #3486 ADD START
    CImage m_DefectRotateImage;
    //LYW 20210825 #3486 ADD END
    CImage m_ReviewImage;
    CRect m_picture_rect;
@@ -240,6 +243,10 @@
    void Imagenoload();
    //LYW 20210825 #3486 ADD START
    void ImageRotate(CImage& SrcImage, CImage& DstImage, double degree = 180.0);
    //LYW 20210825 #3486 ADD END
    BOOL GetCheckFileLoad(int nCount);
    void GlassInfoRest();
ReviewHistory/bin/ReviewHistroy.exe
Binary files differ
ReviewSystem/CHDefectPicker/DefectPicker.cpp
@@ -45,7 +45,9 @@
            SReviewResult dataResult = vecSorterResult->at(nIndx);    
            if(dataResult.nLocation != DefectLoc_ASG && dataResult.nLocation != DefectLoc_PAD && dataResult.nLocation != DefectLoc_C2C)    continue;
            //LYW 210810 DeleteStart
            //if(dataResult.nLocation != DefectLoc_ASG && dataResult.nLocation != DefectLoc_PAD && dataResult.nLocation != DefectLoc_C2C)    continue;
            //LYW 210810 DeleteEnd
            dataResult.nResultIdx = index;
            dataResult.nSequenceNo = index++;
@@ -69,7 +71,9 @@
            SReviewResult dataResult = vecSorterResult->at(nIndx);    
            if(dataResult.nLocation == DefectLoc_ASG || dataResult.nLocation == DefectLoc_PAD || dataResult.nLocation == DefectLoc_C2C)    continue;
            //LYW 210810 DeleteStart
            //if(dataResult.nLocation == DefectLoc_ASG || dataResult.nLocation == DefectLoc_PAD || dataResult.nLocation == DefectLoc_C2C)    continue;
            //LYW 210810 DeleteEnd
            dataResult.nResultIdx = index;
            dataResult.nSequenceNo = index++;
ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp
@@ -303,7 +303,7 @@
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
            //if (11000 <= GetTickCount() - stTime)
            //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
            if (1000 <= GetTickCount() - stTime)
            if (1500 <= GetTickCount() - stTime)
            {
                break;
            }
@@ -313,7 +313,7 @@
        m_pDP2P->IDP2P_SetAFMTracking(nSelModuleIndex, TRUE);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
        //Sleep(1000);
        Sleep(500);
        Sleep(1000);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        CString strimagename;
@@ -888,8 +888,21 @@
        for (int nIdx = 0; nIdx < nPanelCount; nIdx++)
        {
            const SPositionData* pSettingPos = pSettingResult->GetPositionData_Squareness(nIdx);
            const SPositionData* pDataPos = pProcessResult->GetPositionData_Squareness(nIdx);
            //LYW 210811
            const SPositionData* pSettingPos;
            const SPositionData* pDataPos;
            if (nSelModuleIndex == 1)
            {
                pSettingPos = pSettingResult->GetPositionData_Squareness(nIdx);
                pDataPos = pProcessResult->GetPositionData_Squareness(nIdx + 3);
            }
            else
            {
                pSettingPos = pSettingResult->GetPositionData_Squareness(nIdx);
                pDataPos = pProcessResult->GetPositionData_Squareness(nIdx);
            }
            //LYW 210811
            if (pSettingPos == NULL || pDataPos == NULL) continue;
            dMotorPosX[nIdx] = pSettingPos->dPosX;
ReviewSystem/ReviewRecipeEditor/DlgReview.cpp
@@ -290,7 +290,8 @@
                if(strArrayOption.GetSize() > 0)
                {
                    strItemText = strArrayOption.GetAt(pRcpPriorityInfo->GetPriorityStackData());
                    //LYW ERR수정
                    strItemText = strArrayOption.GetAt(pRcpPriorityInfo->GetPriorityGrayData());
                    m_ctrlGridFilterinfo.SetItemText(nRowIdx, nColIdx++, strItemText);
                }
            }
ReviewSystem/ReviewRecipeEditor/ReviewRecipeEditorDlg.cpp
@@ -1,5 +1,5 @@
// ReviewRecipeEditorDlg.cpp : 구현 파일
// ReviewRecipeEditorDlg.cpp : ���� ����
//
#include "stdafx.h"
@@ -17,7 +17,7 @@
#endif
// CReviewRecipeEditorDlg 대화 상자
// CReviewRecipeEditorDlg ��ȭ ����
CReviewRecipeEditorDlg::CReviewRecipeEditorDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CReviewRecipeEditorDlg::IDD, pParent)
@@ -162,18 +162,18 @@
END_MESSAGE_MAP()
// CReviewRecipeEditorDlg 메시지 처리기
// CReviewRecipeEditorDlg �޽��� ó����
BOOL CReviewRecipeEditorDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    // 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
    //  프레임워크가 이 작업을 자동으로 수행합니다.
    SetIcon(m_hIcon, TRUE);            // 큰 아이콘을 설정합니다.
    SetIcon(m_hIcon, FALSE);        // 작은 아이콘을 설정합니다.
    // �� ��ȭ ������ �������� �����մϴ�. ���� ���α׷��� �� â�� ��ȭ ���ڰ� �ƴ� ��쿡��
    //  �����ӿ�ũ�� �� �۾��� �ڵ����� �����մϴ�.
    SetIcon(m_hIcon, TRUE);            // ū �������� �����մϴ�.
    SetIcon(m_hIcon, FALSE);        // ���� �������� �����մϴ�.
    // TODO: 여기에 추가 초기화 작업을 추가합니다.
    // TODO: ���⿡ �߰� �ʱ�ȭ �۾��� �߰��մϴ�.
    //m_bReviewSystemPC = IsReviewSystemPC();
    m_bReviewSystemPC = TRUE;
    pReviewRecipeEditor = this;
@@ -189,29 +189,29 @@
    InitRecipeListGridControl();
    RefreshRecipeList();
    return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
    return TRUE;  // ��Ŀ���� ��Ʈ�ѿ� �������� ������ TRUE�� ��ȯ�մϴ�.
}
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
//  아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
//  프레임워크에서 이 작업을 자동으로 수행합니다.
// ��ȭ ���ڿ� �ּ�ȭ ���߸� �߰��� ��� �������� �׸�����
//  �Ʒ� �ڵ尡 �ʿ��մϴ�. ����/�� ���� ����ϴ� MFC ���� ���α׷��� ��쿡��
//  �����ӿ�ũ���� �� �۾��� �ڵ����� �����մϴ�.
void CReviewRecipeEditorDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
        CPaintDC dc(this); // �׸��⸦ ���� ����̽� ���ؽ�Ʈ
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
        // 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
        // Ŭ���̾�Ʈ �簢������ �������� ����� ����ϴ�.
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;    
        // 아이콘을 그립니다.
        // �������� �׸��ϴ�.
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
@@ -220,8 +220,8 @@
    }
}
// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서
//  이 함수를 호출합니다.
// ����ڰ� �ּ�ȭ�� â�� ��� ���ȿ� Ŀ���� ǥ�õǵ��� �ý��ۿ���
//  �� �Լ��� ȣ���մϴ�.
HCURSOR CReviewRecipeEditorDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
@@ -230,7 +230,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorCreate()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    BOOL bUseRecipeInfo = FALSE;
    int nIdx;
    CString strRecipeName, strNewRecipeName, strMessage;
@@ -240,7 +240,7 @@
    if(cellID.row > 0 && cellID.col > 0)
    {
        strRecipeName = m_ctrlGridRecipeList.GetItemText(cellID.row, 1);
        strMessage.Format(_T("Do you want to create new recipe using %s recipe information?"), strRecipeName);//_T("%s 레시피 정보를 이용하여 생성하시겠습니까?"), strRecipeName);
        strMessage.Format(_T("Do you want to create new recipe using %s recipe information?"), strRecipeName);//_T("%s ������ ������ �̿��Ͽ� �����Ͻðڽ��ϱ�?"), strRecipeName);
        //if (IDYES == AfxMessageBox(strMessage, MB_YESNO | MB_ICONQUESTION))
        //{
@@ -268,11 +268,11 @@
        if(nIdx != -1)
        {
            strTemp = strTemp.Mid(nIdx + 1);
            strNewPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strNewPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp); //210805
        }
        else
        {
            strNewPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strNewRecipeName);
            strNewPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strNewRecipeName);  //210805
        }
    }
@@ -290,22 +290,22 @@
            if(nIdx != -1)
            {
                strTemp = strTemp.Mid(nIdx + 1);
                strSrcPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
                strSrcPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp); //210805
            }
            else
            {
                strSrcPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
                strSrcPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);  //210805
            }
        }
            
        if(CopyFile(strSrcPath, strNewPath, FALSE) == FALSE)
        {
            strMessage.Format(_T("Fail to create %s recipe"));//_T("%s 레시피 생성 실패!"));
            strMessage.Format(_T("Fail to create %s recipe"));//_T("%s ������ ���� ����!"));
            AfxMessageBox(strMessage);
        }
        else
        {
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD START
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
            CString strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
            CreateDirectory(strBackupPath, NULL);
@@ -316,9 +316,9 @@
            strSource.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, strNewRecipeName);
            strDest.Format(_T("%s\\%s.rcp"), strBackupPath, strNewRecipeName);
            CopyFile(strSource, strDest, TRUE);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
            // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
            // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
            COPYDATA_RECIPE2REV copyData;
            copyData.Message = MsgRecipe2Rev_RecipeCreate;
            copyData.nPPID = _ttoi(strNewRecipeName);
@@ -331,12 +331,12 @@
        if(file.Open(strNewPath, CFile::modeCreate | CFile::modeWrite) == FALSE)
        {
            strMessage.Format(_T("Fail to create %s recipe"));//_T("%s 레시피 생성 실패!"));
            strMessage.Format(_T("Fail to create %s recipe"));//_T("%s ������ ���� ����!"));
            AfxMessageBox(strMessage);
        }
        else
        {
            strMessage.Format(_T("Please select the default file!"));//_T("먼저 기본 파일을 선택해주세요!"));
            strMessage.Format(_T("Please select the default file!"));//_T("���� �⺻ ������ �������ּ���!"));
            AfxMessageBox(strMessage);                
        }
@@ -368,7 +368,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorDelete()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    int nIdx;
    CString strRecipeName, strPath, strMessage, strTemp;
    CCellID cellID = m_ctrlGridRecipeList.GetFocusCell();
@@ -389,20 +389,20 @@
            if (nIdx != -1)
            {
                strTemp = strTemp.Mid(nIdx + 1);
                strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
                strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp); //210805
            }
            else
            {
                strPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
                strPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName); //210805
            }
        }
        //_T("%s 레시피를 삭제하시겠습니까?"), strRecipeName);
        //_T("%s �����Ǹ� �����Ͻðڽ��ϱ�?"), strRecipeName);
        strMessage.Format(_T("Do you want to delete %s recipe?"), strRecipeName);
        if (IDYES == AfxMessageBox(strMessage, MB_YESNO | MB_ICONQUESTION))
        {
            // [2017:5:20]-[WEZASW] : 현재 적용된 Recipe(PPID)는 삭제 금지 요청.
            // [2017:5:20]-[WEZASW] : ���� ����� Recipe(PPID)�� ���� ���� ��û.
            if (strRecipeName.Compare(m_strCurrentRecipeName) == 0)
            {
                strMessage.Format(_T("Currently applied Recipe(%s) can not be deleted!"), strRecipeName);
@@ -411,16 +411,16 @@
            }
            DeleteFile(strPath);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD START
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
            CString strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
            CString strDest;
            strDest.Format(_T("%s\\%s.rcp"), strBackupPath, strRecipeName);
            DeleteFile(strDest);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
            // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
            // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
            COPYDATA_RECIPE2REV copyData;
            copyData.Message = MsgRecipe2Rev_RecipeDelete;
            copyData.nPPID = _ttoi(strRecipeName);
@@ -429,7 +429,7 @@
    }
    else
    {
        AfxMessageBox(_T("Please select recipe."));//_T("레시피를 선택하세요."));
        AfxMessageBox(_T("Please select recipe."));//_T("�����Ǹ� �����ϼ���."));
    }
    RefreshRecipeList();
@@ -442,7 +442,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorLoad()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    BOOL bReturn;
    CString strRecipeName;
    CCellID cellID = m_ctrlGridRecipeList.GetFocusCell();
@@ -456,7 +456,7 @@
        {
            m_strCurrentRecipeName = strRecipeName;
            // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
            // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
            COPYDATA_RECIPE2REV copyData;
            copyData.Message = MsgRecipe2Rev_RecipeChange;
            copyData.nPPID = _ttoi(m_strCurrentRecipeName);
@@ -471,7 +471,7 @@
    }
    else
    {
        AfxMessageBox(_T("Please select recipe."));//_T("레시피를 선택하세요."));
        AfxMessageBox(_T("Please select recipe."));//_T("�����Ǹ� �����ϼ���."));
    }
}
@@ -517,7 +517,7 @@
        if (bRet)
        {
            // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
            // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
            COPYDATA_RECIPE2REV copyData;
            copyData.Message = MsgRecipe2Rev_RecipeModify;
            copyData.nPPID = _ttoi(RecipeName);
@@ -540,14 +540,14 @@
            strDest.Format(_T("%s\\%s_%s.rcp"), strBackupPath, RecipeName, strBackupFile);
            CopyFile(strSource, strDest, TRUE);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD START
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
            strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
            CreateDirectory(strBackupPath, NULL);
            strSource.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, RecipeName);
            strDest.Format(_T("%s\\%s.rcp"), strBackupPath, RecipeName);
            CopyFile(strSource, strDest, TRUE);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
            strMessage.Format(_T("Complete to save %s recipe!"), RecipeName);
            //AfxMessageBox(strMessage);
@@ -567,7 +567,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewRcpEditorSave()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    CString strMessage;
    if (m_strCurrentRecipeName.IsEmpty())
@@ -584,7 +584,7 @@
        if (bRet)
        {
            // [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
            // [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
            COPYDATA_RECIPE2REV copyData;
            copyData.Message = MsgRecipe2Rev_RecipeModify;
            copyData.nPPID = _ttoi(m_strCurrentRecipeName);
@@ -607,14 +607,14 @@
            strDest.Format(_T("%s\\%s_%s.rcp"), strBackupPath, m_strCurrentRecipeName, strBackupFile);
            CopyFile(strSource, strDest, TRUE);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD START
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
            strBackupPath = _REVIEW_RECIPE_BACKUP_PATH_CPJT;
            CreateDirectory(strBackupPath, NULL);
            strSource.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, m_strCurrentRecipeName);
            strDest.Format(_T("%s\\%s.rcp"), strBackupPath, m_strCurrentRecipeName);
            CopyFile(strSource, strDest, FALSE);
            //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
            //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
            strMessage.Format(_T("Complete to save %s recipe!"), m_strCurrentRecipeName);
            AfxMessageBox(strMessage);
@@ -641,7 +641,7 @@
void CReviewRecipeEditorDlg::OnBnClickedButtonReviewrcpEditorExit()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    DestroyWindow();
}
@@ -706,15 +706,15 @@
void CReviewRecipeEditorDlg::InitTabControl()
{
    int nIdx = 0;
    m_ctrlTabMain.InsertItem(nIdx++, _T("Common"));            //_T("  공통  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Review"));            //_T("  리뷰  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Common"));            //_T("  ����  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Review"));            //_T("  ����  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("WSI"));            //_T("  WSI  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Align"));            //_T(" 얼라인 "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Judgement"));        //_T(" 판정  "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Align"));            //_T(" ����� "));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Judgement"));        //_T(" ����  "));
    // 미사용으로 제외
//    m_ctrlTabMain.InsertItem(nIdx++, _T("Measure"));        //_T("  측정  "));
//    m_ctrlTabMain.InsertItem(nIdx++, _T("Finding Defect"));    //_T(" 결함찾기 "));
    // �̻������ ����
//    m_ctrlTabMain.InsertItem(nIdx++, _T("Measure"));        //_T("  ����  "));
//    m_ctrlTabMain.InsertItem(nIdx++, _T("Finding Defect"));    //_T(" ����ã�� "));
    //m_ctrlTabMain.InsertItem(nIdx++, _T("Glass"));            //_T(" Glass Info "));
}
@@ -750,19 +750,19 @@
    Item.mask = GVIF_TEXT;
    Item.row = nRowIdx;
    Item.col = nColIdx++;
    strTemp.Format(_T("Index"));//_T("인덱스"));
    strTemp.Format(_T("Index"));//_T("�ε���"));
    Item.strText = strTemp;
    m_ctrlGridRecipeList.SetItem(&Item);
    Item.row = nRowIdx;
    Item.col = nColIdx++;
    strTemp.Format(_T("Recipe Name"));//_T("레시피 이름"));
    strTemp.Format(_T("Recipe Name"));//_T("������ �̸�"));
    Item.strText = strTemp;
    m_ctrlGridRecipeList.SetItem(&Item);
    Item.row = nRowIdx;
    Item.col = nColIdx++;
    strTemp.Format(_T("Last Modified Date"));//_T("최종 수정 날짜"));
    strTemp.Format(_T("Last Modified Date"));//_T("���� ���� ��¥"));
    Item.strText = strTemp;
    m_ctrlGridRecipeList.SetItem(&Item);
}
@@ -787,7 +787,7 @@
        for(i = 0; i < nRecipeCount; i++)
        {
            //레시피 인덱스
            //������ �ε���
            nColIdx = 0;
            Item.mask = GVIF_TEXT;
            Item.row = nRowIdx;
@@ -796,13 +796,13 @@
            Item.strText = strTemp;
            m_ctrlGridRecipeList.SetItem(&Item);
            //레시피 이름
            //������ �̸�
            nColIdx++;
            strTemp = strArrayRecipeName.GetAt(i);
            m_ctrlGridRecipeList.SetItemText(nRowIdx, nColIdx, strTemp);
            m_ctrlGridRecipeList.SetItemState(nRowIdx, nColIdx, GVIS_READONLY);
            //최종 수정 날짜
            //���� ���� ��¥
            nColIdx++;
            strTemp = strArrayLastWriteTime.GetAt(i);
            m_ctrlGridRecipeList.SetItemText(nRowIdx, nColIdx, strTemp);
@@ -837,11 +837,11 @@
        if(nIdx != -1)
        {
            strTemp = strTemp.Mid(nIdx + 1);
            strSearchPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strSearchPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
        }
        else
        {
            strSearchPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\*.rcp"), NETIP_A2E_REVIEW_SYSTEM);
            strSearchPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\*.rcp"), NETIP_A2E_REVIEW_SYSTEM); //210805
        }
    }
@@ -902,12 +902,12 @@
        if(nIdx != -1)
        {
            strTemp = strTemp.Mid(nIdx + 1);
            strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
        }
        else
        {
            strPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
        }
            strPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);//210805
        }
    }
    CMacroFile macroFile;
@@ -995,11 +995,11 @@
        if(nIdx != -1)
        {
            strTemp = strTemp.Mid(nIdx + 1);
            strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
        }
        else
        {
            strPath.Format(_T("\\\\%s\\C\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName);
            strPath.Format(_T("\\\\%s\\D\\DIT_Review\\Recipe\\%s.rcp"), NETIP_A2E_REVIEW_SYSTEM, strRecipeName); //210805
        }
    }
    
@@ -1069,11 +1069,11 @@
        if(nIdx != -1)
        {
            strTemp = strTemp.Mid(nIdx + 1);
            strPath.Format(_T("\\\\%s\\C\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
            strPath.Format(_T("\\\\%s\\D\\%s"), NETIP_A2E_REVIEW_SYSTEM, strTemp);
        }
        else
        {
            strPath.Format(_T("\\\\%s\\C\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg"), NETIP_A2E_REVIEW_SYSTEM);
            strPath.Format(_T("\\\\%s\\D\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg"), NETIP_A2E_REVIEW_SYSTEM); //210805
        }
    }
@@ -1106,12 +1106,12 @@
void CReviewRecipeEditorDlg::OnTcnSelchangeTabReviewRcpEditorMainTab(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    RecipeMainTab nTabIdx;
    nTabIdx = (RecipeMainTab)m_ctrlTabMain.GetCurSel();
    // [2017:1:25]-[WEZASW] : SystemMachine_B7E_WSI 설비 분리(WSI 유/무)
    // [2017:1:25]-[WEZASW] : SystemMachine_B7E_WSI ���� �и�(WSI ��/��)
    switch(GetCurrentTapIndex(nTabIdx))
    {
    case COMMON_TAB:
@@ -1217,8 +1217,8 @@
}
void CReviewRecipeEditorDlg::OnCancel()
{
    // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
    //_T("레시피 에디터 프로그램을 종료하시겠습니까?"), MB_YESNO | MB_ICONQUESTION))
    // TODO: ���⿡ Ư��ȭ�� �ڵ带 �߰� ��/�Ǵ� �⺻ Ŭ������ ȣ���մϴ�.
    //_T("������ ������ ���α׷��� �����Ͻðڽ��ϱ�?"), MB_YESNO | MB_ICONQUESTION))
    if (IDNO == AfxMessageBox(_T("Do you want to exit recipe editor program?"), MB_YESNO | MB_ICONERROR))
    {
        return;
@@ -1344,7 +1344,7 @@
void CReviewRecipeEditorDlg::OnStnClickedStaticSelectRcipe()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
}
@@ -1447,7 +1447,7 @@
    }
    else
    {
        AfxMessageBox(_T("Please select recipe."));//_T("레시피를 선택하세요."));
        AfxMessageBox(_T("Please select recipe."));//_T("�����Ǹ� �����ϼ���."));
    }
    return bSuccess;
@@ -1457,7 +1457,7 @@
{
    BOOL bSuccess = TRUE;
    // 중복 Recipe 생성 금지.
    // �ߺ� Recipe ���� ����.
    CFileFind finder;
    CString strRecipeFile;
    strRecipeFile.Format(_T("%s\\%s.rcp"), _REVIEW_RECIPE_PATH_, strRecipeName);
ReviewSystem/ReviewRecipeEditor/stdafx.h
@@ -1,7 +1,7 @@
// stdafx.h : 자주 사용하지만 자주 변경되지는 않는
// 표준 시스템 포함 파일 및 프로젝트 관련 포함 파일이
// 들어 있는 포함 파일입니다.
// stdafx.h : ���� ��������� ���� ��������� �ʴ�
// ǥ�� �ý��� ���� ���� �� ������Ʈ ���� ���� ������
// ��� �ִ� ���� �����Դϴ�.
#pragma once
@@ -10,37 +10,42 @@
#endif
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // 거의 사용되지 않는 내용은 Windows 헤더에서 제외합니다.
#define VC_EXTRALEAN            // ���� ������ �ʴ� ������ Windows ������� �����մϴ�.
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 일부 CString 생성자는 명시적으로 선언됩니다.
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // �Ϻ� CString �����ڴ� ��������� ����˴ϴ�.
// MFC의 공통 부분과 무시 가능한 경고 메시지에 대한 숨기기를 해제합니다.
// MFC�� ���� �κа� ���� ������ ��� �޽����� ���� ����⸦ �����մϴ�.
#define _AFX_ALL_WARNINGS
#include <afxwin.h>         // MFC 핵심 및 표준 구성 요소입니다.
#include <afxext.h>         // MFC 확장입니다.
#include <afxwin.h>         // MFC �ٽ� �� ǥ�� ���� ����Դϴ�.
#include <afxext.h>         // MFC Ȯ���Դϴ�.
#include <afxdisp.h>        // MFC 자동화 클래스입니다.
#include <afxdisp.h>        // MFC �ڵ�ȭ Ŭ�����Դϴ�.
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원입니다.
#include <afxdtctl.h>           // Internet Explorer 4 ���� ��Ʈ�ѿ� ���� MFC �����Դϴ�.
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // Windows 공용 컨트롤에 대한 MFC 지원입니다.
#include <afxcmn.h>             // Windows ���� ��Ʈ�ѿ� ���� MFC �����Դϴ�.
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h>     // MFC의 리본 및 컨트롤 막대 지원
#include <afxcontrolbars.h>     // MFC�� ���� �� ��Ʈ�� ���� ����
#include <afxinet.h>
#include <afxcontrolbars.h>
#define _REVIEW_BASE_PATH_                            _T("C:\\DIT_Review")
#define _REVIEW_RECIPE_PATH_                        _T("C:\\DIT_Review\\Recipe")
#define _REVIEW_RECIPE_BACKUP_PATH_                    _T("C:\\DIT_Review\\Recipe\\Backup")
#define _REVIEW_RECIPE_LOGIN_LOG_PATH_                _T("C:\\DIT_Review\\Recipe\\LoginLog")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
//#define _REVIEW_BASE_PATH_                            _T("C:\\DIT_Review")
//#define _REVIEW_RECIPE_PATH_                        _T("C:\\DIT_Review\\Recipe")
//#define _REVIEW_RECIPE_BACKUP_PATH_                    _T("C:\\DIT_Review\\Recipe\\Backup")
//#define _REVIEW_RECIPE_LOGIN_LOG_PATH_                _T("C:\\DIT_Review\\Recipe\\LoginLog")
//#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("C:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _REVIEW_BASE_PATH_                            _T("D:\\DIT_Review")  //210805
#define _REVIEW_RECIPE_PATH_                        _T("D:\\DIT_Review\\Recipe")
#define _REVIEW_RECIPE_BACKUP_PATH_                    _T("D:\\DIT_Review\\Recipe\\Backup")
#define _REVIEW_RECIPE_LOGIN_LOG_PATH_                _T("D:\\DIT_Review\\Recipe\\LoginLog")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("D:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\Recipe")
#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
@@ -72,19 +77,19 @@
#define    COPYDATA_RECIPEEDITOR2REVIEWSYSTEM            1600
// [2017:4:17]-[WEZASW] : CIM(Recipe) 보고 항목 추가.
// [2017:4:17]-[WEZASW] : CIM(Recipe) ���� �׸� �߰�.
enum MsgRecipe2Rev
{
    MsgRecipe2Rev_None = -1,
    MsgRecipe2Rev_StandardCameraGlassPos,
    MsgRev2Recipe_StandardCameraGlassPos,
    MsgRecipe2Rev_RecipeCreate,                    // Recipe(PPID) 추가
    MsgRecipe2Rev_RecipeCreate,                    // Recipe(PPID) �߰�
    MsgRev2Recipe_RecipeCreate,
    MsgRecipe2Rev_RecipeChange,                    // Recipe(PPID) 변경
    MsgRecipe2Rev_RecipeChange,                    // Recipe(PPID) ����
    MsgRev2Recipe_RecipeChange,
    MsgRecipe2Rev_RecipeDelete,                    // Recipe(PPID) 삭제
    MsgRecipe2Rev_RecipeDelete,                    // Recipe(PPID) ����
    MsgRev2Recipe_RecipeDelete,
    MsgRecipe2Rev_RecipeModify,                    // Recipe(PPID) Parameter 수정
    MsgRecipe2Rev_RecipeModify,                    // Recipe(PPID) Parameter ����
    MsgRev2Recipe_RecipeModify
};
ReviewSystem/ReviewSystem/CameraControlAlign.cpp
@@ -5,7 +5,8 @@
#include "CHReviewSetting/SystemInfo.h"
#include "CHReviewRecipe/RsRcpAlignInfo.h"
#define ALIGN_TEMPLATE_PATH _T("C:\\DIT_Review\\Recipe\\AlignImage\\")
#define ALIGN_TEMPLATE_PATH _T("D:\\DIT_Review\\Recipe\\AlignImage\\")
//#define ALIGN_TEMPLATE_PATH _T("C:\\DIT_Review\\Recipe\\AlignImage\\") //210805
using namespace CHImageControls;
ReviewSystem/ReviewSystem/CameraControlReview.cpp
@@ -207,11 +207,13 @@
    CString strPath =m_pRCC2P->IRCC2P_GetTotalPitchImageName();
    if(strPath == _T("")){
        strPath = _T("C:\\DIT_Review\\Recipe\\AlignImage\\ReviewAlign.bmp");
        strPath = _T("D:\\DIT_Review\\Recipe\\AlignImage\\ReviewAlign.bmp");
        //strPath = _T("C:\\DIT_Review\\Recipe\\AlignImage\\ReviewAlign.bmp");  //210805
    }
    else
    {
        strPath = _T("C:\\DIT_Review\\Recipe\\AlignImage\\")+strPath;
        strPath = _T("D:\\DIT_Review\\Recipe\\AlignImage\\") + strPath;
        //strPath = _T("C:\\DIT_Review\\Recipe\\AlignImage\\")+strPath; //210805
    }
    
ReviewSystem/ReviewSystem/DisplayMessage.cpp
@@ -78,13 +78,20 @@
{
    va_list list;
    TCHAR strText[2000] = {0};
    try
    {
        va_start(list, lpstrFormat);
        _vstprintf_s(strText, lpstrFormat, list);
        va_end(list);
    va_start(list, lpstrFormat);
    _vstprintf_s(strText, lpstrFormat, list);
    va_end(list);
        CString* pstrLog = new CString(strText);
        PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(pstrLog), 0);
    }
    catch (...)
    {
        return;
    }
    CString* pstrLog = new CString(strText);
    PostThreadMessage(m_ThreadId, WM_DIPLAY_LOG, reinterpret_cast<WPARAM>(pstrLog), 0);
//     WriteToFile(strText);
// 
ReviewSystem/ReviewSystem/DlgControl.cpp
@@ -30,6 +30,7 @@
    m_nMoveAxis            = MoveAxis_Center;
    m_nGlassGridViewIndex = 0;
    pDlgContol          = NULL;
    m_bAlignCamGrab        = FALSE;
}
#define ENABLE_RADIO_TIMER
@@ -111,6 +112,7 @@
    ON_BN_CLICKED(IDC_BT_REVIEW_POPUP, &CDlgControl::OnBnClickedBtReviewPopup)
    ON_BN_CLICKED(IDC_CHECK_USE_SIMULATION, &CDlgControl::OnBnClickedCheckUseSimulation)
    ON_STN_DBLCLK(IDC_STATIC_MAGNIFICATION, &CDlgControl::OnDblclkStaticMagnification)
    ON_BN_CLICKED(IDC_BUTTON_ALIGNCAM_GRAB, &CDlgControl::OnBnClickedButtonAligncamGrab)
END_MESSAGE_MAP()
@@ -184,6 +186,10 @@
                m_ctrlButtonColorCtrl.addControl(IDC_BT_REVIEW_POPUP, this);
                m_ctrlButtonColorCtrl.addControl(IDC_CHECK_USE_SIMULATION, this);
                //#3561 CF AOI Review Align 카메라 끊김 현상 조치 ADD START
                m_ctrlButtonColorCtrl.addControl(IDC_BUTTON_ALIGNCAM_GRAB, this);
                //#3561 CF AOI Review Align 카메라 끊김 현상 조치 ADD END
@@ -1450,4 +1456,24 @@
    {
        (GetDlgItem(IDC_CHECK_USE_SIMULATION))->ShowWindow(SW_SHOW);
    }
}
}
//#3561 CF AOI Review Align 카메라 끊김 현상 조치 ADD START
void CDlgControl::OnBnClickedButtonAligncamGrab()
{
    CSequenceProcessor* pSequenceProcessor = m_pDC2P->IRP2P_GetSequenceProcessor();
    if (pSequenceProcessor == NULL) return;
    if (m_bAlignCamGrab == FALSE)
    {
        pSequenceProcessor->AlignCamera_CameraControl(CameraControlLive);
        m_bAlignCamGrab = TRUE;
    }
    else
    {
        pSequenceProcessor->AlignCamera_CameraControl(CameraControlStop);
        m_bAlignCamGrab = FALSE;
    }
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
}
//#3561 CF AOI Review Align 카메라 끊김 현상 조치 ADD END
ReviewSystem/ReviewSystem/DlgControl.h
@@ -100,6 +100,7 @@
    
    CFontStatic                    m_ctrlKeyMoveJog;
    BOOL                        m_bAlignCamGrab;
    double                        m_dGoPosX;
@@ -209,4 +210,5 @@
    afx_msg void OnBnClickedBtReviewPopup();
    afx_msg void OnBnClickedCheckUseSimulation();
    afx_msg void OnDblclkStaticMagnification();
    afx_msg void OnBnClickedButtonAligncamGrab();
};
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.cpp
@@ -1033,6 +1033,17 @@
    bReturn = macroFile.Write(strFilePath);
    // #3563 LYW_ CF AOI Review Offset 파라미터 저장시 완료 팝업 추가 ADD START
    CString strMessage;
    strMessage.Format(_T("Save Offset Success!!"));
    if (IDOK == AfxMessageBox(strMessage, MB_OK | MB_ICONINFORMATION))
    {
        g_pLog->DisplayMessage(_T("Save Offset Success!!"));
    }
    // #3563 LYW_ CF AOI Review Offset 파라미터 저장시 완료 팝업 추가 ADD END
    return bReturn;
}
ReviewSystem/ReviewSystem/DlgReviewOffSetTool.h
@@ -21,11 +21,11 @@
//enum MotorOringTYPE {
//    LEFT_Top = 0, RIGHT_TOP,LEFT_BOTTOM, RIGHT_BOTTOM
//};
#define    REVIEW_OFFSET_CONFIGFILE_PATH _T("C:\\DIT_Review\\ReviewServerConfig\\")
#define    REVIEW_OFFSET_CONFIGFILE_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\") //210805
#define    REVIEW_OFFSET_CONFIGFILE_NAME _T("ReviewOffSet.cfg")
#define REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME _T("C:\\DIT_Review\\ReviewServerConfig\\ReviewOffSet.cfg")
#define REVIEW_OFFSET_CONFIGFILE_FULL_PATHNAME _T("D:\\DIT_Review\\ReviewServerConfig\\ReviewOffSet.cfg")
#define    REVIEW_OFFSET_BACKUP_FORDER_NAME _T("OffsetBackup")
#define    REVIEW_OFFSET_BACKUP_FORDER_PATH _T("C:\\DIT_Review\\ReviewServerConfig\\OffsetBackup\\")
#define    REVIEW_OFFSET_BACKUP_FORDER_PATH _T("D:\\DIT_Review\\ReviewServerConfig\\OffsetBackup\\")
// CDlgDefocusList 대화 상자입니다.
interface IDialogReviewOffSet2Parent
ReviewSystem/ReviewSystem/FileUploadControl.cpp
@@ -179,7 +179,7 @@
// 
//     CCommendParam *pParam = NULL;
// 
//     //FTPUpLoad이면 반환
//     //FTPUpLoad�̸� ��ȯ
//     if( bFTPUpload )
//         return FALSE;
// 
@@ -301,7 +301,8 @@
    if (NULL == hWnd)
    {
        g_pLog->DisplayMessage(_T("Find FTPUploader Program : Fail."));
        StartFTPUploader(_T("C:\\DIT_Review"));
        StartFTPUploader(_T("D:\\DIT_Review"));  //210805
    }
    else
    {
@@ -314,7 +315,7 @@
        else
        {
            g_pLog->DisplayMessage(_T("Send Data to FTPUploader : Fail."));
            RestartFTPUploader(_T("C:\\DIT_Review")); //A2E FTPUploader
            RestartFTPUploader(_T("D:\\DIT_Review")); //A2E FTPUploader //210805
            bRet = FALSE;
        }
    }
ReviewSystem/ReviewSystem/MainFrm.cpp
@@ -451,9 +451,9 @@
#define strScript "RESTART^AFControl.exe^C:\\AFControl\\program\\AFControl.exe"
    
    CFile file;
    if( FALSE == file.Open(_T("C:\\DIT_Review\\MakeScript.TSF"),CFile::modeCreate | CFile::modeWrite) )
    if( FALSE == file.Open(_T("D:\\DIT_Review\\MakeScript.TSF"),CFile::modeCreate | CFile::modeWrite) ) //210805
    {
        g_pLog->DisplayMessage(_T("File[C:\\DIT_Review\\MakeScript.TSF] Create Fail!!"));
        g_pLog->DisplayMessage(_T("File[D:\\DIT_Review\\MakeScript.TSF] Create Fail!!")); //210805
        return;
    }
@@ -485,7 +485,7 @@
    CString strTarget;
    strTarget.Format(_T("\\\\126.100.100.220\\c\\RemoteTaskMgr\\T\\CopyScript.TSF"));
    
    BOOL bRet = CopyFile(_T("C:\\DIT_Review\\MakeScript.TSF"),strTarget,FALSE);
    BOOL bRet = CopyFile(_T("D:\\DIT_Review\\MakeScript.TSF"),strTarget,FALSE); //210805
    if(bRet == FALSE)
        g_pLog->DisplayMessage(_T("[%s]Send Script Fail!"), strTarget);
    /////////////////////////////////////
ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -1272,7 +1272,7 @@
        // process status observer
        AddObserverUpdateProcessStatus(static_cast<IUpdateProcessStatus*>(m_pAlignCameraControl));
        m_pAlignCameraControl->Camera_Control(CameraControlLive);
        /*m_pAlignCameraControl->Camera_Control(CameraControlLive);*/      // 210805 Align Camera Sequence 변경
    }
    else
    {
@@ -6525,6 +6525,10 @@
{
    if (m_pSequenceProcessor==NULL) return;
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD START
    m_pSequenceProcessor->SetSimulationMode(TRUE);
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD END
    if (nCommand == -1)        // DBClick Date
    {
ReviewSystem/ReviewSystem/ReviewProcessor_CPJT.cpp
@@ -1232,7 +1232,7 @@
              m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
              m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
              if (dFocusValue < nDefocusValueMin && dFocusValue > nDefocusValueMax)
              if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
              {
                  m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
              }
@@ -1247,7 +1247,7 @@
              m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
              m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
              if (dFocusValue < nDefocusValueMin && dFocusValue > nDefocusValueMax)
              if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
              {
                  m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
              }
@@ -1282,7 +1282,7 @@
            m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
            m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
            
            if (dFocusValue < nDefocusValueMin && dFocusValue > nDefocusValueMax)
            if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
            {
                m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
            }
@@ -1298,7 +1298,7 @@
            m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
            m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
            if (dFocusValue < nDefocusValueMin && dFocusValue > nDefocusValueMax)
            if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
            {
                m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
            }
@@ -1416,7 +1416,7 @@
                    m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
                    m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
                    if (dFocusValue < nDefocusValueMin && dFocusValue > nDefocusValueMax)
                    if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
                    {
                        m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
                    }
@@ -1431,7 +1431,7 @@
                    m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
                    m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
                    if (dFocusValue < nDefocusValueMin && dFocusValue > nDefocusValueMax)
                    if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
                    {
                        m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
                    }
@@ -1487,7 +1487,7 @@
            m_pRP2P->IRP2P_SetFirstReviewLeft(FALSE);
            m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewLeft FDC FocusValue = %.2f "), dFocusValue);
            if (dFocusValue < nDefocusValueMin && dFocusValue > nDefocusValueMax)
            if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
            {
                m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
            }
@@ -1502,7 +1502,7 @@
            m_pRP2P->IRP2P_SetFirstReviewRight(FALSE);
            m_pRP2P->IRP2P_DisplayMessage(_T("FirstReviewRight FDC FocusValue = %.2f "), dFocusValue);
            if (dFocusValue < nDefocusValueMin && dFocusValue > nDefocusValueMax)
            if (dFocusValue < nDefocusValueMin || dFocusValue > nDefocusValueMax)
            {
                m_pRP2P->IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(0, 3, 1000);
            }
ReviewSystem/ReviewSystem/ReviewSystem.rc
@@ -483,9 +483,9 @@
    PUSHBUTTON      "Key Jog 시작",IDC_KEY_JOD_MOVE,207,167,45,17,NOT WS_VISIBLE | NOT WS_TABSTOP
    PUSHBUTTON      "test2",IDC_BUTTON_TEST2,273,167,34,17,NOT WS_VISIBLE
    CTEXT           "Key Jog시작",IDC_KEY_JOG_MOVE,392,160,31,24
    PUSHBUTTON      "Reduce",IDC_CHECK_UI_REDUCE,436,77,51,17
    PUSHBUTTON      "Left",IDC_BUTTON_UI_LEFT,436,96,50,17
    PUSHBUTTON      "Right",IDC_BUTTON_UI_RIGHT1,436,116,50,17
    PUSHBUTTON      "Reduce",IDC_CHECK_UI_REDUCE,436,73,51,17
    PUSHBUTTON      "Left",IDC_BUTTON_UI_LEFT,436,92,50,17
    PUSHBUTTON      "Right",IDC_BUTTON_UI_RIGHT1,436,112,50,17
    CONTROL         "Track",IDC_CHECK_AFM_TRACK,"Button",BS_AUTOCHECKBOX | BS_PUSHLIKE | WS_TABSTOP,369,77,29,57
    LTEXT           "GlassCenter X/Y(mm)",IDC_STATIC,10,105,74,8
    PUSHBUTTON      "Go",IDC_BUTTON_GLASSCENTER_GO_XY,196,101,27,17
@@ -494,6 +494,7 @@
    CONTROL         "OffSet ON",IDC_SELECT_OFFSET_ON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,418,61,63,10
    PUSHBUTTON      "ReviewPopUp",IDC_BT_REVIEW_POPUP,433,18,54,17
    CONTROL         "Use Simulation",IDC_CHECK_USE_SIMULATION,"Button",BS_AUTOCHECKBOX | NOT WS_VISIBLE | WS_TABSTOP,418,41,66,10
    PUSHBUTTON      "Align Grab",IDC_BUTTON_ALIGNCAM_GRAB,436,130,50,16
END
IDD_DLG_MODULE_INFO DIALOGEX 0, 0, 532, 187
ReviewSystem/ReviewSystem/SequenceProcessor.cpp
@@ -83,7 +83,9 @@
    m_nAlive = 0;
    m_nWsiTotalCount = 0;
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD START
    m_bSimulationMode = FALSE;
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD END
    InitializeCriticalSection(&m_csProcessStatus);
}
ReviewSystem/ReviewSystem/SequenceProcessor.h
@@ -587,10 +587,16 @@
    void SetSP2P(ISequenceProcessor2Parent* pSP2P);
    void SetLineMachineType(int nLineType, int nMachineType, CString strEqpID);
    void SetDefaultValue();
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD START
    void SetSimulationMode(BOOL bCheck) { m_bSimulationMode = bCheck; };
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD END
    // getter
    int        GetProcessMode() const;
    int        GetProcessStatus() const;
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD START
    BOOL GetSimulationMode() { return m_bSimulationMode; };
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD END
    static int GetDirectionX(int nGlassDirection, int nMotorDirection);
    static int GetDirectionY(int nGlassDirection, int nMotorDirection);
@@ -614,6 +620,8 @@
    // Review, WSI Stop Siganl
    BOOL    SetMotionStop();
    // Align Camera Control command
    BOOL    AlignCamera_CameraControl(int nControlCmd);
protected:
    // common
@@ -625,9 +633,6 @@
    // PCControl Control command
    BOOL    Signal_SendSignal(int nSignalIndex);
    BOOL    PCControl_ReadTransferData(STransferData* pTransferData);
    // Align Camera Control command
    BOOL    AlignCamera_CameraControl(int nControlCmd);
    // Review Camera Control Command
    void    ReviewCamera_CameraControl(int nControlCmd);
@@ -780,4 +785,8 @@
    CTime                m_wsiStartTime;
    int                    m_nWsiTotalCount;
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD START
    BOOL                m_bSimulationMode;
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD END
};
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -428,6 +428,8 @@
         g_pLog->DisplayMessage(_T("[AlignResult] Glass Result is NULL!"));
         SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Fail Signal!"));
        AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence ����
         return;
    }
@@ -544,6 +546,8 @@
        SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Fail Data!"));
    }
    AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence 변경
    SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
@@ -759,7 +763,7 @@
            if (( nTotalCount += pGlassResult->GetTotalSReviewResultCount()) > 0)
            {
                m_pSP2P->ISP2P_DisplayMessage(_T("[Sequence Processor] Review Plan Start!"));
                //LYW DCOLL 임시조치
                //LYW DCOLL �ӽ���ġ
                CDitGlassRawClient *pDitRawClient = CDitGlassRawClient::GetInstance();
                if (pDitRawClient->isConnect() == TRUE)
                {
@@ -772,7 +776,7 @@
                    strcpy(pSharedDefectReview->m_strRevImageName, "");
                }
                //LYW DCOLL 임시조치
                //LYW DCOLL �ӽ���ġ
                ::Sleep(nWaitTime);
                m_pSP2P->ISP2P_GetReviewProcessor()->ResetGantryDone();
                bExcute = ReviewStartProcessing(pGlassResult, nPlanIdx);
@@ -901,6 +905,9 @@
        break;
    }
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD START
    SetSimulationMode(FALSE);
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD END
    return;
}
@@ -920,10 +927,18 @@
    m_pSP2P->ISP2P_SetFirstReviewLeft(TRUE);
    m_pSP2P->ISP2P_SetFirstReviewRight(TRUE);
    if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_LoadingAck_CPJT))
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Ack Signal!"));
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
    if (GetSimulationMode() == FALSE)
    {
        if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_LoadingAck_CPJT))
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Ack Signal!"));
    }
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
    //Original
//     if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_LoadingAck_CPJT))
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Ack Signal!"));
     // read config file
     if(!m_pSP2P->ISP2P_System_ReadConfigFile())
         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor] System Value Loading FAIL!"));    
@@ -993,7 +1008,14 @@
                {
                    if (nReconnect == 3)
                    {
                        SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
                        //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
                        if (GetSimulationMode() == FALSE)
                        {
                            SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
                        }
                        //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
                        //original
                        /*SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);*/
                        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading FAIL Signal!"));
                        break;
@@ -1036,11 +1058,20 @@
            strFileName.Format(_T("%s_%s"), strGlassIDTemp, strGlassStepIdTemp);
            //업데이트시
            //������Ʈ��
            //bFileFind = FindRawBinFile(strFileName);
            bFileFind = TRUE;
            //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
            if (GetSimulationMode() == FALSE)
            {
                bFileFind = FindRawBinFile(strFileName);
            }
            else
            {
                bFileFind = TRUE;
            }
            //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
            //original
            /*bFileFind = FindRawBinFile(strFileName);*/
            pDitRawClient->SetReviewStart();
            Sleep(1000);
@@ -1145,19 +1176,36 @@
     // review camera stop
    ReviewCamera_CameraControl(CameraControlStop);    
    //AlignCamera_CameraControl(CameraControlLive);
    AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence ����
     // send signal to plc
     if (nResultCode==0)
     {
         SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Success Signal!"));
     }
     else
     {
         SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading FAIL Signal!"));
     }
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
        // send signal to plc
    if (GetSimulationMode() == FALSE)
    {
        if (nResultCode == 0)
        {
            SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Success Signal!"));
        }
        else
        {
            SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading FAIL Signal!"));
        }
    }
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
    //original
//      send signal to plc
//           if (nResultCode==0)
//           {
//               SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
//               m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Success Signal!"));
//           }
//           else
//           {
//               SendResultToSignalControl(PCControlSendData_LoadingResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
//               m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading FAIL Signal!"));
//           }
 
     // send cell data to review processorm_pDitGlass
     CReviewProcessor* pReviewProcessor = m_pSP2P->ISP2P_GetReviewProcessor();
@@ -1185,8 +1233,16 @@
         m_pSP2P->ISP2P_UpdateDefectFilter(pDefectFilter);
     }    
    
    SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_LoadingComplete_CPJT);
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Complete Signal!"));
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
    if (GetSimulationMode() == FALSE)
    {
        SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_LoadingComplete_CPJT);
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Complete Signal!"));
    }
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
    //original
//     SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_LoadingComplete_CPJT);
//     m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::GlassLoading] Send Loading Complete Signal!"));
     m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::OUT] Loading!"));
@@ -1202,16 +1258,37 @@
{
     m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] AlignStart!"));
    if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT))
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Start Ack!"));
    AlignCamera_CameraControl(CameraControlLive);  // 210805 Align Camera Sequence ����
    Sleep(300);
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
    if (GetSimulationMode() == FALSE)
    {
        if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT))
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Start Ack!"));
    }
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
    //original
//     if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_AlignStartAck_CPJT))
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Start Ack!"));
     // 1. get current glass result
     CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult();
     if (pGlassResult==NULL) {    return;    }
     if (pGlassResult==NULL)
    {
        Sleep(350);
        AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence ����
        return;
    }
 
    const CRsRcpAlignInfo* pRsRcpAlignInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpAlignInfo();
    if(pRsRcpAlignInfo == NULL)    return;
    if (pRsRcpAlignInfo == NULL)
    {
        Sleep(350);
        AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence ����
        return;
    }
     // 2. get align camera control    
     CCameraControlAlign* pAlignCameraControl = m_pSP2P->ISP2P_GetAlignCameraControl();
 
@@ -1219,11 +1296,23 @@
    if(pRsRcpAlignInfo->m_bAlignSkipMode)
    {
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Align Skip Mode !!!!!!!"));
        //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
        if (GetSimulationMode() == FALSE)
        {
            SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
            SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
            //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
        }
        //original
//         SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
//         SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
        SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
        SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
        Sleep(350);
        AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence ����
    }
    else
    {
@@ -1232,10 +1321,23 @@
        {
            if(pAlignCameraControl->AlignCameraDisconnectCheck() == FALSE)
            {
                SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
                m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Algin Camera Disconnect!!!!"));
                //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
                if (GetSimulationMode() == FALSE)
                {
                    SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Algin Camera Disconnect!!!!"));
                }
                //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
                //original
//                 SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
//                 m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Algin Camera Disconnect!!!!"));
            }
        }        
        else
        {
            Sleep(350);
            AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence ����
        }
        if (pGlassResult && pAlignCameraControl && pAlignCameraControl->AlignProcess())
        {
@@ -1245,18 +1347,32 @@
        {
            Sleep(1000);
            {
                SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
                m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
            SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
        }
                //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
                if (GetSimulationMode() == FALSE)
                {
                    SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
                    SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
                }
                //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
                //original
//                 SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
//                 m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align SUCCESS Data!"));
//                 SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
//                 m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
            }
            Sleep(350);
            AlignCamera_CameraControl(CameraControlStop);  // 210805 Align Camera Sequence ����
            //�ּ� Ǯ��
            // 4. send align fail signal to plc
            //SendResultToSignalControl(PCControlSendData_AlignResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
            //m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Fail Data!"));
            //SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_AlignComplete_CPJT);
            //m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::AlignStart] Send Align Complete Signal!"));
    }
        }
    }
@@ -1278,13 +1394,29 @@
    m_pSP2P->ISP2P_GetSignalControl()->WriteData(_T("17110"), sizeof(pDitRawClient->GetGlassData()->m_strGlassJudge), pDitRawClient->GetGlassData()->m_strGlassJudge);
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] ReadRawFile!"));
    if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReadRawFileAck_CPJT))
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Read Raw File Ack!"));
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
    if (GetSimulationMode() == FALSE)
    {
        if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReadRawFileAck_CPJT))
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Read Raw File Ack!"));
    }
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
    //original
//     if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReadRawFileAck_CPJT))
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Read Raw File Ack!"));
     if (bFileFind == FALSE)
    {
        SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Find Raw File Fail"));
        //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
        if (GetSimulationMode() == FALSE)
        {
            SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Find Raw File Fail"));
        }
        //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
        //original
//         SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_FAIL);
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Find Raw File Fail"));
        return;
    }    
@@ -1320,9 +1452,18 @@
        Sleep(1000);
        // send review ready
        SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
        SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
        //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
        if (GetSimulationMode() == FALSE)
        {
            SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
            SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
        }
        //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
        //original
//         SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
//         SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
    }
    else
    {
@@ -1350,8 +1491,16 @@
                    m_pSP2P->ISP2P_DisplayMessage(_T("[Read Raw File] Review All Plan Total Count : %d"), nTotalPlanCount);
                    // send review ready
                    SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
                    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
                    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
                    if (GetSimulationMode() == FALSE)
                    {
                        SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
                        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
                    }
                    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
                    //original
//                     SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewReady_CPJT);
//                     m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReadRawFile] Send Review Ready Signal!"));
                }
            }
        }
@@ -1393,9 +1542,16 @@
    SetLastPointCheck(FALSE);
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] %d Tick Count"), dwTime);
    if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewStartAck_CPJT))
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Start Ack!"));
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
    if (GetSimulationMode() == FALSE)
    {
        if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewStartAck_CPJT))
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Start Ack!"));
    }
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
    //original
//     if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewStartAck_CPJT))
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Start Ack!"));
    const CRsRcpAlignInfo* pRsRcpAlignInfo = m_pSP2P->ISP2P_Recipe_GetRsRcpAlignInfo();
    if(pRsRcpAlignInfo == NULL)    return;
@@ -1458,9 +1614,18 @@
    if(FirstReviewPlanStart() <= 0)
    {
        //Sleep(1000);
        SendResultToSignalControl(PCControlSendData_ReviewComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
        SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
        //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
        if (GetSimulationMode() == FALSE)
        {
            SendResultToSignalControl(PCControlSendData_ReviewComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
            SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
        }
        //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
        //original
//         SendResultToSignalControl(PCControlSendData_ReviewComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
//         SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
    }
    else
    {
@@ -1483,8 +1648,16 @@
{
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] ReviewEnd!"));
    if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewEndAck_CPJT))
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send Review End Ack!"));
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
    if (GetSimulationMode() == FALSE)
    {
        if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewEndAck_CPJT))
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send Review End Ack!"));
    }
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
    //original
//     if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewEndAck_CPJT))
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send Review End Ack!"));
    CDitGlassRawClient* m_pDitGlassRaw = CDitGlassRawClient::GetInstance();
    if (m_pSP2P->ISP2P_GetWSIControl(0)!=NULL)
@@ -1509,9 +1682,18 @@
    if (GetLastPointCheck() == FALSE)
    {
        SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
        SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
        //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
        if (GetSimulationMode() == FALSE)
        {
            SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
            SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
        }
        //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
        //original
//         SendResultToSignalControl(PCControlSendData_ReviewResult_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
//         SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ReviewComplete_CPJT);
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Success Signal!"));
    }
    CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult();
@@ -1575,9 +1757,17 @@
        g_pLog->DisplayMessage(_T("PCControl Update Signal"));
    }
    SendResultToSignalControl(PCControlSendData_ReviewResultFileCreateComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
    SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ResultDataComplete_CPJT);
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send ResultData Complete Signal!"));
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
    if (GetSimulationMode() == FALSE)
    {
        SendResultToSignalControl(PCControlSendData_ReviewResultFileCreateComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
        SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ResultDataComplete_CPJT);
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send ResultData Complete Signal!"));
    }
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
//     SendResultToSignalControl(PCControlSendData_ReviewResultFileCreateComplete_CPJT, SIGNAL_SEND_RESULT_SUCCESS);
//     SendSignalToSignalControl(PCControlSendSignalIndex_Seq, PCControlSend_ResultDataComplete_CPJT);
//     m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewEnd] Send ResultData Complete Signal!"));
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::OUT] ReviewEnd!"));
}
@@ -1585,9 +1775,16 @@
void CSequenceProcessor_CPJT::Process_ReviewUnloading()
{
    m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::IN] Review Unloading!"));
    if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewUnloadingAck_CPJT))
        m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Unloading Ack!"));
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD START
    if (GetSimulationMode() == FALSE)
    {
        if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewUnloadingAck_CPJT))
            m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Unloading Ack!"));
    }
    //original
    //#3584 210817 LYW CF AOI Review 시뮬레이션 기능 정상화 MOD END
//     if (SendSignalToSignalControl(PCControlSendSignalIndex_Ack, PCControlSend_ReviewUnloadingAck_CPJT))
//         m_pSP2P->ISP2P_DisplayMessage(_T("[SequenceProcessor::ReviewStart] Send Review Unloading Ack!"));
    
}
@@ -8605,12 +8802,12 @@
    break;
    case PCControlRecv_Autodiagnosis:
    {
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
        //#3514_LYW_CF AOI Review �ڰ����� ��� ����_START
        CSignalControl* pSignalControl = m_pSP2P->ISP2P_GetSignalControl();
        CString strDiagnosisMode;
        pSignalControl->ReadData(_T("11160"), 2, strDiagnosisMode);
        int nDiagnosisMode = atoi(strDiagnosisMode);
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        //#3514_LYW_CF AOI Review �ڰ����� ��� ����_END
        m_pSP2P->ISP2P_DisplayMessage(_T("[PCControl_Signal] Diagno start => %d, DiagnosisMode => %d"), bSignalOn, nDiagnosisMode);
        if (bSignalOn) {
@@ -8620,7 +8817,7 @@
            
            m_pSP2P->ISP2P_GetDiagnosisManager()->RecvSignalToSignalControl(0, nDiagnosisMode);
        }
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        //#3514_LYW_CF AOI Review �ڰ����� ��� ����_END
        else
            bResult = SendSignalOffToSignalControl(PCControlSendSignalIndex_DiagnoAck, 0);
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.h
@@ -412,7 +412,6 @@
    BOOL                m_nGlassCountCheck;
    BOOL                m_bUseAFMHomePosition;
    
    DWORD dwRevStartTickCount;
    DWORD dwRevEndTickCount;
ReviewSystem/ReviewSystem/resource.h
@@ -111,6 +111,7 @@
#define IDC_BUTTON_LEFT                 1008
#define IDC_BUTTON_APPLT_OFFSET         1008
#define IDC_BUTTON_PROGRAMEXIT          1008
#define IDC_BUTTON_ALIGNCAM_GRAB        1008
#define IDC_SPIN2                       1009
#define IDC_CHECK_REVIEW_PATH2          1009
#define IDC_CHECK_AUTO_SELECT_CAMERA    1009
ReviewSystem/ReviewSystem/stdafx.h
@@ -77,20 +77,34 @@
#define ID_TIMER_SEND_SIGNAL_ALIVE            (WM_USER + 107)
#define _REVIEW_SERVER_BASE_PATH_                    _T("C:\\DIT_Review")
#define _REVIEW_SERVER_LOG_PATH_                    _T("C:\\DIT_Review\\ReviewServerLog")
#define _REVIEW_RECIPE_PATH_                        _T("C:\\DIT_Review\\Recipe")
#define _REVIEW_REF_RECIPE_PATH_                    _T("C:\\DIT_Review\\Recipe\\Reference")
#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_BASE_PATH_                    _T("D:\\DIT_Review") //210805
#define _REVIEW_SERVER_LOG_PATH_                    _T("D:\\DIT_Review\\ReviewServerLog")
#define _REVIEW_RECIPE_PATH_                        _T("D:\\DIT_Review\\Recipe")
#define _REVIEW_REF_RECIPE_PATH_                    _T("D:\\DIT_Review\\Recipe\\Reference")
#define _REVIEW_SERVER_CONFIG_PATH_                    _T("D:\\DIT_Review\\ReviewServerConfig")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("D:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _SYSTEM_SETTING_TITLE_                        _T("ReviewSystemSetting")
#define _RECIPE_EDITOR_TITLE_                        _T("ReviewRecipeEditor")
#define _REVIEW_LOGIN_LOG_PATH_                        _T("C:\\DIT_Review\\ReviewServerLog\\LoginLog")
#define _REVIEW_REFLOW_RECIPE_PATH_                    _T("C:\\DIT_Review\\Recipe\\Reflow")
#define ALIGN_TEMPLATE_PATH                            _T("C:\\DIT_Review\\Recipe\\AlignImage")
#define _REVIEW_LOGIN_LOG_PATH_                        _T("D:\\DIT_Review\\ReviewServerLog\\LoginLog")
#define _REVIEW_REFLOW_RECIPE_PATH_                    _T("D:\\DIT_Review\\Recipe\\Reflow")
#define ALIGN_TEMPLATE_PATH                            _T("D:\\DIT_Review\\Recipe\\AlignImage")
#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\Recipe")
#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
//#define _REVIEW_SERVER_BASE_PATH_                    _T("C:\\DIT_Review")
//#define _REVIEW_SERVER_LOG_PATH_                    _T("C:\\DIT_Review\\ReviewServerLog")
//#define _REVIEW_RECIPE_PATH_                        _T("C:\\DIT_Review\\Recipe")
//#define _REVIEW_REF_RECIPE_PATH_                    _T("C:\\DIT_Review\\Recipe\\Reference")
//#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 _SYSTEM_SETTING_TITLE_                        _T("ReviewSystemSetting")
//#define _RECIPE_EDITOR_TITLE_                        _T("ReviewRecipeEditor")
//#define _REVIEW_LOGIN_LOG_PATH_                        _T("C:\\DIT_Review\\ReviewServerLog\\LoginLog")
//#define _REVIEW_REFLOW_RECIPE_PATH_                    _T("C:\\DIT_Review\\Recipe\\Reflow")
//#define ALIGN_TEMPLATE_PATH                            _T("C:\\DIT_Review\\Recipe\\AlignImage")
//#define _REVIEW_RECIPE_BACKUP_PATH_CPJT                _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\Recipe")
//#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
#define TOTAL_WINDOW_SIZE_X        1920
#define TOTAL_WINDOW_SIZE_Y        1040
ReviewSystem/ReviewSystemSetting/ReviewSystemSettingDlg.cpp
@@ -1,5 +1,5 @@
// ReviewSystemSettingDlg.cpp : 구현 파일
// ReviewSystemSettingDlg.cpp : ���� ����
//
#include "stdafx.h"
@@ -31,20 +31,20 @@
#endif
// 응용 프로그램 정보에 사용되는 CAboutDlg 대화 상자입니다.
// ���� ���α׷� ������ ���Ǵ� CAboutDlg ��ȭ �����Դϴ�.
class CAboutDlg : public CDialog
{
public:
    CAboutDlg();
// 대화 상자 데이터입니다.
// ��ȭ ���� �������Դϴ�.
    enum { IDD = IDD_ABOUTBOX };
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 지원입니다.
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV �����Դϴ�.
// 구현입니다.
// �����Դϴ�.
protected:
    DECLARE_MESSAGE_MAP()
};
@@ -62,7 +62,7 @@
END_MESSAGE_MAP()
// CReviewSystemSettingDlg 대화 상자
// CReviewSystemSettingDlg ��ȭ ����
@@ -87,7 +87,8 @@
    m_pNetworkManager = NULL;
    // init Log 
    new CDisplayMessage(_T("C:\\DIT_Review\\ReviewServerConfig\\Log"));
    //new CDisplayMessage(_T("C:\\DIT_Review\\ReviewServerConfig\\Log"));
    new CDisplayMessage(_T("D:\\DIT_Review\\ReviewServerConfig\\Log"));//210805
}
CReviewSystemSettingDlg::~CReviewSystemSettingDlg()
@@ -185,15 +186,15 @@
END_MESSAGE_MAP()
// CReviewSystemSettingDlg 메시지 처리기
// CReviewSystemSettingDlg �޽��� ó����
BOOL CReviewSystemSettingDlg::OnInitDialog()
{
    CDialog::OnInitDialog();
    // 시스템 메뉴에 "정보..." 메뉴 항목을 추가합니다.
    // �ý��� �޴��� "����..." �޴� �׸��� �߰��մϴ�.
    // IDM_ABOUTBOX는 시스템 명령 범위에 있어야 합니다.
    // IDM_ABOUTBOX�� �ý��� ��� ������ �־�� �մϴ�.
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);
@@ -211,12 +212,12 @@
        }
    }
    // 이 대화 상자의 아이콘을 설정합니다. 응용 프로그램의 주 창이 대화 상자가 아닐 경우에는
    //  프레임워크가 이 작업을 자동으로 수행합니다.
    SetIcon(m_hIcon, TRUE);            // 큰 아이콘을 설정합니다.
    SetIcon(m_hIcon, FALSE);        // 작은 아이콘을 설정합니다.
    // �� ��ȭ ������ �������� �����մϴ�. ���� ���α׷��� �� â�� ��ȭ ���ڰ� �ƴ� ��쿡��
    //  �����ӿ�ũ�� �� �۾��� �ڵ����� �����մϴ�.
    SetIcon(m_hIcon, TRUE);            // ū �������� �����մϴ�.
    SetIcon(m_hIcon, FALSE);        // ���� �������� �����մϴ�.
    // TODO: 여기에 추가 초기화 작업을 추가합니다.
    // TODO: ���⿡ �߰� �ʱ�ȭ �۾��� �߰��մϴ�.
    CreateReviewDirectory();
    CreateManager();
    ReadReviewSystemConfigFile();
@@ -225,7 +226,7 @@
    g_pLog->DisplayMessage(_T("SystemSetting is Started!"));
    return TRUE;  // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
    return TRUE;  // ��Ŀ���� ��Ʈ�ѿ� �������� ������ TRUE�� ��ȯ�մϴ�.
}
void CReviewSystemSettingDlg::OnSysCommand(UINT nID, LPARAM lParam)
@@ -241,19 +242,19 @@
    }
}
// 대화 상자에 최소화 단추를 추가할 경우 아이콘을 그리려면
//  아래 코드가 필요합니다. 문서/뷰 모델을 사용하는 MFC 응용 프로그램의 경우에는
//  프레임워크에서 이 작업을 자동으로 수행합니다.
// ��ȭ ���ڿ� �ּ�ȭ ���߸� �߰��� ��� �������� �׸�����
//  �Ʒ� �ڵ尡 �ʿ��մϴ�. ����/�� ���� ����ϴ� MFC ���� ���α׷��� ��쿡��
//  �����ӿ�ũ���� �� �۾��� �ڵ����� �����մϴ�.
void CReviewSystemSettingDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 그리기를 위한 디바이스 컨텍스트
        CPaintDC dc(this); // �׸��⸦ ���� ����̽� ���ؽ�Ʈ
        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
        // 클라이언트 사각형에서 아이콘을 가운데에 맞춥니다.
        // Ŭ���̾�Ʈ �簢������ �������� ����� ����ϴ�.
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
@@ -261,7 +262,7 @@
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
        // 아이콘을 그립니다.
        // �������� �׸��ϴ�.
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
@@ -270,8 +271,8 @@
    }
}
// 사용자가 최소화된 창을 끄는 동안에 커서가 표시되도록 시스템에서
//  이 함수를 호출합니다.
// ����ڰ� �ּ�ȭ�� â�� ��� ���ȿ� Ŀ���� ǥ�õǵ��� �ý��ۿ���
//  �� �Լ��� ȣ���մϴ�.
HCURSOR CReviewSystemSettingDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
@@ -280,7 +281,7 @@
void CReviewSystemSettingDlg::OnTcnSelchangeTabSysSettingMainTab(NMHDR *pNMHDR, LRESULT *pResult)
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    SystemMainTab nTabIdx;
    nTabIdx = (SystemMainTab)m_ctrlTabMain.GetCurSel();
@@ -397,12 +398,12 @@
void CReviewSystemSettingDlg::InitTabControl()
{
    int nIdx = 0;
    m_ctrlTabMain.InsertItem(nIdx++, _T("Equipment Setting"));//_T("장비 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Glass Type Setting"));//_T("글라스 타입 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Align Setting"));//_T("얼라인 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Signal Setting"));//_T("Signal 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Motor Setting"));//_T("모터 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Network Setting"));//_T("네트워크 설정"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Equipment Setting"));//_T("��� ����"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Glass Type Setting"));//_T("�۶� Ÿ�� ����"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Align Setting"));//_T("����� ����"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Signal Setting"));//_T("Signal ����"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Motor Setting"));//_T("���� ����"));
    m_ctrlTabMain.InsertItem(nIdx++, _T("Network Setting"));//_T("��Ʈ��ũ ����"));
}
BOOL CReviewSystemSettingDlg::ReadReviewSystemConfigFile()
@@ -526,7 +527,7 @@
        strBackupFile = strBackupPath + strBackupFile;
        CopyFile(_REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_, strBackupFile, TRUE);
        //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD START
        //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD START
        strBackupPath = _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT;
        CreateDirectory(strBackupPath, NULL);
@@ -535,9 +536,9 @@
        strBackupFile.Format(_T("%s\\SystemSetting.cfg"), strBackupPath);
        CopyFile(_REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_, strBackupFile, FALSE);
        //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
        //LYW_#3344_CF AOI Review Config File ��� ��� ���� ADD END
        if (IDNO == AfxMessageBox(_T("Save complete. Do you want to close System Setting program?"), MB_YESNO | MB_ICONQUESTION))//_T("저장 완료되었습니다. 시스템 설정 프로그램을 종료하시겠습니까?"), MB_YESNO | MB_ICONQUESTION))
        if (IDNO == AfxMessageBox(_T("Save complete. Do you want to close System Setting program?"), MB_YESNO | MB_ICONQUESTION))//_T("���� �Ϸ�Ǿ����ϴ�. �ý��� ���� ���α׷��� �����Ͻðڽ��ϱ�?"), MB_YESNO | MB_ICONQUESTION))
        {
            return;
        }
@@ -549,14 +550,14 @@
    }
    else
    {
        AfxMessageBox(_T("Save Fail!"));//_T("저장 실패하였습니다."));
        AfxMessageBox(_T("Save Fail!"));//_T("���� �����Ͽ����ϴ�."));
    }
}
void CReviewSystemSettingDlg::OnBnClickedCancel()
{
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
    if (IDNO == AfxMessageBox(_T("Do you want to close System Setting program?"), MB_YESNO | MB_ICONQUESTION))//_T("시스템 설정 프로그램을 종료하시겠습니까?"), MB_YESNO | MB_ICONQUESTION))
    // TODO: ���⿡ ��Ʈ�� �˸� ó���� �ڵ带 �߰��մϴ�.
    if (IDNO == AfxMessageBox(_T("Do you want to close System Setting program?"), MB_YESNO | MB_ICONQUESTION))//_T("�ý��� ���� ���α׷��� �����Ͻðڽ��ϱ�?"), MB_YESNO | MB_ICONQUESTION))
    {
        return;
    }
@@ -568,7 +569,7 @@
BOOL CReviewSystemSettingDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
    // TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
    // TODO: ���⿡ �޽��� ó���� �ڵ带 �߰� ��/�Ǵ� �⺻���� ȣ���մϴ�.
    if (pCopyDataStruct->dwData == COPYDATA_SYSTEMSETTING2REVIEWSYSTEM)
    {
        COPYDATA_SYSTEM2REV* pCopyData = (COPYDATA_SYSTEM2REV*)pCopyDataStruct->lpData;
ReviewSystem/ReviewSystemSetting/stdafx.h
@@ -1,7 +1,7 @@
// stdafx.h : 자주 사용하지만 자주 변경되지는 않는
// 표준 시스템 포함 파일 및 프로젝트 관련 포함 파일이
// 들어 있는 포함 파일입니다.
// stdafx.h : ���� ��������� ���� ��������� �ʴ�
// ǥ�� �ý��� ���� ���� �� ������Ʈ ���� ���� ������
// ��� �ִ� ���� �����Դϴ�.
#pragma once
@@ -10,37 +10,42 @@
#endif
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // 거의 사용되지 않는 내용은 Windows 헤더에서 제외합니다.
#define VC_EXTRALEAN            // ���� ������ �ʴ� ������ Windows ������� �����մϴ�.
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 일부 CString 생성자는 명시적으로 선언됩니다.
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // �Ϻ� CString �����ڴ� ��������� ����˴ϴ�.
// MFC의 공통 부분과 무시 가능한 경고 메시지에 대한 숨기기를 해제합니다.
// MFC�� ���� �κа� ���� ������ ��� �޽����� ���� ����⸦ �����մϴ�.
#define _AFX_ALL_WARNINGS
#include <afxwin.h>         // MFC 핵심 및 표준 구성 요소입니다.
#include <afxext.h>         // MFC 확장입니다.
#include <afxwin.h>         // MFC �ٽ� �� ǥ�� ���� ����Դϴ�.
#include <afxext.h>         // MFC Ȯ���Դϴ�.
#include <afxdisp.h>        // MFC 자동화 클래스입니다.
#include <afxdisp.h>        // MFC �ڵ�ȭ Ŭ�����Դϴ�.
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // Internet Explorer 4 공용 컨트롤에 대한 MFC 지원입니다.
#include <afxdtctl.h>           // Internet Explorer 4 ���� ��Ʈ�ѿ� ���� MFC �����Դϴ�.
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // Windows 공용 컨트롤에 대한 MFC 지원입니다.
#include <afxcmn.h>             // Windows ���� ��Ʈ�ѿ� ���� MFC �����Դϴ�.
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h>     // MFC의 리본 및 컨트롤 막대 지원
#include <afxcontrolbars.h>     // MFC�� ���� �� ��Ʈ�� ���� ����
#define _REVIEW_SERVER_BASE_PATH_                    _T("C:\\DIT_Review")
#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_SERVER_BASE_PATH_                    _T("D:\\DIT_Review")  //210805
#define _REVIEW_SERVER_CONFIG_PATH_                    _T("D:\\DIT_Review\\ReviewServerConfig")
#define _REVIEW_SERVER_SYSTEM_SETTING_FILE_PATH_    _T("D:\\DIT_Review\\ReviewServerConfig\\SystemSetting.cfg")
#define _REVIEW_SERVER_SYSTEM_PASSWORD_FILE_PATH_    _T("D:\\DIT_Review\\ReviewServerConfig\\SystemSetting.dat")
//#define _REVIEW_SERVER_BASE_PATH_                    _T("C:\\DIT_Review")
//#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("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\Recipe")
#define _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT    _T("\\\\126.100.100.5\\d\\DIT Back up\\DIT Review\\ReviewServerConfig")
#define _REVIEW_SYSTEM_TITLE_                        _T("ReviewSystem")
@@ -60,7 +65,7 @@
    MsgSystem2Rev_ChangeSysConfig,
    MsgRev2System_ChangeSysConfig,
    // [2017:5:2]-[WEZASW] : TFE Measurement 설비 UNIT Test(Signal 수동 발생)를 위한 추가
    // [2017:5:2]-[WEZASW] : TFE Measurement ���� UNIT Test(Signal ���� �߻�)�� ���� �߰�
    MsgSystem2Rev_SendAlignAlarmSignal,
    MsgRev2System_SendAlignAlarmSignal,
ReviewSystem/include/CHReviewRecipe/RsRcpAlignInfo.h
@@ -1,7 +1,11 @@
#pragma once
#define ALIGN_IMAGE_PATH _T("C:\\DIT_Review\\Recipe\\AlignImage")
#define REFLOW_IMAGE_PATH _T("C:\\DIT_Review\\Recipe\\Reflow")
#define ALIGN_IMAGE_PATH _T("D:\\DIT_Review\\Recipe\\AlignImage")  //210805
#define REFLOW_IMAGE_PATH _T("D:\\DIT_Review\\Recipe\\Reflow")
//#define ALIGN_IMAGE_PATH _T("C:\\DIT_Review\\Recipe\\AlignImage")
//#define REFLOW_IMAGE_PATH _T("C:\\DIT_Review\\Recipe\\Reflow")
class AFX_EXT_CLASS CRsRcpAlignInfo
{
ReviewSystem/include/M_AutoDiagnosisManager/DiagnosisInfo.h
@@ -3,7 +3,8 @@
#include <vector>
// path define
#define REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_PATH            _T("C:\\DIT_Review\\DiagnosisConfig")
#define REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_PATH            _T("D:\\DIT_Review\\DiagnosisConfig")  //210805
//#define REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_PATH            _T("C:\\DIT_Review\\DiagnosisConfig")
#define REVIEW_AUTO_DIAGNOSIS_SETTING_FILE_NAME            _T("AutoDiagnosisSetting.cfg")
#define REVIEW_AUTO_DIAGNOSIS_DATA_FILE_PATH            _T("D:\\ResultData\\AutoDiagnosis")
#define REVIEW_AUTO_DIAGNOSIS_DATA_IMAGE_FILE_PATH        _T("D:\\ResultData\\AutoDiagnosis\\ResultImage")
@@ -58,7 +59,7 @@
    virtual void IDP2P_WsiMotorMotionEnd(int nModuleIdx, double dPosX, double dPosY) = 0;
    virtual BOOL IDP2P_DiagnosisSendCompleteSig()=0;
    virtual BOOL IDP2P_DiagnosisSendJudgeAlarm() = 0; //0412 AU°¡Aø´U ½AE£ Aß°¡
    virtual BOOL IDP2P_DiagnosisSendJudgeAlarm() = 0; //0412 AU�Ƣ�A����U ��AE�� A���Ƣ�
    // Dialog
    virtual BOOL IDP2P_SetDlgFlatness(int nIndex) = 0;
@@ -224,9 +225,9 @@
        m_dReviewPanelPosY2 = 0;
        m_dReviewPanelPosX4 = 0;
        m_dReviewPanelPosY4 = 0;
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
        //#3514_LYW_CF AOI Review �ڰ����� ��� ����_START
        m_nFlatnessSkipMode = 0;
        //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
        //#3514_LYW_CF AOI Review �ڰ����� ��� ����_END
    }
@@ -253,12 +254,12 @@
    void                    SetPanelPosY_Wsi(double dData) {  m_dPanelPosY = dData; }
    void                    SetPanelPosX2_Wsi(double dData) { m_dPanelPosX2 = dData; }
    void                    SetPanelPosY2_Wsi(double dData) { m_dPanelPosY2 = dData; }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    //#3514_LYW_CF AOI Review �ڰ����� ��� ����_START
    void                    SetFlastnessSkipMode(double dData) { m_nFlatnessSkipMode = dData; }
    void                    SetSquarenessStandard(double dData) { m_dSquarenessStandard = dData; }
    void                    SetSquarenessStandard2(double dData) { m_dSquarenessStandard2 = dData; }
    void                    SetWSIStandard(double dData) { m_dWSIStandard = dData; }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    //#3514_LYW_CF AOI Review �ڰ����� ��� ����_END
    // getter
@@ -290,12 +291,12 @@
    double                    GetPanelPosY_Wsi() const { return m_dPanelPosY; }
    double                    GetPanelPosX2_Wsi() const { return m_dPanelPosX2; }
    double                    GetPanelPosY2_Wsi() const { return m_dPanelPosY2; }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    //#3514_LYW_CF AOI Review �ڰ����� ��� ����_START
    int                        GetFlastnessSkipMode() const { return m_nFlatnessSkipMode; }
    double                    GetSquarenessStandard() const { return m_dSquarenessStandard; }
    double                    GetSquarenessStandard2() const { return m_dSquarenessStandard2; }
    double                    GetWSIStandard() const { return m_dWSIStandard; }
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    //#3514_LYW_CF AOI Review �ڰ����� ��� ����_END
    //Review
public:
    double                    GetReviewPanelPosX() const { return m_dReviewPanelPosX; }
@@ -324,10 +325,10 @@
    int                            m_nCameraFrameHeight;
    double                        m_dCameraResolution;
    double                        m_dJudgeData_Degree;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    //#3514_LYW_CF AOI Review �ڰ����� ��� ����_START
    double                        m_dSquarenessStandard;
    double                        m_dSquarenessStandard2;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    //#3514_LYW_CF AOI Review �ڰ����� ��� ����_END
    // Flatness
    CDiagnosisResult            m_dataSettingResult_Flatness;        // single data
@@ -337,17 +338,17 @@
    int                            m_nRangeCount_Flatness;
    int                            m_nGlassSizeX;
    int                            m_nGlassSizeY;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    //#3514_LYW_CF AOI Review �ڰ����� ��� ����_START
    int                            m_nFlatnessSkipMode;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    //#3514_LYW_CF AOI Review �ڰ����� ��� ����_END
    // wsi
    VectorDiagnosisResult        m_vecSettingResult_Wsi;        // add module count
    int                            m_nPanelCount_Wsi;
    double                        m_dJudgeData_3Sigma;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
    //#3514_LYW_CF AOI Review �ڰ����� ��� ����_START
    double                        m_dWSIStandard;
    //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
    //#3514_LYW_CF AOI Review �ڰ����� ��� ����_END
    double                        m_dPanelPosX;
    double                        m_dPanelPosY;