SDC C-Project CF Review 프로그램
LYW
2022-04-15 8ede40e3f7cfe1772ef7db2b1d74e905639cf343
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   
@@ -123,6 +131,17 @@
   m_nCurrentWsiMode   = 0;
   m_bIsOffSetOn = 0;
   m_bIsSimulation = 0;
   m_bFirstReviewLeft = 0;
   m_bFirstReviewRight = 0;
   /*< LYW 20211014 - #3671 ADD Start >*/
   m_daccumulate = 0;
   /*< LYW 20211014 - #3671 ADD End >*/
   /*< LYW 20211109 - #3662 ADD Start >*/
   m_nReview00ImageContrast = 5;
   m_nReview01ImageContrast = 5;
   /*< LYW 20211109 - #3662 ADD End >*/
   // cs init
   InitializeCriticalSection(&m_csReviewResult);
@@ -148,10 +167,9 @@
   //시작할때 다 지우고 다시 복사가 필요할지
   //std::experimental::filesystem::remove_all(_REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT);
   //std::experimental::filesystem::remove_all(_REVIEW_RECIPE_BACKUP_PATH_CPJT);
   ISP2P_CopyFolder(_REVIEW_SERVER_CONFIG_PATH_, _REVIEW_SERVER_SYSTEM_SETTING_BACKUP_PATH_CPJT);
   ISP2P_CopyFolder(_REVIEW_RECIPE_PATH_, _REVIEW_RECIPE_BACKUP_PATH_CPJT);
   //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) 
@@ -176,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);
@@ -359,20 +381,22 @@
{
   TRACE(_T("[A2E]DeinitReviewInterface 시작\n"));
   if (m_pView)
   {
      m_pView->DeleteDialogs();
   }
   ClearAllObserverVector();
   g_pLog->DisplayMessage(_T("Clear all Observer Vectors"));
   ::Sleep(400);
   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();
   DeinitAlignCamera();
@@ -552,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);
@@ -570,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()
{
@@ -1172,6 +1297,10 @@
         BOOL bConnection = pCameraControlReview->GetConnected();
         pConnectionStatus->m_vecReviewCameraStatus.push_back(bConnection);
         /*< LYW 20211112 - #3708 ADD Start >*/
         g_pLog->DisplayMessage(_T("[ReviewCamera] %d is connected"), nModuleIndex);
         /*< LYW 20211112 - #3708 ADD End >*/
         nModuleIndex++; // module status++
      } // for HeaderIdx
   } // for nGantryIdx
@@ -1269,7 +1398,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
   {
@@ -2874,24 +3003,36 @@
         double dAccdata = measureResut.dAccuracy;
         double dRbtdata = measureResut.dRepeatability;
         double dDiagnosisHeight[10];
         for (int i = 0; i < 10; i++)
         {
            dDiagnosisHeight[i] = measureResut.dDiagnosisHeight[i];
         }
         if (nModuleIndex == 0)
         {
            m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->SetACC(dAccdata);
            m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->SetRTB(dRbtdata);
            for (int i = 0; i < 10; i++)
            {
               m_pDiagnosisManager->GetDiagnosisResult_Wsi(0)->SetDiagnosisHeight(dDiagnosisHeight[i], i);
            }
            m_vecWSIControl[0]->SendWsiAfmSafePosMove();
         }
         else if (nModuleIndex == 1)
         {
            m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->SetACC(dAccdata);
            m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->SetRTB(dRbtdata);
            for (int i = 0; i < 10; i++)
            {
               m_pDiagnosisManager->GetDiagnosisResult_Wsi(1)->SetDiagnosisHeight(dDiagnosisHeight[i], i);
            }
            m_vecWSIControl[1]->SendWsiAfmSafePosMove();
         }
      
         m_pDlgDiagnosis->m_pDlgWsi->UpdateWSIResult(nModuleIndex,dAccdata, dAccdata, dRbtdata, dRbtdata);
         m_pDlgDiagnosis->m_pDiagnosisManager->setWSIVLSIEnd(true);
      }
@@ -3100,6 +3241,16 @@
   return AlignLight_GetLightLevel(nCameraIndex, nValue);
}
int CReviewInterface::IACC2P_GetAccumaulate()
{
   return m_daccumulate;
}
void CReviewInterface::IACC2P_SetAccumaulate(int dValue)
{
   m_daccumulate = dValue;
}
BOOL CReviewInterface::IRCC2P_GetCurrentFrame(int nModuleIndex, int nCameraIndex, int nFrameWidth, int nFrameHeight, int nFrameChannels, CCHImageData* pImageData)
{
   if (m_pVirtualGlassMap==NULL) return FALSE;
@@ -3305,6 +3456,12 @@
   return m_pDoc->System_GetSystemInfo();
}
const CSignalControlInfo* CReviewInterface::IRP2P_GetReviewSignalinfo()
{
   if (m_pDoc == NULL) return NULL;
   return m_pDoc->System_GetSignalInfo();
}
CGlassResult* CReviewInterface::IRP2P_GetCurrentGlassResult()
{
   if (m_pDoc==NULL) return NULL;
@@ -3313,14 +3470,23 @@
void CReviewInterface::IRP2P_DisplayMessage(const TCHAR* lpstrFormat, ...)
{
   va_list list;
   TCHAR strText[2000] = {0};
   try
   {
      va_list list;
      TCHAR strText[2000] = { 0 };
   va_start(list, lpstrFormat);
   _vstprintf_s(strText, lpstrFormat, list);
   va_end(list);
      va_start(list, lpstrFormat);
      _vstprintf_s(strText, lpstrFormat, list);
      va_end(list);
   g_pLog->DisplayMessage(strText);
      g_pLog->DisplayMessage(strText);
   }
   catch (...)
   {
      return ;
   }
}
CResultServerControl* CReviewInterface::IRP2P_GetResultServerControl()
@@ -3356,6 +3522,46 @@
CRecipeManager* CReviewInterface::IRP2P_GetEdgeRecipeManager()
{
   return m_pEdgeRecipeManager;
}
BOOL CReviewInterface::IRP2P_GetFirstReviewLeft()
{
   return m_bFirstReviewLeft;
}
BOOL CReviewInterface::IRP2P_GetFirstReviewRight()
{
   return m_bFirstReviewRight;
}
void CReviewInterface::IRP2P_SetFirstReviewLeft(BOOL b_Check)
{
   m_bFirstReviewLeft = b_Check;
}
void CReviewInterface::IRP2P_SetFirstReviewRight(BOOL b_Check)
{
   m_bFirstReviewRight = b_Check;
}
BOOL CReviewInterface::IRP2P_GetReview00ImageContrast()
{
   return m_nReview00ImageContrast;
}
BOOL CReviewInterface::IRP2P_GetReview01ImageContrast()
{
   return m_nReview01ImageContrast;
}
void CReviewInterface::IRP2P_SetReview00ImageContrast(int n_Value)
{
   m_nReview00ImageContrast = n_Value;
}
void CReviewInterface::IRP2P_SetReview01ImageContrast(int n_Value)
{
   m_nReview01ImageContrast = n_Value;
}
@@ -3413,6 +3619,14 @@
   CDlgDefectMap* pDefectmap =  m_pView->GetDefectMapDlgHandle();
   if (pDefectmap == NULL) { return FALSE; }
   pDefectmap->GetDefectMap()->SetOffsetmodeparma(bMode, nCamidx, nScanidx, nXpos, nYpos);
   return FALSE;
}
BOOL CReviewInterface::IDRO2P_SetOffsetPram(int nCamIdx, int nScanIdx, BOOL bUse)
{
   CDlgDefectMap* pDefectmap = m_pView->GetDefectMapDlgHandle();
   if (pDefectmap == NULL) { return FALSE; }
   pDefectmap->GetDefectMap()->SetOffsetparm(nCamIdx, nScanIdx, bUse);
   return FALSE;
}
@@ -3497,6 +3711,16 @@
   return m_pMotorControl->IsGantryMotionEnd(nModuleIdx);
}
BOOL CReviewInterface::IDP2P_CheckManualMode()
{
   if (IsManualProcessMode() == TRUE)
   {
      return TRUE;
   }
   return FALSE;
}
int CReviewInterface::IDP2P_GetSelectedModuleIndex()
@@ -3679,6 +3903,7 @@
   //return pAFMControl->MoveToHomePosition(nHomePosition);
}
//#3407 KYH 자가진단 Judge 판정 및 알람 발생 기능 ADD START
BOOL CReviewInterface::IDP2P_DiagnosisSendJudgeAlarm() // 0412 자가진단 JudgeAlarm 추가
{
@@ -3686,6 +3911,7 @@
   //return pAFMControl->MoveToHomePosition(nHomePosition);
}
//#3407 KYH 자가진단 Judge 판정 및 알람 발생 기능 ADD END
BOOL CReviewInterface::IDP2P_SetDlgFlatness(int nIndex)
{
@@ -3765,12 +3991,15 @@
   if (m_SequenceProcessor == NULL) return;
   m_SequenceProcessor->SetWsiType(9);
   if (!m_SequenceProcessor->WSIAllReadySignal(1))
   if (nModuleIdx == 0)
   {
      g_pLog->DisplayMessage(_T("[WSI] Send Ready Signal to All WIS Fail"));
      if (!m_SequenceProcessor->WSIAllReadySignal(1))
      {
         g_pLog->DisplayMessage(_T("[WSI] Send Ready Signal to All WIS Fail"));
         return;
      }
   }
   else
   {
      SetCurrentWsiMode(WsiMeasureType_VLSI);
      CWsiControl* pWsiControl = ISP2P_GetWSIControl(nModuleIdx);
@@ -3784,7 +4013,6 @@
      pWsiControl->SetWsiStart(1, vectorPosX, vectorPosY, 0);
   }
}
void CReviewInterface::IDP2P_WsiMotorMotionEnd(int nModuleIdx, double dPosX, double dPosY)
@@ -5708,6 +5936,12 @@
      pGlassResult->m_AlignRecipe.dMatchingRate      = pRsRcpAlignInfo->m_dMatchingRate;
      pGlassResult->m_AlignRecipe.strFirstImageFile   = pRsRcpAlignInfo->m_strFirstImageFile;
      pGlassResult->m_AlignRecipe.strSecondImageFile   = pRsRcpAlignInfo->m_strSecondImageFile;
      /*< LYW 20211012 - #3671 ADD Start >*/
      pGlassResult->m_AlignRecipe.strFirstAssistantImageFile = pRsRcpAlignInfo->m_strFirstAssistantImageFile;
      pGlassResult->m_AlignRecipe.strSecondAssistantImageFile = pRsRcpAlignInfo->m_strSecondAssistantImageFile;
      pGlassResult->m_AlignRecipe.strMatchingPixelStandard = pRsRcpAlignInfo->m_strMatchingPixelStandard;
      pGlassResult->m_AlignRecipe.strMatchingAlarmCondition = pRsRcpAlignInfo->m_strMatchingAlarmCondition;
      /*< LYW 20211012 - #3671 ADD End >*/
      pGlassResult->m_AlignRecipe.strTotalPitchImageFile = pRsRcpAlignInfo->m_strTotalPitchImageFile;
      // edge find param
@@ -6469,6 +6703,7 @@
      
      m_pDlgDiagnosis->ShowWindow(SW_SHOW);
      return;
      /*
      if (m_pSignalControl)
      {
@@ -6486,6 +6721,14 @@
   {
      g_pLog->DisplayMessage(_T("Machine Mode is not Manual or Review Mode!"));
      return;
   }
   else
   {
      //#3584 210923 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD START
      m_pSequenceProcessor->SetSimulationMode(TRUE);
      g_pLog->DisplayMessage(_T("Set User Command = %d"),nCommand);
      //#3584 210923 LYW CF AOI Review 시뮬레이션 기능 정상화 ADD END
   }
   m_pSequenceProcessor->RecvSignalToSignalControl(PCControlRecvSignalIndex_Seq, nCommand);
@@ -8145,6 +8388,46 @@
   return m_pDoc->Etc_GetTransferData();
}
BOOL CReviewInterface::ISP2P_GetReview00ImageContrast()
{
   return m_nReview00ImageContrast;
}
BOOL CReviewInterface::ISP2P_GetReview01ImageContrast()
{
   return m_nReview01ImageContrast;
}
void CReviewInterface::ISP2P_SetReview00ImageContrast(int n_Value)
{
   m_nReview00ImageContrast = n_Value;
}
void CReviewInterface::ISP2P_SetReview01ImageContrast(int n_Value)
{
   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;
@@ -8346,6 +8629,26 @@
   return m_pDlgHistoryTool;
}
BOOL CReviewInterface::ISP2P_GetFirstReviewLeft()
{
   return m_bFirstReviewLeft;
}
BOOL CReviewInterface::ISP2P_GetFirstReviewRight()
{
   return m_bFirstReviewRight;
}
void CReviewInterface::ISP2P_SetFirstReviewLeft(BOOL b_Check)
{
   m_bFirstReviewLeft = b_Check;
}
void CReviewInterface::ISP2P_SetFirstReviewRight(BOOL b_Check)
{
   m_bFirstReviewRight = b_Check;
}
void CReviewInterface::ILCC2P_DisplayMessage( int nIndex, const TCHAR* lpstrFormat, ... )
{
@@ -8456,6 +8759,66 @@
void CReviewInterface::IDL2P_OpenHistoryTool()
{
   m_pView->ShowHistoryTool();
}
void CReviewInterface::IDL2P_OpenHWSettingTool()
{
   m_pView->ShowHWSettingMode();
}
BOOL CReviewInterface::IDL2P_IsManualProcessMode()
{
   return IsManualProcessMode();
}
int CReviewInterface::IDHM2P_InitReviewCamera()
{
   return InitReviewCamera();
}
void CReviewInterface::IDHM2P_DeinitReviewCamera()
{
   DeinitReviewCamera();
}
int CReviewInterface::IDHM2P_ConnectReviewCamera()
{
   return ConnectReviewCamera();
}
void CReviewInterface::IDHM2P_DisconnectReviewCamera()
{
   DisconnectReviewCamera();
}
void CReviewInterface::IDHM2P_ClearCameraControlObserverVector()
{
   ClearCameraControlObserverVector();
}
int CReviewInterface::IDHM2P_InitAFMControl()
{
   return InitAFMControl();
}
void CReviewInterface::IDHM2P_DeinitAFMControl()
{
   DeinitAFMControl();
}
int CReviewInterface::IDHM2P_InitAlignCamera()
{
   return InitAlignCamera();
}
void CReviewInterface::IDHM2P_DeinitAlignCamera()
{
   DeinitAlignCamera();
}
BOOL CReviewInterface::IDHM2P_IsManualProcessMode()
{
   return IsManualProcessMode();
}
//181203
@@ -8846,6 +9209,11 @@
   SetCurrentWsiMode(nMode);
}
void CReviewInterface::ISP2P_InitAlignCamera()
{
   InitAlignCamera();
}
int CReviewInterface::IWC2P_GetWsiType()
{
   return GetCurrentWsiMode();