SDC C-Project CF Review 프로그램
LYW
2021-07-19 2bd50ead7f0b92fb9ed5b477b63dea8fbcf8217e
ReviewSystem/M_AutoDiagnosisManager/DiagnosisProcessor.cpp
@@ -50,6 +50,8 @@
{
   if (pParameter == NULL) return;
   CString strMessage = "";
   CDiagnosisProcessData* pProcessData = static_cast<CDiagnosisProcessData*>(pParameter);
   int nProcessMode = pProcessData->nProcessMode;
@@ -60,20 +62,69 @@
      m_pManager->m_bProcessAll = true;
      ProcessAll();
      break;
      //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
   case DiagnosisMode_Review :
      strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_Review START"));
      m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      m_pManager->m_bProcessAll = false;
      if (IsCommandStop()) return;
      m_pDP2P->IDP2P_SetDialogTap(0);
      ProcessSquareness();
      Sleep(1000);
      if (IsCommandStop()) return;
      m_pDP2P->IDP2P_SetDialogTap(1);
      ProcessFlatness();
      Sleep(1000);
      if (ProcessDiagnosisJudge() == FALSE) {
         strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
         m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      }
      strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_Review END"));
      m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      break;
   case DiagnosisMode_Wsi:
      strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_WSI START"));
      m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      m_pManager->m_bProcessAll = false;
      if (IsCommandStop()) return;
      m_pDP2P->IDP2P_UpdateDialog(7);
      ProcessWsi();
      Sleep(1000);
      if (ProcessDiagnosisJudge() == FALSE) {
         strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
         m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      }
      strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisMode_WSI END"));
      m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      break;
   case DiagnosisMode_Squareness:
      m_pManager->m_bProcessAll = false;
      ProcessSquareness();
      Sleep(1000);
      if (ProcessDiagnosisJudge() == FALSE) {
         strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
         m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      }
      break;
   case DiagnosisMode_Wsi:
      m_pManager->m_bProcessAll = false;
      ProcessWsi();
      break;
      //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
   case DiagnosisMode_Flatness:
      m_pManager->m_bProcessAll = false;
      ProcessFlatness();
      Sleep(1000);
      if (ProcessDiagnosisJudge() == FALSE) {
         strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
         m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      }
      break;
   case DiagnosisMode_Flatness_Manual:
@@ -94,6 +145,8 @@
int CDiagnosisProcessor::ProcessAll()
{
   if (IsCommandStop()) return 1;
   CString strMessage = "";
   
   m_pDP2P->IDP2P_UpdateDialog(7);//WSI Result 칸 초기화 
   //if (m_pDP2P == NULL) return 0;
@@ -114,53 +167,16 @@
   m_pDP2P->IDP2P_SetDialogTap(1);
    ProcessFlatness();
   Sleep(2000);
   //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
   //Sleep(2000);
   Sleep(1000);
   //#3407 KYH 자가진단 Judge 판정 및 알람 발생 기능 ADD START
   for (int i = 0; i < 2; i++)
   {
      int nSelModuleIndex = i;
      CDiagnosisInfo* pSettingInfo = m_pManager->GetDiagnosisInfo();
      if (pSettingInfo == NULL) {
         m_pDP2P->IDP2P_UpdateDialog(4);
         return 0;
      }
      CDiagnosisResult* pProcessResult = m_pManager->GetDiagnosisResult_Squareness(nSelModuleIndex); // 0412 kyh 직각도 측정 모듈에 대한 결과정보
      if (pProcessResult == NULL) {
         m_pDP2P->IDP2P_UpdateDialog(4);
         return 0;
      }
      CDiagnosisResult* pProcessWSIResult = m_pManager->GetDiagnosisResult_Wsi(nSelModuleIndex); // 0412 kyh WSI 측정 모듈에 대한 결과 정보
      if (pProcessWSIResult == NULL) {
         m_pDP2P->IDP2P_UpdateDialog(6);
         return 0;
      }
      CString strMessage = _T("");
      double dDate = (90 - pProcessResult->GetGantryDegree());
      if (abs(dDate) >= abs(pSettingInfo->GetJudgeData_Degree())) // 0412 kyh 직각도에서 나온 Dgree 값이 설정한 Judge 값보다 크거나 같을경우
      {
         m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // 알람 발생
         strMessage.Format(_T("[Judge Data] [Gantry %d]Diagnosis Error ! GantryDegree[%lf] Judge[%lf]"), i, dDate, pSettingInfo->GetJudgeData_Degree());
         m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      }
      if (pProcessWSIResult->getWSI_RTB() >= pSettingInfo->GetJudgeData_3Sigma() || pProcessWSIResult->getWSI_RTB() <= 0) // 0412 kyh WSI 표준편차 비교
      {
         m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // 알람 발생
         strMessage.Format(_T("[Judge Data] [WSI %d]Diagnosis Error ! WSI RTB[%lf] Judge[%lf]"), i, pProcessWSIResult->getWSI_RTB(), pSettingInfo->GetJudgeData_3Sigma());
         m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      }
   if (ProcessDiagnosisJudge() == FALSE) {
      strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
      m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
   }
   //#3407 KYH 자가진단 Judge 판정 및 알람 발생 기능 ADD END
   //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
   //컴플릿트 신호 보내기
   m_pDP2P->IDP2P_DiagnosisSendCompleteSig();
   m_pManager->m_bProcessAll = false;
   return 1;
@@ -284,7 +300,10 @@
      int stTime = GetTickCount();
      while (1)
      {
         if (11000 <= GetTickCount() - stTime)
         //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
         //if (11000 <= GetTickCount() - stTime)
         //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
         if (1000 <= GetTickCount() - stTime)
         {
            break;
         }
@@ -292,14 +311,22 @@
      }
      m_pDP2P->IDP2P_SetAFMTracking(nSelModuleIndex, TRUE);
      Sleep(1000);
      //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
      //Sleep(1000);
      Sleep(500);
      //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
      CString strimagename;
      strimagename.Format(_T("%s_Module[%d]Index[%d].bmp"), m_pManager->m_strResultImageFileName, nSelModuleIndex, nIdx);
      // find mark at panel
      double dFindPixX = 0., dFindPixY = 0.;
      if (m_pDP2P->IDP2P_FindPanelCenter(nSelModuleIndex, dFindPixX, dFindPixY, strimagename) == FALSE) continue;
      if (m_pDP2P->IDP2P_FindPanelCenter(nSelModuleIndex, dFindPixX, dFindPixY, strimagename) == FALSE) {
         strMessage.Format(_T("[CDiagnosisProcessor] find mark at panel FAIL"));
         m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
         continue;
      }
      m_pDP2P->IDP2P_SetAFMTracking(nSelModuleIndex, FALSE);
@@ -435,7 +462,10 @@
      }
      m_pDP2P->IDP2P_SetWsiManualMeasure(nSelModuleIndex, dXpos, dYpos);
      // move panel
      Sleep(2000);
      //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
      //Sleep(2000);
      Sleep(1000);
      //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
      m_pDP2P->IDP2P_MotorGo(nSelModuleIndex, dXpos, dYpos);
      if (m_pDP2P->IDP2P_IsGantryMotionEnd(nSelModuleIndex) == FALSE)
@@ -447,7 +477,10 @@
      int stTime = GetTickCount();
      while (1)
      {
         if (10000 <= GetTickCount() - stTime)
         //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
         //if (10000 <= GetTickCount() - stTime)
         if (1000 <= GetTickCount() - stTime)
         //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
         {
            break;
         }
@@ -508,8 +541,18 @@
{
   if (m_pDP2P == NULL || m_pManager == NULL) return 0;
   CString strMessage = "";
   CDiagnosisInfo * pSettingInfo = m_pManager->GetDiagnosisInfo();
   if (pSettingInfo == NULL) return 0;
   //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
   if (pSettingInfo->GetFlastnessSkipMode() == TRUE) {
      strMessage.Format(_T("[CDiagnosisProcessor] FlastnessSkipMode!"));
      m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      return 0;
   }
   //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
   int nSelModuleIndex = m_pDP2P->IDP2P_GetSelectedModuleIndex();
   int nFlatnessMode = pSettingInfo->GetFlatnessMode();
@@ -550,7 +593,10 @@
      {
         // AF Home
         m_pDP2P->IDP2P_AFMHomePosition(0);
         Sleep(5000);
         //#3514_LYW_CF AOI Review 자가진단 기능 개선_START
         //Sleep(5000);
         Sleep(1000);
         //#3514_LYW_CF AOI Review 자가진단 기능 개선_END
         m_pDP2P->IDP2P_SetAFMTracking(0, TRUE);
         Sleep(500);
      }
@@ -689,6 +735,55 @@
   return TRUE;
}
int CDiagnosisProcessor::ProcessDiagnosisJudge()
{
   for (int i = 0; i < 2; i++)
   {
      int nSelModuleIndex = i;
      CDiagnosisInfo* pSettingInfo = m_pManager->GetDiagnosisInfo();
      if (pSettingInfo == NULL) {
         m_pDP2P->IDP2P_UpdateDialog(4);
         return 0;
      }
      CDiagnosisResult* pProcessResult = m_pManager->GetDiagnosisResult_Squareness(nSelModuleIndex); // 0412 kyh 직각도 측정 모듈에 대한 결과정보
      if (pProcessResult == NULL) {
         m_pDP2P->IDP2P_UpdateDialog(4);
         return 0;
      }
      CDiagnosisResult* pProcessWSIResult = m_pManager->GetDiagnosisResult_Wsi(nSelModuleIndex); // 0412 kyh WSI 측정 모듈에 대한 결과 정보
      if (pProcessWSIResult == NULL) {
         m_pDP2P->IDP2P_UpdateDialog(6);
         return 0;
      }
      CString strMessage = _T("");
      double dDate = (90 - pProcessResult->GetGantryDegree());
      if (abs(dDate) >= abs(pSettingInfo->GetJudgeData_Degree())) // 0412 kyh 직각도에서 나온 Dgree 값이 설정한 Judge 값보다 크거나 같을경우
      {
         m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // 알람 발생
         strMessage.Format(_T("[Judge Data] [Gantry %d]Diagnosis Error ! GantryDegree[%lf] Judge[%lf]"), i, dDate, pSettingInfo->GetJudgeData_Degree());
         m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      }
      if (pProcessWSIResult->getWSI_RTB() >= pSettingInfo->GetJudgeData_3Sigma() || pProcessWSIResult->getWSI_RTB() <= 0) // 0412 kyh WSI 표준편차 비교
      {
         m_pDP2P->IDP2P_DiagnosisSendJudgeAlarm(); // 알람 발생
         strMessage.Format(_T("[Judge Data] [WSI %d]Diagnosis Error ! WSI RTB[%lf] Judge[%lf]"), i, pProcessWSIResult->getWSI_RTB(), pSettingInfo->GetJudgeData_3Sigma());
         m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      }
   }
   //#3407 KYH 자가진단 Judge 판정 및 알람 발생 기능 ADD END
   //컴플릿트 신호 보내기
   m_pDP2P->IDP2P_DiagnosisSendCompleteSig();
   return 1;
}
BOOL CDiagnosisProcessor::CalculateSquareness(int nIndex)
{
   if (m_pDP2P == NULL || m_pManager == NULL) return 0;