SDC C-Project CF Review 프로그램
LYW
2022-07-05 63439977901d54a01924ed76290931aeddbce66c
Ongoing80 #4220 CF AOI Review 알람 추가

1. 모터와 15초이상 통신 불가시 알람 발생
2. 현재사용중인 Signal File이 업로드 실패하는 경우도 더러 발생하여 Raw, MicroImage, ReviewImage, Signal 파일 중 2개이상이 실패시 알람 발생
3. 물류데이터내 생산코드가 RW가 아닌글래스 중 리뷰스케쥴링 후 1개이상 좌표를 찍어야 하지만 0개 찍은경우 설정한 n번째 글래스에서 발생
19개 파일 변경됨
319 ■■■■■ 파일 변경됨
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
FTPUploader/FTPUploader/FTPThreadPool.cpp 11 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/CHMotorControls/MotorControl.cpp 29 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/CHReviewSetting/NetworkInfo.cpp 9 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/CHReviewSetting/Sys_NetworkManager.cpp 12 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/MainFrm.cpp 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.h 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewSystem.vcxproj 2 ●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.h 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 145 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.h 14 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystemSetting/DlgNetwork.cpp 23 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystemSetting/DlgNetwork.h 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystemSetting/ReviewSystemSetting.rc 11 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystemSetting/resource.h 4 ●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/CHMotorControls/MotorControl.h 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/CHMotorControls/MotorControlInfo.h 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/include/CHReviewSetting/NetworkInfo.h 3 ●●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
@@ -373,14 +373,7 @@
    //if(1) ReadMuraFile(pData); 211012 KJG - QD Macro 개별 업로드 하므로 Macro 데이터 적제 제거 요청
      if(WriteAOIFile(pData) == FALSE)
          return FALSE;
    //210126 CJH - Review End에서만 RTMS 결과파일 생성하도록 변경
    if (m_GlassRawRTMS.WriteAOIFile(pData) == FALSE)
        return FALSE;
    if(1)
    if (1)
    {
        _grmGlassData* pGlassData = pData->GetGlassData();
@@ -390,6 +383,15 @@
        SendMessageFTPUploadImage(pGlassData, FTPCMD_MURA_IMAGE);//0405nwh
    }
      if(WriteAOIFile(pData) == FALSE)
          return FALSE;
    //210126 CJH - Review End에서만 RTMS 결과파일 생성하도록 변경
    if (m_GlassRawRTMS.WriteAOIFile(pData) == FALSE)
        return FALSE;
    
    
FTPUploader/FTPUploader/FTPThreadPool.cpp
@@ -118,12 +118,13 @@
BOOL CFTPThreadPool::Process_UploadAck(int nResultCode, const CFTPUploadParam& uploadParam)
{
    if (uploadParam.m_nSendResultCode==0)
    {
        return TRUE;
    }
//     if (uploadParam.m_nSendResultCode==0)
//     {
//         return TRUE;
//     }
    HWND hWnd = uploadParam.GetSenderWnd();
    //HWND hWnd = uploadParam.GetSenderWnd();
    HWND hWnd = ::FindWindow(NULL, "ReviewSystem");
    if (hWnd==NULL) 
    {
        return FALSE;
ReviewSystem/CHMotorControls/MotorControl.cpp
@@ -24,6 +24,12 @@
    m_nAutoEnable                = 0;
    m_nAutoEnablePrev            = 0;
    /*< LYW 20220704 - #4220 ADD Start >*/
    m_nMotorAlive = 0;
    m_nMotorAlivePrev = 0;
    dwLastAliveTick = GetTickCount();
    /*< LYW 20220704 - #4220 ADD End >*/
    // wsi signal
    m_nWsiMotionEndPrev            = 0;
@@ -96,6 +102,29 @@
    if (m_nAxisCount<1) return;
    //Alive
    if (ReadAddressValue(50, m_nMotorAlive))
    {
        if (m_nMotorAlivePrev != m_nMotorAlive)
        {
            dwLastAliveTick = GetTickCount();
        }
        m_nAutoEnablePrev = m_nAutoEnable;
        if (GetTickCount() - dwLastAliveTick >15000 && dwLastAliveTick != 0)
        {
            m_pMC2P->IMC2P_SendMotorAliveErrorAlram();
            m_pMC2P->IMC2P_DisplayMessage(m_nIndex, _T("Motor Alive Error!"));
            dwLastAliveTick = GetTickCount();
        }
    }
    else
    {
        m_pMC2P->IMC2P_SendMotorAliveErrorAlram();
        m_pMC2P->IMC2P_DisplayMessage(m_nIndex, _T("Motor Alive Read Fail!"));
        dwLastAliveTick = GetTickCount();
    }
    // auto enable
    const CMotorCommonAddr *pAddr = m_ControlInfo.GetMotorCommonAddr();
    if (pAddr && pAddr->m_nAllAutoEnableAddr!=MOTOR_ADDRESS_NONE)
ReviewSystem/CHReviewSetting/NetworkInfo.cpp
@@ -34,6 +34,9 @@
    m_bUpdateImageOriginal    = FALSE;
    m_nImageRotate            = 0;
    m_nImageFlip            = 0;
    m_nZeroReviewAlarm         = 0;
    m_strZeroReviewAlarmExcept = _T("");
}
void CNetworkInfo::SetInfo(const CNetworkInfo& rhs)
@@ -59,6 +62,9 @@
    m_bUpdateImageOriginal    = rhs.m_bUpdateImageOriginal;
    m_nImageRotate            = rhs.m_nImageRotate;
    m_nImageFlip            = rhs.m_nImageFlip;
    m_nZeroReviewAlarm = rhs.m_nZeroReviewAlarm;
    m_strZeroReviewAlarmExcept = rhs.m_strZeroReviewAlarmExcept;
}
void CNetworkInfo::GetInfo(CNetworkInfo& rhs)
@@ -84,4 +90,7 @@
    rhs.m_bUpdateImageOriginal    = m_bUpdateImageOriginal;
    rhs.m_nImageRotate            = m_nImageRotate;
    rhs.m_nImageFlip            = m_nImageFlip;
    rhs.m_nZeroReviewAlarm = m_nZeroReviewAlarm;
    rhs.m_strZeroReviewAlarmExcept = m_strZeroReviewAlarmExcept;
}
ReviewSystem/CHReviewSetting/Sys_NetworkManager.cpp
@@ -82,6 +82,12 @@
    strItem.Format(_T("SYS_NETWORK_SAVE_ORIGINAL_IMAGE"));
    macroFile.SetItem(strItem, networkInfo.m_bUpdateImageOriginal);
    strItem.Format(_T("SYS_NETWORK_REVIEW_ZERO_ALARM_CONDITION"));
    macroFile.SetItem(strItem, networkInfo.m_nZeroReviewAlarm);
    strItem.Format(_T("SYS_NETWORK_REVIEW_ZERO_ALARM_EXCEPTION"));
    macroFile.SetItem(strItem, networkInfo.m_strZeroReviewAlarmExcept);
}
void CSys_NetworkManager::GetProfile(CMacroFile& macroFile)
@@ -146,5 +152,11 @@
    strItem.Format(_T("SYS_NETWORK_SAVE_ORIGINAL_IMAGE"));
    macroFile.GetItem(strItem, networkInfo.m_bUpdateImageOriginal);
    strItem.Format(_T("SYS_NETWORK_REVIEW_ZERO_ALARM_CONDITION"));
    macroFile.GetItem(strItem, networkInfo.m_nZeroReviewAlarm, 0);
    strItem.Format(_T("SYS_NETWORK_REVIEW_ZERO_ALARM_EXCEPTION"));
    macroFile.GetItem(strItem, networkInfo.m_strZeroReviewAlarmExcept, _T(""));
    m_networkInfo.SetInfo(networkInfo);
}
ReviewSystem/ReviewSystem/MainFrm.cpp
@@ -859,6 +859,24 @@
    switch(pCopyDataStruct->dwData)
    {
    case COPYDATA_RAW_DOWNLOAD_ACK:
    case COPYDATA_RAW_UPLOAD_ACK:
    case COPYDATA_LOT_UPLOAD_ACK:
    case COPYDATA_IMAGE_UPLOAD_ACK:
    {
        CFTPCopyDataParam ftpCopyDataParam;
        ftpCopyDataParam = *(static_cast<CFTPCopyDataParam*>(pCopyDataStruct->lpData));
        if (ftpCopyDataParam.m_nSendResultCode == FALSE)
        {
            CMainFrame* pMain = static_cast<CMainFrame*>(AfxGetMainWnd());
            CSequenceProcessor* pSequenceProcessor = pMain->IRP2P_GetSequenceProcessor();
            if (pSequenceProcessor == NULL)    return FALSE;
            pSequenceProcessor->sendUploadResult2SequenceProcessor(ftpCopyDataParam.m_nSendResultCode);
        }
    }
    break;
    case COPYDATA_SYSTEMSETTING2REVIEWSYSTEM:
        {
            COPYDATA_SYSTEM2REV* pCopyData = (COPYDATA_SYSTEM2REV*)pCopyDataStruct->lpData;
ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -9369,6 +9369,13 @@
        g_pLog->DisplayMessage(_T("[WSI_%d] Send Motion End to WSI SUCCESS! [%02d][%02d]"), nWsiIndex, nModuleIndex, nWsiIndex);
}
void CReviewInterface::IMC2P_SendMotorAliveErrorAlram()
{
    IRP2P_GetSequenceProcessor()->SendSignalToSignalControl(PCControlSendSignalIndex_State, PCControlSend_Review_Motor_Communication_Fail, 1000);
    return;
}
void CReviewInterface::IWC2P_SetScanEnd( int nIndex, int nPointIndex, int nPositionX, int nPositionY )
{
    int nModuleIndex=-1, nWsiIndex=-1;
ReviewSystem/ReviewSystem/ReviewInterface.h
@@ -58,6 +58,8 @@
#include "M_AutoDiagnosisManager/DiagnosisManager.h"
#include "DlgSelfDiagnosis.h"
#include "FTPUploadParam.h"
typedef std::vector<CMotorCalibrator>                        VectorMotorCalibrator;
typedef std::vector<CMotorCalibrator>::iterator                VectorMotorCalibratorIt;
typedef std::vector<CMotorCalibrator>::const_iterator        constVectorMotorCalibratorIt;
@@ -138,6 +140,7 @@
    virtual void    IMC2P_GantrySoftWareTrigger(int nIndex, int nGantryIdx, int nTrigger);
    virtual void    IMC2P_WsiGantrySoftWareTrigger(int nIndex, int nGantryIdx, int nTrigger);
    virtual void    IMC2P_UpdateWsiMotionEnd(int nIndex, int nGantryIdx);
    virtual void    IMC2P_SendMotorAliveErrorAlram();
    virtual BOOL    IMC2P_GetUseWsi();
    // WSI Controller 2 parent    
ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
@@ -145,7 +145,7 @@
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <AdditionalIncludeDirectories>../include;../../Internal_Library/include;../../External_Library/include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <AdditionalIncludeDirectories>../include;../../Internal_Library/include;../../External_Library/include;../../FTPUploader/FTPUploader;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>false</MinimalRebuild>
      <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
ReviewSystem/ReviewSystem/SequenceProcessor.h
@@ -764,6 +764,7 @@
    virtual void SetEndTickCount(DWORD dwTick) = 0;
    virtual DWORD GetStartTickCount() = 0;
    virtual DWORD GetEndTickCount() = 0;
    virtual void sendUploadResult2SequenceProcessor(int UploadResult) = 0;
protected:
    int m_nCheckWSIEnd;
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -166,6 +166,8 @@
{
    m_bUseAFMHomePosition = TRUE;
    m_nGlassCount = 0;
    m_nStackZeroReviewCondition = 0;
    m_nUploadResultFailCount = 0;
    CDitGlassRawClient* pDitGlassRaw = CDitGlassRawClient::GetInstance();
    if(pDitGlassRaw->ConnectServer() == FALSE)
    {
@@ -943,6 +945,7 @@
    SetLastPointCheck(FALSE);
    SetReviewComplete(FALSE);
    SetUploadResultFailCount(0);
    bFileFind = FALSE;
@@ -1797,6 +1800,23 @@
        CDlgDefocusList::GetInstance()->SetDefocusData(strTime,pGlassResult->m_strGlassID,pGlassResult->m_nDeFocusCount);
    }
    if (CheckZeroReviewAlarm() == FALSE && m_pSP2P->ISP2P_System_GetNetworkInfo()->m_nZeroReviewAlarm != 0)
    {
        STransferData* pTransferData = m_pSP2P->ISP2P_GetCurrentTransferData();
        if (pTransferData->strProdType != m_pSP2P->ISP2P_System_GetNetworkInfo()->m_strZeroReviewAlarmExcept)
        {
            m_nStackZeroReviewCondition++;
            if (m_nStackZeroReviewCondition >= m_pSP2P->ISP2P_System_GetNetworkInfo()->m_nZeroReviewAlarm)
            {
                m_pSP2P->ISP2P_DisplayMessage(_T("Zero Review Alarm! %d ea Glass Is Zero Review!"), m_nStackZeroReviewCondition);
                SendSignalToSignalControl(PCControlSendSignalIndex_State, PCControlSend_Review_0Count_Alarm, 1000);
                m_nStackZeroReviewCondition = 0;
            }
        }
        else m_nStackZeroReviewCondition = 0;
    }
    else m_nStackZeroReviewCondition = 0;
    /*< LYW 20211109 - #3662 Delete Start >*/
    //     g_pLog->DisplayMessage(_T("History map Start"));
@@ -8257,6 +8277,131 @@
    return;
}
BOOL CSequenceProcessor_CPJT::CheckZeroReviewAlarm()
{
    CGlassResult* pGlassResult = m_pSP2P->ISP2P_GetCurrentGlassResult();
    if (pGlassResult == NULL) return FALSE;
    int TotalCount = 0;
    //Defect
    const VectorReviewResult *pVecReviewResult = pGlassResult->GetVectorReviewResult();
    if (pVecReviewResult != NULL)
    {
        for (constVectorReviewResultIt it = pVecReviewResult->begin(); it != pVecReviewResult->end(); it++)
        {
            const CReviewResult *pReviewResult = static_cast<const CReviewResult*>(&(*it));
            TotalCount += pReviewResult->m_vecSReviewResult.size();
            for (constVectorSReviewResultIt its = pReviewResult->m_vecSReviewResult.begin(); its != pReviewResult->m_vecSReviewResult.end(); its++)
            {
                if (its->nResultCode > ReviewResult_None)
                {
                    return TRUE;
                }
                else
                {
                    continue;
                }
            }
        }
    }
    //DefectWSI
    const VectorReviewResult *pVecWsiResult = pGlassResult->GetVectorWsiResult();
    if (pVecWsiResult != NULL)
    {
        for (constVectorReviewResultIt it = pVecWsiResult->begin(); it != pVecWsiResult->end(); it++)
        {
            const CReviewResult *pWsiResult = static_cast<const CReviewResult*>(&(*it));
            TotalCount += pWsiResult->m_vecSReviewResult.size();
            for (constVectorSReviewResultIt its = pWsiResult->m_vecSReviewResult.begin(); its != pWsiResult->m_vecSReviewResult.end(); its++)
            {
                if (its->nResultCode > WsiResult_None)
                {
                    return TRUE;
                }
                else
                {
                    continue;
                }
            }
        }
    }
    //User Review
    const VectorReviewResult *pVecUserReviewResult = pGlassResult->GetVectorUserResult();
    if (pVecUserReviewResult != NULL)
    {
        for (constVectorReviewResultIt it = pVecUserReviewResult->begin(); it != pVecUserReviewResult->end(); it++)
        {
            const CReviewResult *pUserReviewResult = static_cast<const CReviewResult*>(&(*it));
            TotalCount += pUserReviewResult->m_vecSReviewResult.size();
            for (constVectorSReviewResultIt its = pUserReviewResult->m_vecSReviewResult.begin(); its != pUserReviewResult->m_vecSReviewResult.end(); its++)
            {
                if (its->nResultCode > ReviewResult_None)
                {
                    return TRUE;
                }
                else
                {
                    continue;
                }
            }
        }
    }
    //User WSI
    const VectorReviewResult *pVecUserWsiResult = pGlassResult->GetVectorUserWsiResult();
    if (pVecUserWsiResult != NULL)
    {
        for (constVectorReviewResultIt it = pVecUserWsiResult->begin(); it != pVecUserWsiResult->end(); it++)
        {
            const CReviewResult *pUserWsiResult = static_cast<const CReviewResult*>(&(*it));
            TotalCount += pUserWsiResult->m_vecSReviewResult.size();
            for (constVectorSReviewResultIt its = pUserWsiResult->m_vecSReviewResult.begin(); its != pUserWsiResult->m_vecSReviewResult.end(); its++)
            {
                if (its->nResultCode > WsiResult_None)
                {
                    return TRUE;
                }
                else
                {
                    continue;
                }
            }
        }
    }
    if (TotalCount == 0) return TRUE;
    return FALSE;
}
void CSequenceProcessor_CPJT::sendUploadResult2SequenceProcessor(int UploadResult)
{
    int UploadResultFailCount = GetUploadResultFailCount();
    if (UploadResult == FALSE)
    {
        UploadResultFailCount++;
        if (UploadResultFailCount >= 2)
        {
            m_pSP2P->ISP2P_DisplayMessage(_T("ResultFile Upload Fail!"));
            SendSignalToSignalControl(PCControlSendSignalIndex_State, PCControlSend_ResultData_Upload_Fail, 1000);
            SetUploadResultFailCount(-1);
        }
        SetUploadResultFailCount(UploadResultFailCount);
    }
}
//#3358 KYH FDC  ADD END
DWORD CSequenceProcessor_CPJT::GetDiskUsage()
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.h
@@ -116,7 +116,12 @@
    PCControlSend_RecipeASCEND,
    PCControlSend_WSIError,
    PCControlSend_Defoucs,
    PCControlSend_Diagnosis //0412 자가진단 코드추가
    PCControlSend_Diagnosis, //0412 자가진단 코드추가
    /*< LYW 20220704 - #4220 ADD Start >*/
    PCControlSend_Review_Motor_Communication_Fail,
    PCControlSend_ResultData_Upload_Fail,
    PCControlSend_Review_0Count_Alarm
    /*< LYW 20220704 - #4220 ADD End >*/
};
enum PCControlRecvSignalState_WSI
@@ -207,9 +212,14 @@
    int nReviewCount;
    void SetReviewCount(int nCount) { nReviewCount = nCount; };
    int GetReviewCount() { return nReviewCount; };
    void SetUploadResultFailCount(int nCount) { m_nUploadResultFailCount = nCount; };
    int GetUploadResultFailCount() { return m_nUploadResultFailCount; };
    //#3358 KYH FDC 데이터 전송 시점 개선 ADD START
    virtual void    MakeDVData2(); 
    //#3358 KYH FDC 데이터 전송 시점 개선 ADD END
    BOOL CheckZeroReviewAlarm();
    virtual void sendUploadResult2SequenceProcessor(int UploadResult);
    int nHistoryCount = 0;
    void SetHistoryCount(int nCount) { nHistoryCount = nCount; }
@@ -420,5 +430,7 @@
    BOOL bLastPointEndCheck;
    BOOL bFileFind;
    int m_nStackZeroReviewCondition;
    int m_nUploadResultFailCount;
};
ReviewSystem/ReviewSystemSetting/DlgNetwork.cpp
@@ -29,6 +29,8 @@
    , m_strUploadDefectMapImagePath(_T(""))
    , m_dUpdateImageScale(1.0)
    , m_strWsiImagePath(_T(""))
    , m_nZeroReviewAlarm(0)
    , m_strZeroReviewAlarmExcept(_T(""))
{
    m_nUpdateImageWidth            = 1224;
    m_nUpdateImageHeight        = 1024;
@@ -61,11 +63,11 @@
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_PATH, m_strUploadImagePath);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_DEFECTMAP_IMAGE_PATH, m_strUploadDefectMapImagePath);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_WIDTH,            m_nUpdateImageWidth);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_HEIGHT,            m_nUpdateImageHeight);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_SIZE,            m_nUpdateImageSize);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_START_QUALTY,    m_nUpdateImageQuality);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_STEP_QUALTY,    m_nUpdateImageStep);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_WIDTH, m_nUpdateImageWidth);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_HEIGHT, m_nUpdateImageHeight);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_SIZE, m_nUpdateImageSize);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_START_QUALTY, m_nUpdateImageQuality);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_STEP_QUALTY, m_nUpdateImageStep);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_IMAGE_SCALE, m_dUpdateImageScale);
@@ -77,6 +79,8 @@
    DDX_Control(pDX, IDC_COMBO2, m_ctrlComboImageFlip);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_WSI_IMAGE_PATH, m_strWsiImagePath);
    DDV_MaxChars(pDX, m_strWsiImagePath, 255);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_ZERO_COUNT_ALARM_CONDITION, m_nZeroReviewAlarm);
    DDX_Text(pDX, IDC_EDIT_SYS_NETWORK_UPLOAD_ZERO_COUNT_ALARM_CONDITION_2, m_strZeroReviewAlarmExcept);
}
BEGIN_MESSAGE_MAP(CDlgNetwork, CDialog)
@@ -133,6 +137,9 @@
            m_nImageRotate            = pNetworkInfo->m_nImageRotate;
            m_nImageFlip            = pNetworkInfo->m_nImageFlip;
            m_nZeroReviewAlarm        = pNetworkInfo->m_nZeroReviewAlarm;
            m_strZeroReviewAlarmExcept = pNetworkInfo->m_strZeroReviewAlarmExcept;
            m_ctrlButtonUseSaveOrignalImage.SetCheck(m_bUpdateImageOriginal);
            m_ctrlComboImageRotate.SetCurSel(m_nImageRotate);
            m_ctrlComboImageFlip.SetCurSel(m_nImageFlip);
@@ -184,6 +191,9 @@
    m_nImageRotate                = 0;
    m_nImageFlip                = -1;
    m_nZeroReviewAlarm            = 0;
    m_strZeroReviewAlarmExcept     = _T("");
    UpdateData(FALSE);
}
@@ -218,6 +228,9 @@
            pNetworkInfo->m_bUpdateImageOriginal    = m_bUpdateImageOriginal;
            pNetworkInfo->m_nImageRotate            = m_nImageRotate;
            pNetworkInfo->m_nImageFlip                = m_nImageFlip;
            pNetworkInfo->m_nZeroReviewAlarm        = m_nZeroReviewAlarm;
            pNetworkInfo->m_strZeroReviewAlarmExcept = m_strZeroReviewAlarmExcept;
        }
    }
    m_ctrlEditImageHeight.EnableWindow(TRUE);
ReviewSystem/ReviewSystemSetting/DlgNetwork.h
@@ -59,4 +59,6 @@
    CComboBox m_ctrlComboImageRotate;
    CComboBox m_ctrlComboImageFlip;
    int m_nZeroReviewAlarm;
    CString m_strZeroReviewAlarmExcept;
};
ReviewSystem/ReviewSystemSetting/ReviewSystemSetting.rc
@@ -335,6 +335,12 @@
    RTEXT           "Upload DefectMap Image File Path :",IDC_STATIC,7,111,93,14,SS_CENTERIMAGE
    RTEXT           "WSI Image File Path :",IDC_STATIC,7,127,93,14,SS_CENTERIMAGE
    EDITTEXT        IDC_EDIT_SYS_NETWORK_WSI_IMAGE_PATH,105,129,267,14,ES_AUTOHSCROLL
    RTEXT           "Review 0 Count Alarm : ",IDC_STATIC,15,289,85,14,SS_CENTERIMAGE
    GROUPBOX        "Alarm Condition",IDC_STATIC,7,282,365,135
    EDITTEXT        IDC_EDIT_SYS_NETWORK_UPLOAD_ZERO_COUNT_ALARM_CONDITION,105,290,55,14,ES_AUTOHSCROLL
    LTEXT           "매 이상 연속 0리뷰시 발생",IDC_STATIC,162,289,85,14,SS_CENTERIMAGE
    EDITTEXT        IDC_EDIT_SYS_NETWORK_UPLOAD_ZERO_COUNT_ALARM_CONDITION_2,249,289,55,14,ES_AUTOHSCROLL
    LTEXT           "일 경우 제외",IDC_STATIC,305,290,59,14,SS_CENTERIMAGE
END
IDD_DIALOG_SYS_SETTING_SYSTEM_GANTRY DIALOGEX 0, 0, 363, 345
@@ -755,6 +761,11 @@
    0
END
IDD_DIALOG_SYS_SETTING_NETWORK AFX_DIALOG_LAYOUT
BEGIN
    0
END
/////////////////////////////////////////////////////////////////////////////
//
ReviewSystem/ReviewSystemSetting/resource.h
@@ -142,7 +142,9 @@
#define IDC_EDIT_SYS_NETWORK_UPLOAD_DEFECTMAP_IMAGE_PATH2 1039
#define IDC_EDIT_SYS_NETWORK_WSI_IMAGE_PATH 1039
#define IDC_BUTTON_SYS_SYSTEM_LIGHT_RESET 1040
#define IDC_EDIT_SYS_NETWORK_UPLOAD_ZERO_COUNT_ALARM_CONDITION 1040
#define IDC_BUTTON_SYS_SYSTEM_LIGHT_APPLY 1041
#define IDC_EDIT_SYS_NETWORK_UPLOAD_ZERO_COUNT_ALARM_CONDITION_2 1041
#define IDC_GRID_SYSTEM_LIGHT_INFO      1042
#define IDC_EDIT_SYS_SG_GANTRY_IDX      1043
#define IDC_EDIT_SYS_SG_HEADER_IDX      1044
@@ -230,7 +232,7 @@
// 
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE        145
#define _APS_NEXT_RESOURCE_VALUE        146
#define _APS_NEXT_COMMAND_VALUE         32771
#define _APS_NEXT_CONTROL_VALUE         1094
#define _APS_NEXT_SYMED_VALUE           107
ReviewSystem/include/CHMotorControls/MotorControl.h
@@ -261,6 +261,12 @@
    long                    m_nAutoEnable;
    long                    m_nAutoEnablePrev;
    /*< LYW 20220704 - #4220 ADD Start >*/
    long                    m_nMotorAlive;
    long                    m_nMotorAlivePrev;
    DWORD                    dwLastAliveTick;
    /*< LYW 20220704 - #4220 ADD End >*/
    // wsi signal
    long                    m_nWsiMotionEndPrev;
    BOOL                    m_bUseWsi;
ReviewSystem/include/CHMotorControls/MotorControlInfo.h
@@ -25,6 +25,7 @@
    virtual void IMC2P_GantrySoftWareTrigger(int nIndex, int nGantryIdx, int nTrigger) = 0;
    virtual void IMC2P_WsiGantrySoftWareTrigger(int nIndex, int nGantryIdx, int nTrigger) = 0;
    virtual void IMC2P_UpdateAutoEnable(int nIndex, int nAutoEnable){return;};
    virtual void IMC2P_SendMotorAliveErrorAlram() = 0;
    virtual void IMC2P_UpdateWsiMotionEnd(int nIndex, int nGantryIdx) = 0;
    virtual BOOL IMC2P_GetUseWsi() = 0;
};
ReviewSystem/include/CHReviewSetting/NetworkInfo.h
@@ -34,5 +34,8 @@
    int        m_nImageRotate;
    int        m_nImageFlip;
    int m_nZeroReviewAlarm;
    CString m_strZeroReviewAlarmExcept;
};