SDC C-Project CF Review 프로그램
LYW
2022-04-15 8ede40e3f7cfe1772ef7db2b1d74e905639cf343
Ongoing90 #4086 CF AOI Review FDC SW Version 추가 요청

1. 프로그램 시작시 쓰레드 생성
2. 쓰레드 내에서 지금 켜져있는 리뷰 프로그램, FTPUploader, GlassRawMessenger, DitSharedMemorySyncClient 프로그램의 최종 수정 날짜 획득
3. 켜져있지 않으면 켜질때까지 쓰레드내에서 대기
4. 4가지 프로그램에대한 최종 수정 날짜를 모두 찾으면 쓰레드 종료
5. FTP 항목으로 위 4가지 S/W 버전 실시간 보고
7개 파일 변경됨
223 ■■■■■ 파일 변경됨
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawDemo.cpp 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.cpp 156 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewInterface.h 17 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/ReviewSystem.vcxproj 2 ●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor.h 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp 36 ●●●● 패치 | 보기 | raw | blame | 히스토리
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawCPJT.cpp
@@ -21,6 +21,10 @@
#define LOCAL_AOIRAWDFS_PATH        "D:\\DIT_ResultData\\Raw"
#define LOCAL_AOIRAWBIN_PATH        "D:\\DIT_ResultData\\RawBin"
//TEST
// #define NETWORK_AOIRAWDFS_PATH        "D:\\DIT_ResultData\\Raw"
// #define NETWORK_AOIRAWBIN_PATH        "D:\\DIT_ResultData\\RawBin"
#define NETWORK_AOIRAWDFS_PATH        "\\\\126.100.100.1\\d\\DIT_ResultData\\Raw"
#define NETWORK_AOIRAWBIN_PATH        "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin"
DitGlassRawMessenger/DitGlassRawMessenger/GlassRawDemo.cpp
@@ -16,6 +16,7 @@
#define LOCAL_AOIRAWDFS_PATH        "D:\\DIT_ResultData\\Raw"
#define LOCAL_AOIRAWBIN_PATH        "D:\\DIT_ResultData\\RawBin"
#define NETWORK_AOIRAWDFS_PATH        "\\\\126.100.100.1\\d\\DIT_ResultData\\Raw"
#define NETWORK_AOIRAWBIN_PATH        "\\\\126.100.100.1\\d\\DIT_ResultData\\RawBin"
ReviewSystem/ReviewSystem/ReviewInterface.cpp
@@ -67,6 +67,8 @@
#include "akAOISharedSystem.h"
#include "DlgModuleInfo.h"
#include <Psapi.h>
using namespace CHReviewResult;
using namespace CHImageControls;
@@ -111,6 +113,12 @@
    // single variable
    m_strProgramVersion            = _T("");        // program version
    /*< LYW 20220415 - #4086 ADD Start >*/
    m_nFDCGRMSWVersion = 20220101;
    m_nFDCFTPUploaderSWVersion = 20220101;
    m_nFDCSyncSWVersion = 20220101;
    m_nFDCReviewSWVersion = 20220101;
    /*< LYW 20220415 - #4086 ADD End >*/
    m_ProcessTimer.End();                        // process timer
    // multi variable    
@@ -162,7 +170,6 @@
    //ISP2P_CopyFolder(_REVIEW_SERVER_CONFIG_PATH_, _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT);
    //ISP2P_CopyFolder(_REVIEW_RECIPE_PATH_, _REVIEW_RECIPE_BACKUP_PATH_CPJT);
    //LYW_#3344_CF AOI Review Config File 백업 기능 개선 ADD END
    SetProgramVersion();
    // init review data
    if (m_pDoc->InitReviewData()==FALSE) 
@@ -187,6 +194,10 @@
    {
        m_pView->CreateDialogs(pSystemInfo->m_nLineType, pSystemInfo->m_nMachineType, pSystemInfo->m_bUseVisionAlign);
    }
    /*< LYW 20220415 - #4086 ADD Start >*/
    _beginthread(threadSetProgramVersion, NULL, this);
    /*< LYW 20220415 - #4086 ADD End >*/
    // system type log : SW Version 추가
    g_pLog->DisplayMessage(_T("Starting ReviewSystem Program! (%s)"), m_strProgramVersion);
@@ -370,22 +381,22 @@
{
    TRACE(_T("[A2E]DeinitReviewInterface 시작\n"));
    m_ProcessTimer.Start();
    DisconnectReviewCamera();
    DeinitReviewCamera();
    m_ProcessTimer.End();
    if (m_pView)
    {
        m_pView->DeleteDialogs();
    }
    g_pLog->DisplayMessage(_T("ReviewCamera Deinit Time : %f ms"), m_ProcessTimer.GetDurationMilliSecond());
    g_pLog->DisplayMessage(_T("Program exit by User!"));
    ClearAllObserverVector();
    g_pLog->DisplayMessage(_T("Clear all Observer Vectors"));
    ::Sleep(400);
    m_ProcessTimer.Start();
    DisconnectReviewCamera();
    DeinitReviewCamera();
    m_ProcessTimer.End();
    g_pLog->DisplayMessage(_T("ReviewCamera Deinit Time : %f ms"), m_ProcessTimer.GetDurationMilliSecond());
    m_ProcessTimer.Start();
    DeinitAlignCamera();
@@ -565,14 +576,21 @@
    AFM_SetAFMZoomLevel(0, 0);
}
void CReviewInterface::SetProgramVersion()
/*< LYW 20220415 - #4086 ADD Start >*/
void CReviewInterface::threadSetProgramVersion(void* pArg)
{
    BOOL bReturn;
    CReviewInterface* pThis = (CReviewInterface*)pArg;
    //LYW0412
    BOOL bReturn, bRetFTPUploader = FALSE, bRetGRM = FALSE, bRetSync = FALSE;
    CFileFind finder;
    CTime timeLastWrite;
    TCHAR currentPath[MAX_PATH];
    DWORD dwPid;
    HWND hWnd;
    HANDLE hHandle;
    CString strTemp;
    //Review S/W Version Start
    ::GetModuleFileName( AfxGetInstanceHandle(), currentPath, MAX_PATH);
    bReturn = finder.FindFile(currentPath);
@@ -583,14 +601,108 @@
        if(finder.IsDots()) continue;
        if(finder.IsDirectory()) continue;
        finder.GetLastWriteTime(timeLastWrite);
        m_strProgramVersion.Format(_T("Build[ %04d.%02d.%02d %02d:%02d ]"),
        pThis->m_strProgramVersion.Format(_T("Build[ %04d.%02d.%02d %02d:%02d ]"),
            timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay(), timeLastWrite.GetHour(), timeLastWrite.GetMinute());
        strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
        pThis->m_nFDCReviewSWVersion = atoi(strTemp);
        g_pLog->DisplayMessage(_T("FDCReviewSWVersion = %d "), pThis->m_nFDCReviewSWVersion);
    }
    //Review S/W Version Start
    while ((bRetFTPUploader&bRetGRM&bRetSync) != TRUE)
    {
        bReturn = FALSE;
        //FTPUploader S/W Version Start
        if (bRetFTPUploader == FALSE)
        {
            dwPid = 0;
            hWnd = ::FindWindow(NULL, _T("FTPUploader"));
            GetWindowThreadProcessId(hWnd, &dwPid);
            hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
            ZeroMemory(currentPath, MAX_PATH);
            GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
            bReturn = finder.FindFile(currentPath);
        }
        while (bReturn)
        {
            bReturn = finder.FindNextFile();
            if (finder.IsDots()) continue;
            if (finder.IsDirectory()) continue;
            finder.GetLastWriteTime(timeLastWrite);
            strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
            pThis->m_nFDCFTPUploaderSWVersion = atoi(strTemp);
            g_pLog->DisplayMessage(_T("FDCFTPUploaderSWVersion = %d "), pThis->m_nFDCFTPUploaderSWVersion);
            bRetFTPUploader = TRUE;
        }
        //FTPUploader S/W Version End
        //Dit Glass Raw Messenger S/W Version Start
        if (bRetGRM == FALSE)
        {
            dwPid = 0;
            hWnd = ::FindWindow(NULL, _T("Dit Glass Raw Messenger"));
            GetWindowThreadProcessId(hWnd, &dwPid);
            hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
            ZeroMemory(currentPath, MAX_PATH);
            GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
            bReturn = finder.FindFile(currentPath);
        }
        while (bReturn)
        {
            bReturn = finder.FindNextFile();
            if (finder.IsDots()) continue;
            if (finder.IsDirectory()) continue;
            finder.GetLastWriteTime(timeLastWrite);
            strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
            pThis->m_nFDCGRMSWVersion = atoi(strTemp);
            g_pLog->DisplayMessage(_T("FDCGRMSWVersion = %d "), pThis->m_nFDCGRMSWVersion);
            bRetGRM = TRUE;
        }
        //Dit Glass Raw Messenger S/W Version End
        //Dit Shared Memory Sync Client S/W Version Start
        if (bRetSync == FALSE)
        {
            dwPid = 0;
            hWnd = ::FindWindow(NULL, _T("Dit Shared Memory Sync Client"));
            GetWindowThreadProcessId(hWnd, &dwPid);
            hHandle = OpenProcess(MAXIMUM_ALLOWED, FALSE, dwPid);
            ZeroMemory(currentPath, MAX_PATH);
            GetModuleFileNameEx(hHandle, NULL, currentPath, MAX_PATH);
            bReturn = finder.FindFile(currentPath);
        }
        while (bReturn)
        {
            bReturn = finder.FindNextFile();
            if (finder.IsDots()) continue;
            if (finder.IsDirectory()) continue;
            finder.GetLastWriteTime(timeLastWrite);
            strTemp.Format(_T("%04d%02d%02d"), timeLastWrite.GetYear(), timeLastWrite.GetMonth(), timeLastWrite.GetDay());
            pThis->m_nFDCSyncSWVersion = atoi(strTemp);
            g_pLog->DisplayMessage(_T("FDCSyncSWVersion = %d "), pThis->m_nFDCSyncSWVersion);
            bRetSync = TRUE;
        }
        //Dit Shared Memory Sync Client S/W Version End
    }
    finder.Close();
}
/*< LYW 20220415 - #4086 ADD End >*/
void CReviewInterface::CreateSystemDirectory()
{
@@ -8296,6 +8408,26 @@
    m_nReview01ImageContrast = n_Value;
}
BOOL CReviewInterface::ISP2P_GetReviewSWVersion()
{
    return m_nFDCReviewSWVersion;
}
BOOL CReviewInterface::ISP2P_GetSyncSWVersion()
{
    return m_nFDCSyncSWVersion;
}
BOOL CReviewInterface::ISP2P_GetGRMSWVersion()
{
    return m_nFDCGRMSWVersion;
}
BOOL CReviewInterface::ISP2P_GetFTPUploaderSWVersion()
{
    return m_nFDCFTPUploaderSWVersion;
}
SDefectFilter* CReviewInterface::ISP2P_GetDefectFilter()
{
    if (m_pDoc==NULL) return NULL;
ReviewSystem/ReviewSystem/ReviewInterface.h
@@ -387,6 +387,12 @@
    virtual void                        ISP2P_SetReview00ImageContrast(int n_Value);
    virtual void                        ISP2P_SetReview01ImageContrast(int n_Value);
    /*< LYW 20211109 - #3662 ADD End >*/
    /*< LYW 20220415 - #4086 ADD Start >*/
    virtual BOOL                        ISP2P_GetReviewSWVersion();
    virtual BOOL                        ISP2P_GetSyncSWVersion();
    virtual BOOL                        ISP2P_GetGRMSWVersion();
    virtual BOOL                        ISP2P_GetFTPUploaderSWVersion();
    /*< LYW 20220415 - #4086 ADD End >*/
    // History result
    virtual CGlassResult*                ISP2P_GetNewHistoryResult(int& nHistoryResultCount);    // new glass result
@@ -666,7 +672,9 @@
    // setter internal
    double    GetFreeSpaceOfDrive() const;
    void    SetProgramVersion();
    /*< LYW 20220415 - #4086 ADD Start >*/
    static void    threadSetProgramVersion(void* pArg);
    /*< LYW 20220415 - #4086 ADD End >*/
        
    void    ApplySystemSettingValue();
    void    SetDefaultValue();
@@ -853,6 +861,13 @@
    CString                        m_strProgramVersion;            // program version
    CProcessTimer                m_ProcessTimer;                    // process timer
    SThetaMotorInfo                m_sThetaMotorInfo;                // theta motor info
    /*< LYW 20220415 - #4086 ADD Start >*/
    long                        m_nFDCGRMSWVersion;
    long                        m_nFDCFTPUploaderSWVersion;
    long                        m_nFDCSyncSWVersion;
    long                        m_nFDCReviewSWVersion;
    /*< LYW 20220415 - #4086 ADD End >*/
    
    // multi variable    
    VectorModuleStatus            m_vecModuleStatus;                // Review Module Status Vector    
ReviewSystem/ReviewSystem/ReviewSystem.vcxproj
@@ -161,7 +161,7 @@
      <AdditionalIncludeDirectories>$(IntDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
    </ResourceCompile>
    <Link>
      <AdditionalDependencies>CHVirtualGlassMap_x64_vc15.lib;chartdir51.lib;CHCameraControls_x64_vc15.lib;LineChecker_x64_vc15.lib;CHImageControls_x64_vc15.lib;CHCommonClasses_x64_vc15.lib;CHCommonControls_x64_vc15.lib;CHResultFileManager_x64_vc15.lib;CHReviewRecipe_x64_vc15.lib;CHReviewSetting_x64_vc15.lib;CHReviewResult_x64_vc15.lib;CHEdgeTriangle_x64_vc15.lib;CHPathScheduler_x64_vc15.lib;CHMotorCalibrator_x64_vc15.lib;CHAutoLightControls_x64_vc15.lib;CHAlignFinder_x64_vc15.lib;CHThreadPools_x64_vc15.lib;CHReviewResultParser_x64_vc15.lib;CHReviewDefectFinder_x64_vc15.lib;CHReviewPrioritySorter_x64_vc15.lib;CHDefectPicker_x64_vc15.lib;IOCPNetwork_x64_vc15.lib;CHMotorControls_x64_vc15.lib;CHLensChangeControls_x64_vc15.lib;CHLightControls_x64_vc15.lib;CHAfmControls_x64_vc15.lib;CHSignalControls_x64_vc15.lib;CHVcrControls_x64_vc15.lib;CHWsiControls_x64_vc15.lib;CHTotalPitchMeasure_x64_vc15.lib;M_AutoDiagnosisManager_x64_vc17.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <AdditionalDependencies>CHVirtualGlassMap_x64_vc15.lib;chartdir51.lib;CHCameraControls_x64_vc15.lib;LineChecker_x64_vc15.lib;CHImageControls_x64_vc15.lib;CHCommonClasses_x64_vc15.lib;CHCommonControls_x64_vc15.lib;CHResultFileManager_x64_vc15.lib;CHReviewRecipe_x64_vc15.lib;CHReviewSetting_x64_vc15.lib;CHReviewResult_x64_vc15.lib;CHEdgeTriangle_x64_vc15.lib;CHPathScheduler_x64_vc15.lib;CHMotorCalibrator_x64_vc15.lib;CHAutoLightControls_x64_vc15.lib;CHAlignFinder_x64_vc15.lib;CHThreadPools_x64_vc15.lib;CHReviewResultParser_x64_vc15.lib;CHReviewDefectFinder_x64_vc15.lib;CHReviewPrioritySorter_x64_vc15.lib;CHDefectPicker_x64_vc15.lib;IOCPNetwork_x64_vc15.lib;CHMotorControls_x64_vc15.lib;CHLensChangeControls_x64_vc15.lib;CHLightControls_x64_vc15.lib;CHAfmControls_x64_vc15.lib;CHSignalControls_x64_vc15.lib;CHVcrControls_x64_vc15.lib;CHWsiControls_x64_vc15.lib;CHTotalPitchMeasure_x64_vc15.lib;M_AutoDiagnosisManager_x64_vc17.lib;psapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
      <AdditionalLibraryDirectories>../lib;../../Internal_Library/lib;../../External_Library/lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <SubSystem>Windows</SubSystem>
ReviewSystem/ReviewSystem/SequenceProcessor.h
@@ -438,6 +438,13 @@
    virtual void                        ISP2P_SetReview01ImageContrast(int n_Value) = 0;
    /*< LYW 20211109 - #3662 ADD End >*/
    /*< LYW 20220415 - #4086 ADD Start >*/
    virtual BOOL                        ISP2P_GetReviewSWVersion() = 0;
    virtual BOOL                        ISP2P_GetSyncSWVersion() = 0;
    virtual BOOL                        ISP2P_GetGRMSWVersion() = 0;
    virtual BOOL                        ISP2P_GetFTPUploaderSWVersion() = 0;
    /*< LYW 20220415 - #4086 ADD End >*/
    virtual CGlassResult*                ISP2P_GetNewHistoryResult(int& nHistoryResultCount) = 0;    // new glass result
    virtual CGlassResult*                ISP2P_GetHistoryResult(int nIndex) = 0;                    // get glass result
           
ReviewSystem/ReviewSystem/SequenceProcessor_CPJT.cpp
@@ -7772,6 +7772,9 @@
    pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version);
    pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version);
    /*< LYW 20220415 - #4086 ADD Start >*/ //추가 필요
    /*< LYW 20220415 - #4086 ADD End >*/
    //CCHImageData pImageData;
    //CCHImageData pImageData2;
@@ -8047,6 +8050,12 @@
    int nWSI01Version = 20210422;
    int nReviewAliveCamera00 = 1000;
    int nReviewAliveCamera01 = 1000;
    /*< LYW 20220415 - #4086 ADD Start >*/
    int    nFDCGRMSWVersion = 20200101;
    int    nFDCFTPUploaderSWVersion = 20200101;
    int    nFDCSyncSWVersion = 20200101;
    int    nFDCReviewSWVersion = 20200101;
    /*< LYW 20220415 - #4086 ADD End >*/
    //foucs 
    /*< LYW 20211109 - #3662 MOD Start >*/
@@ -8054,6 +8063,13 @@
    {
        nRev_Cam1_Image_Contrast = m_pSP2P->ISP2P_GetReview00ImageContrast() * 1000;
        nRev_Cam2_Image_Contrast = m_pSP2P->ISP2P_GetReview01ImageContrast() * 1000;
        /*< LYW 20220415 - #4086 ADD Start >*/
        nFDCGRMSWVersion = m_pSP2P->ISP2P_GetGRMSWVersion();
        nFDCFTPUploaderSWVersion = m_pSP2P->ISP2P_GetFTPUploaderSWVersion();
        nFDCSyncSWVersion = m_pSP2P->ISP2P_GetSyncSWVersion();
        nFDCReviewSWVersion = m_pSP2P->ISP2P_GetReviewSWVersion();
        /*< LYW 20220415 - #4086 ADD End >*/
    }
    /*< LYW 20211109 - #3662 MOD End >*/
    /*< Origin Code >*/
@@ -8197,13 +8213,21 @@
    pSignalControl->WritePacketData(_T("16116"), sizeof(nRev_Cam1_Image_Contrast), (short*)&nRev_Cam1_Image_Contrast);
    pSignalControl->WritePacketData(_T("16120"), sizeof(nRev_Cam2_Image_Contrast), (short*)&nRev_Cam2_Image_Contrast);
    pSignalControl->WritePacketData(_T("16124"), sizeof(nRev_PC_HDD_CHECK), (short*)&nRev_PC_HDD_CHECK);
    pSignalControl->WritePacketData(_T("16128"), sizeof(nWSI1_PC_HDD_CHECK), (short*)&nWSI1_PC_HDD_CHECK);
    pSignalControl->WritePacketData(_T("16132"), sizeof(nWSI2_PC_HDD_CHECK), (short*)&nWSI2_PC_HDD_CHECK);
    /*< LYW 20220415 - #4086 ADD Start >*/
    pSignalControl->WritePacketData(_T("16124"), sizeof(nFDCSyncSWVersion), (short*)&nFDCSyncSWVersion);
    pSignalControl->WritePacketData(_T("16128"), sizeof(nFDCReviewSWVersion), (short*)&nFDCReviewSWVersion);
    pSignalControl->WritePacketData(_T("16132"), sizeof(nFDCFTPUploaderSWVersion), (short*)&nFDCFTPUploaderSWVersion);
    pSignalControl->WritePacketData(_T("16136"), sizeof(nFDCGRMSWVersion), (short*)&nFDCGRMSWVersion);
    pSignalControl->WritePacketData(_T("16136"), sizeof(nReviewVersion), (short*)&nReviewVersion);
    pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version);
    pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version);
    /*< LYW 20220415 - #4086 ADD End >*/
//     pSignalControl->WritePacketData(_T("16124"), sizeof(nRev_PC_HDD_CHECK), (short*)&nRev_PC_HDD_CHECK);
//     pSignalControl->WritePacketData(_T("16128"), sizeof(nWSI1_PC_HDD_CHECK), (short*)&nWSI1_PC_HDD_CHECK);
//     pSignalControl->WritePacketData(_T("16132"), sizeof(nWSI2_PC_HDD_CHECK), (short*)&nWSI2_PC_HDD_CHECK);
//
//     pSignalControl->WritePacketData(_T("16136"), sizeof(nReviewVersion), (short*)&nReviewVersion);
//     pSignalControl->WritePacketData(_T("16140"), sizeof(nWSI00Version), (short*)&nWSI00Version);
//     pSignalControl->WritePacketData(_T("16144"), sizeof(nWSI01Version), (short*)&nWSI01Version);
    return;