SDC C-Project CF Review 프로그램
LYW
2021-10-15 e5fa774d622d6852fe8e1f033045aed221649108
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;
      /*< LYW 20210719 : #3517 ADD 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(nProcessMode) == 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(nProcessMode) == 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(nProcessMode) == FALSE) {
         strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
         m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      }
      break;
   case DiagnosisMode_Wsi:
      m_pManager->m_bProcessAll = false;
      ProcessWsi();
      break;
      /*< LYW 20210719 : #3517 ADD End >*/
   case DiagnosisMode_Flatness:
      m_pManager->m_bProcessAll = false;
      ProcessFlatness();
      Sleep(1000);
      if (ProcessDiagnosisJudge(nProcessMode) == 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);
   /*< LYW 20210719 : #3517 ADD Start >*/
   //Sleep(2000);
   Sleep(1000);
   //0412 kyh 자가진단 Judge판정
   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("");
      //0412 kyh Judge 값에 따른 알람 발생
      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(DiagnosisMode_All) == FALSE) {
      strMessage.Format(_T("[CDiagnosisProcessor] DiagnosisJudge FAIL"));
      m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
   }
   /*< LYW 20210719 : #3517 ADD 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)
         /*< LYW 20210719 : #3517 ADD Start >*/
         //if (11000 <= GetTickCount() - stTime)
         /*< LYW 20210719 : #3517 ADD End >*/
         if (1500 <= GetTickCount() - stTime)
         {
            break;
         }
@@ -292,14 +311,22 @@
      }
      m_pDP2P->IDP2P_SetAFMTracking(nSelModuleIndex, TRUE);
      /*< LYW 20210719 : #3517 ADD Start >*/
      //Sleep(1000);
      Sleep(1000);
      /*< LYW 20210719 : #3517 ADD 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);
      /*< LYW 20210719 : #3517 ADD Start >*/
      //Sleep(2000);
      Sleep(1000);
      /*< LYW 20210719 : #3517 ADD 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)
         /*< LYW 20210719 : #3517 ADD Start >*/
         //if (10000 <= GetTickCount() - stTime)
         if (11000 <= GetTickCount() - stTime)
         /*< LYW 20210719 : #3517 ADD 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;
   /*< LYW 20210719 : #3517 ADD Start >*/
   if (pSettingInfo->GetFlastnessSkipMode() == TRUE) {
      strMessage.Format(_T("[CDiagnosisProcessor] FlastnessSkipMode!"));
      m_pDP2P->IDP2P_DisplayMessage(0, strMessage);
      return 0;
   }
   /*< LYW 20210719 : #3517 ADD End >*/
   int nSelModuleIndex = m_pDP2P->IDP2P_GetSelectedModuleIndex();
   int nFlatnessMode = pSettingInfo->GetFlatnessMode();
@@ -550,38 +593,41 @@
      {
         // AF Home
         m_pDP2P->IDP2P_AFMHomePosition(0);
         Sleep(5000);
         /*< LYW 20210719 : #3517 ADD Start >*/
         //Sleep(5000);
         Sleep(1000);
         /*< LYW 20210719 : #3517 ADD End >*/
         m_pDP2P->IDP2P_SetAFMTracking(0, TRUE);
         Sleep(500);
      }
      if (nIdx == 0)
      {
         pResultPoint[nIdx].dPosX = 657.425
            ;
         pResultPoint[nIdx].dPosY = 540.14
            ;
      }
      else if (nIdx == 1)
      {
         pResultPoint[nIdx].dPosX = 657.425
            ;
         pResultPoint[nIdx].dPosY = 2278.636
            ;
      }
      else if (nIdx == 2)
      {
         pResultPoint[nIdx].dPosX = 2096.944
            ;
         pResultPoint[nIdx].dPosY = 540.141
            ;
      }
      else if (nIdx == 3)
      {
         pResultPoint[nIdx].dPosX = 2096.944
            ;
         pResultPoint[nIdx].dPosY = 2278.636;
      }
//       if (nIdx == 0)
//       {
//          pResultPoint[nIdx].dPosX = 657.425
//             ;
//          pResultPoint[nIdx].dPosY = 540.14
//             ;
//       }
//       else if (nIdx == 1)
//       {
//          pResultPoint[nIdx].dPosX = 657.425
//             ;
//          pResultPoint[nIdx].dPosY = 2278.636
//             ;
//       }
//       else if (nIdx == 2)
//       {
//          pResultPoint[nIdx].dPosX = 2096.944
//             ;
//          pResultPoint[nIdx].dPosY = 540.141
//             ;
//       }
//       else if (nIdx == 3)
//       {
//          pResultPoint[nIdx].dPosX = 2096.944
//             ;
//          pResultPoint[nIdx].dPosY = 2278.636;
//       }
      //1. 모터를 이동
@@ -689,6 +735,61 @@
   return TRUE;
}
int CDiagnosisProcessor::ProcessDiagnosisJudge(int nMode)
{
   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("");
      if (nMode == DiagnosisMode_All || nMode == DiagnosisMode_Review || nMode == DiagnosisMode_Squareness)
      {
         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 (nMode == DiagnosisMode_All || nMode == DiagnosisMode_Wsi)
      {
         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;
@@ -787,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;