| | |
| | | { |
| | | if (pParameter == NULL) return; |
| | | |
| | | CString strMessage = ""; |
| | | |
| | | CDiagnosisProcessData* pProcessData = static_cast<CDiagnosisProcessData*>(pParameter); |
| | | int nProcessMode = pProcessData->nProcessMode; |
| | | |
| | |
| | | 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(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; |
| | | |
| | | //#3514_LYW_CF AOI Review 자가진단 기능 개선_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: |
| | |
| | | int CDiagnosisProcessor::ProcessAll() |
| | | { |
| | | if (IsCommandStop()) return 1; |
| | | |
| | | CString strMessage = ""; |
| | | |
| | | m_pDP2P->IDP2P_UpdateDialog(7);//WSI Result 칸 초기화 |
| | | //if (m_pDP2P == NULL) return 0; |
| | |
| | | m_pDP2P->IDP2P_SetDialogTap(1); |
| | | ProcessFlatness(); |
| | | |
| | | Sleep(2000); |
| | | //#3514_LYW_CF AOI Review 자가진단 기능 개선_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); |
| | | } |
| | | //#3514_LYW_CF AOI Review 자가진단 기능 개선_START |
| | | |
| | | //컴플릿트 신호 보내기 |
| | | m_pDP2P->IDP2P_DiagnosisSendCompleteSig(); |
| | | m_pManager->m_bProcessAll = false; |
| | | |
| | | return 1; |
| | |
| | | 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 (1500 <= GetTickCount() - stTime) |
| | | { |
| | | break; |
| | | } |
| | |
| | | |
| | | } |
| | | m_pDP2P->IDP2P_SetAFMTracking(nSelModuleIndex, TRUE); |
| | | //#3514_LYW_CF AOI Review 자가진단 기능 개선_START |
| | | //Sleep(1000); |
| | | Sleep(1000); |
| | | //#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); |
| | | |
| | |
| | | } |
| | | 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) |
| | |
| | | int stTime = GetTickCount(); |
| | | while (1) |
| | | { |
| | | if (10000 <= GetTickCount() - stTime) |
| | | //#3514_LYW_CF AOI Review 자가진단 기능 개선_START |
| | | //if (10000 <= GetTickCount() - stTime) |
| | | if (11000 <= GetTickCount() - stTime) |
| | | //#3514_LYW_CF AOI Review 자가진단 기능 개선_END |
| | | { |
| | | break; |
| | | } |
| | |
| | | { |
| | | 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(); |
| | |
| | | { |
| | | // 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); |
| | | } |
| | | |
| | | 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. 모터를 이동 |
| | |
| | | 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; |
| | |
| | | |
| | | 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; |