EdgeInspector_App/BICommon.h
@@ -11,7 +11,7 @@ #define OFFLINE_KEY 1 //OFFLINE_KEY:1是离线模式;0是在线模式 #define MINI_LED 0 //Mini车间 #define MINI_NOTCH 0 //Mini车间, 是否使用刻槽功能 #define HALCON_VISION_KEY 0 //是否启用HALCON #define HALCON_VISION_KEY 1 //是否启用HALCON #define USE_WEBSOCKET 0 //是否启用websocket(AI) #define USE_AI_DETECT 0 //是否启用AI检测 EdgeInspector_App/Data/PostProcess.cpp
@@ -656,6 +656,16 @@ int fontFace = cv::FONT_HERSHEY_TRIPLEX; double fontScale = 0.7; int thickness = 1; if (m_pHardware->m_bUse_SaveDLDefectImage==TRUE) { if (eCategory== DefectLoc_Chip|| eCategory== DefectLoc_Crack|| eCategory == DefectLoc_Burr|| eCategory == DefectLoc_In_Chip|| eCategory == DefectLoc_In_Burr|| eCategory == DefectLoc_UserDefect) { CT2CA pszConvertedAnsiDLFile(strDLFile); cv::String strDLFile(pszConvertedAnsiDLFile); cv::imwrite(strDLFile, imgTmp); } } CT2CA pszConvertedAnsiTitle(strTitle); cv::String strCVTitle(pszConvertedAnsiTitle); @@ -1462,16 +1472,19 @@ } CString strSaveImagePath; CString strSaveImageDLPath; //strSaveImagePath.Format(_T("%s\\%03d_%s_%s_%s.jpg"),m_strDefectFolder,pNewDefect->m_nIdx, g_pBase->m_strHPanelID, PANEL_SIDE[pNewDefect->m_DefectInfo.m_nSideIdx], strDefectType); strSaveImagePath.Format(_T("%s\\%s_%s_%s_%d.jpg"),m_strDefectFolder, g_pBase->m_strHPanelID, PANEL_SIDE[pDefect->m_DefectInfo.m_nSideIdx], strDefectType, pDefect->m_nIdx); CRect rectDefect; strSaveImageDLPath.Format(_T("%s\\%s_%s_%s_%d.bmp"),m_strImageDLFolder, g_pBase->m_strHPanelID, PANEL_SIDE[pDefect->m_DefectInfo.m_nSideIdx], strDefectType, pDefect->m_nIdx); CRect rectDefect; rectDefect.left = DEFECTIMAGE_WIDTH/2 - pDefect->m_DefectInfo.m_rtDefectPos_pxl.Width()/2; rectDefect.right = DEFECTIMAGE_WIDTH/2 + pDefect->m_DefectInfo.m_rtDefectPos_pxl.Width()/2; rectDefect.top = DEFECTIMAGE_HEIGHT/2 - pDefect->m_DefectInfo.m_rtDefectPos_pxl.Height()/2; rectDefect.bottom = DEFECTIMAGE_HEIGHT/2 + pDefect->m_DefectInfo.m_rtDefectPos_pxl.Height()/2; CheckDirectory(strSaveImagePath); CheckDirectory(strSaveImageDLPath); strDLFile.Format(_T("%s"), strSaveImageDLPath); // SaveDefectImage2(pNewDefect->m_Image,CSize(DEFECTIMAGE_WIDTH,DEFECTIMAGE_HEIGHT), rectDefect, strSaveImagePath); SaveDefectImage_with_Title(pDefect, CSize(DEFECTIMAGE_WIDTH,DEFECTIMAGE_HEIGHT), rectDefect, strSaveImagePath); @@ -2003,6 +2016,9 @@ m_strDefectFolder.Format(_T("%s\\IMG_DEFECT\\%s\\%s"),PATH_INSPECTION_DATA,g_pBase->m_strLoadingDay,g_pBase->m_strHPanelID); DeleteFolder(m_strDefectFolder); CheckDirectory(m_strDefectFolder,TRUE); m_strImageDLFolder.Format(_T("%s\\IMG_DEFECT_DL\\%s\\%s"), PATH_INSPECTION_DATA, g_pBase->m_strLoadingDay, g_pBase->m_strHPanelID); DeleteFolder(m_strImageDLFolder); CheckDirectory(m_strImageDLFolder, TRUE); m_strSplineFolder.Format(_T("%s\\SPLINE\\%s\\%s"),PATH_INSPECTION_DATA,g_pBase->m_strLoadingDay,g_pBase->m_strHPanelID); CheckDirectory(m_strSplineFolder); m_strFullImgeFolder.Format(_T("%s\\IMG_FULL\\%s\\%s"),PATH_INSPECTION_DATA,g_pBase->m_strLoadingDay,g_pBase->m_strHPanelID); EdgeInspector_App/Data/PostProcess.h
@@ -74,7 +74,8 @@ CString m_strSplineFolder; CString m_strFullImgeFolder; CString m_strImageMarkFolder; CString m_strImageDLFolder; CString strDLFile; void* m_pView; }; EdgeInspector_App/Define/Global_Define.h
@@ -1,4 +1,4 @@ #ifndef GLOBAL_DEFINE_H #ifndef GLOBAL_DEFINE_H #define GLOBAL_DEFINE_H #include <map> @@ -42,11 +42,11 @@ #define CHKMAX(a,b) (((a) > (b)) ? (a) : (b)) #define CHKMIN(a,b) (((a) < (b)) ? (a) : (b)) #define MAX_PANEL_SIDE 4 // 搁 荐 #define UPDN_TYPE 2 // 惑窍 鞍捞 乐绰版快 2 窍唱父 乐绰版快 1 #define MAX_PANEL_SIDE 4 // 搁 荐 #define UPDN_TYPE 2 // 惑窍 鞍捞 乐绰版快 2 窍唱父 乐绰版快 1 #define MAX_SIDE_COUNT 8 #define MAX_CORNER_DIMENSION_MEASURE_COUNT 5 #define MAX_SIDE_DIMENSION_MEASURE_COUNT 16 // 弥措 Frame 荐 父怒 #define MAX_SIDE_DIMENSION_MEASURE_COUNT 16 // 弥措 Frame 荐 父怒 #define MAX_SIDE_EXCEPTION_AREA_COUNT 32 #define MAX_SIDE_USER_DEFECT_AREA_COUNT 32 @@ -87,7 +87,7 @@ enum EmSplashCmd {emShow=0, emHide, emText}; enum ScanDirectionIns { SD_Forward = 0, SD_Backward, SD_Unknown }; // Glass 扁霖 Scan 规氢. enum ScanDirectionIns { SD_Forward = 0, SD_Backward, SD_Unknown }; // Glass 扁霖 Scan 规氢. enum DimensionDir { DIMENSION_A=0, DIMENSION_B, DIMENSION_C, DIMENSION_D,DIMENSION_A_DN, DIMENSION_B_DN, DIMENSION_C_DN, DIMENSION_D_DN, DIMENSION_NONE}; enum EM_CORNER_JUDGE {A_ZONE_CRACK=0,B_ZONE_CRACK,B_ZONE_BURR,C_ZONE_CRACK,C_ZONE_BURR, D_ZONE_CRACK, EDGE_THINCRACK, CHIP_WHITE}; @@ -188,17 +188,17 @@ #define IMAGE_WIDTH 4096 // 8192//2048 #define IMAGE_HEIGHT 1024 #define MAX_IMAGE_FRAME 160//100 #define MAX_IMAGE_FRAME_SHORT 160//100 // 弥措 橇饭烙 荐 #define MAX_IMAGE_FRAME_LONG 160//100 // 弥措 橇饭烙 荐 #define MAX_IMAGE_FRAME_SHORT 160//100 // 弥措 橇饭烙 荐 #define MAX_IMAGE_FRAME_LONG 160//100 // 弥措 橇饭烙 荐 #define MAX_SIDE_INSPECT_AREA_COUNT 12 #define MAX_IMAGE_LINE_SHORT MAX_IMAGE_FRAME_SHORT * IMAGE_HEIGHT // 弥措 扼牢荐 #define MAX_IMAGE_LINE_LONG MAX_IMAGE_FRAME_LONG * IMAGE_HEIGHT // 弥措 扼牢荐 #define MAX_IMAGE_LINE_SHORT MAX_IMAGE_FRAME_SHORT * IMAGE_HEIGHT // 弥措 扼牢荐 #define MAX_IMAGE_LINE_LONG MAX_IMAGE_FRAME_LONG * IMAGE_HEIGHT // 弥措 扼牢荐 #define MAX_IMAGE_LINE MAX_IMAGE_LINE_LONG #define MAX_LIMIT_LINE (MAX_IMAGE_FRAME - 1) * IMAGE_HEIGHT #define MAX_IMAGE_LINE_MARGIN ((MAX_IMAGE_FRAME+50) * IMAGE_HEIGHT) //(150 * IMAGE_HEIGHT) // 弥措 扼牢荐 #define MAX_IMAGE_LINE_MARGIN ((MAX_IMAGE_FRAME+50) * IMAGE_HEIGHT) //(150 * IMAGE_HEIGHT) // 弥措 扼牢荐 #define ALIGN_4BYTE(width) (width + 3)/4*4 #define PI 3.14159265358979323846 @@ -331,53 +331,53 @@ #define MAX_SIDE_INSPECT_TYPE 8 struct WSSendData { //=======================待定========================== //uint8_t operation; // 操作符 (1字节) //uint8_t operand; // 操作数 (1字节) //uint16_t blockNumber; // 图像块编号 (2字节无符号整数) //uint32_t dataOffset; // 数据偏移 (4字节无符号整数) //=======================待定========================== //uint8_t operation; // 操作符 (1字节) //uint8_t operand; // 操作数 (1字节) //uint16_t blockNumber; // 图像块编号 (2字节无符号整数) //uint32_t dataOffset; // 数据偏移 (4字节无符号整数) //===================================================== uint8_t nCheckType = 0; // 检测类型 uint8_t nRecipe = 0; // 配方 uint8_t nLineType = 0; // 线别类型 uint8_t nIndex = 0; // 图片序号 uint8_t nFrameIdx = 0; // 帧序号 uint8_t nScanIdx = 0; // 侧别 uint8_t nNGType = 0; // NG 类型 uint8_t nPosition = 0; // 位置 uint8_t nState = 0; // 状态 uint16_t nEdgeX = 0; // X方向边缘坐标 uint16_t nEdgeY = 0; // X方向边缘坐标 uint16_t nNPointY = 0; // Y方向NG区域坐标 uint16_t nWidth = 0; // 图像宽度 uint16_t nHeight = 0; // 图像高度 double dTimeStamp = 0.0; // 时间戳 uint16_t nLeft = 0; // 在原图的位置 uint16_t nTop = 0; // 在原图的位置 std::string strSN = ""; // 序列号 std::vector<char> image = {}; // 图像数据 (二进制数据) uint8_t nCheckType = 0; // 检测类型 uint8_t nRecipe = 0; // 配方 uint8_t nLineType = 0; // 线别类型 uint8_t nIndex = 0; // 图片序号 uint8_t nFrameIdx = 0; // 帧序号 uint8_t nScanIdx = 0; // 侧别 uint8_t nNGType = 0; // NG 类型 uint8_t nPosition = 0; // 位置 uint8_t nState = 0; // ״̬ uint16_t nEdgeX = 0; // X方向边缘坐标 uint16_t nEdgeY = 0; // X方向边缘坐标 uint16_t nNPointY = 0; // Y方向NG区域坐标 uint16_t nWidth = 0; // 图像宽度 uint16_t nHeight = 0; // 图像高度 double dTimeStamp = 0.0; // 时间戳 uint16_t nLeft = 0; // 在原图的位置 uint16_t nTop = 0; // 在原图的位置 std::string strSN = ""; // 序列号 std::vector<char> image = {}; // 图像数据 (二进制数据) }; struct WSReceiveData { // 定义一个表示NG位置的结构体 // 定义一个表示NG位置的结构体 struct NGPosition { uint8_t nNGType = 0; // NG 类型 uint16_t nLeft = 0; // 在原图的位置 uint16_t nTop = 0; // 在原图的位置 uint16_t nRight = 0; // 在原图的位置 uint16_t nBottom = 0; // 在原图的位置 uint8_t nNGType = 0; // NG 类型 uint16_t nLeft = 0; // 在原图的位置 uint16_t nTop = 0; // 在原图的位置 uint16_t nRight = 0; // 在原图的位置 uint16_t nBottom = 0; // 在原图的位置 }; uint8_t nRecipe = 0; // 配方 uint8_t nLineType = 0; // 线别类型 uint8_t nIndex = 0; // 图片序号 uint8_t nFrameIdx = 0; // 帧序号 uint8_t nScanIdx = 0; // 侧别 std::string strSN = ""; // 序列号 double dTimeStamp = 0.0; // 时间戳 uint8_t nGNum = 0; // NG 数量 std::vector<NGPosition> ngPosArray = {}; // NG 位置数组 uint8_t nRecipe = 0; // 配方 uint8_t nLineType = 0; // 线别类型 uint8_t nIndex = 0; // 图片序号 uint8_t nFrameIdx = 0; // 帧序号 uint8_t nScanIdx = 0; // 侧别 std::string strSN = ""; // 序列号 double dTimeStamp = 0.0; // 时间戳 uint8_t nGNum = 0; // NG 数量 std::vector<NGPosition> ngPosArray = {}; // NG 位置数组 }; #endif // GLOBAL_DEFINE_H EdgeInspector_App/Define/InspectionBase.cpp
@@ -1,4 +1,4 @@ #include "stdafx.h" #include "stdafx.h" #include "config.h" const TCHAR *PANEL_SIDE[] = {_T("A_TOP"), _T("B_TOP"), _T("C_TOP"), _T("D_TOP"),_T("A_BOT"), _T("B_BOT"), _T("C_BOT"), _T("D_BOT")}; EdgeInspector_App/Define/InspectionBase.h
@@ -1,4 +1,4 @@ // HMX64Fundamentals.h: interface for the CHMX64Fundamentals class. // HMX64Fundamentals.h: interface for the CHMX64Fundamentals class. // ////////////////////////////////////////////////////////////////////// @@ -17,17 +17,17 @@ public: CStringArray m_strCamCCA; CStringArray m_strCamCVI; int *m_pBufferSize; // Grab俊辑 Buffer狼 农扁. int *m_pBufferCount; // Grab Buffer狼 荐. int *m_pMemFrameNo; // 角力 皋葛府 橇饭烙 荐 int *m_pBufferSize; // Grab俊辑 Buffer狼 农扁. int *m_pBufferCount; // Grab Buffer狼 荐. int *m_pMemFrameNo; // 角力 皋葛府 橇饭烙 荐 int *m_pCameraPort; int *m_pFrameHeight; int *m_pFrameWidth; int *m_nBoardID; int *m_nBoardCh; AcqMode m_AcqMode; int m_nFrameDefectPixel; // 茄 Frame狼 弥措 搬窃 Pixel 荐 int m_nMaxDefect; // miniont,2011-04-28, 弥措 搬窃 俺荐 int m_nFrameDefectPixel; // 茄 Frame狼 弥措 搬窃 Pixel 荐 int m_nMaxDefect; // miniont,2011-04-28, 弥措 搬窃 俺荐 int m_nCameraCount; int m_nScanCount; int m_nThreadCount; EdgeInspector_App/Define/StatusMonitor.cpp
@@ -1,4 +1,4 @@ #include "StdAfx.h" #include "StdAfx.h" #include "StatusMonitor.h" @@ -66,13 +66,13 @@ TCHAR szTemp[MAX_PATH]; wcscpy_s(szTemp, MAX_PATH, strFolder); szTemp[strFolder.GetLength() + 1] = NULL; // NULL巩磊啊 滴俺 甸绢啊具 茄促. szTemp[strFolder.GetLength() + 1] = NULL; // NULL巩磊啊 滴俺 甸绢啊具 茄促. FileOp.hwnd = NULL; FileOp.wFunc = FO_DELETE; FileOp.pFrom = NULL; FileOp.pTo = NULL; FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI; // 犬牢皋矫瘤啊 救哆档废 汲沥 FileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOERRORUI; // 犬牢皋矫瘤啊 救哆档废 汲沥 FileOp.fAnyOperationsAborted = false; FileOp.hNameMappings = NULL; FileOp.lpszProgressTitle = NULL; EdgeInspector_App/Define/StatusMonitor.h
@@ -1,4 +1,4 @@ #pragma once #pragma once #include "Singleton.h" #include "Config.h" @@ -16,13 +16,13 @@ #include "LicenseChecker.h" /* Main Interface 狼 Instance Pointer 甫 爱绊 乐绰促. Main Interface 狼 Instance Pointer 甫 爱绊 乐绰促. UI俊辑绰 Main Interface 立辟阑 窍霸登搁 惑龋 曼炼捞骨肺, UI俊辑绰 Main Interface 立辟阑 窍霸登搁 惑龋 曼炼捞骨肺, CStatusMonitor 肺 阿 Instance 俊 立辟窍档废 窍磊 CStatusMonitor 肺 阿 Instance 俊 立辟窍档废 窍磊 UI 付促 Interface 父靛绰芭 蓖满栏聪瘪 UI 付促 Interface 父靛绰芭 蓖满栏聪瘪 */ class CStatusMonitor : public Singleton<CStatusMonitor> EdgeInspector_App/EdgeInspector_App.rcBinary files differ
EdgeInspector_App/Process/InspectCamera.cpp
@@ -4486,6 +4486,7 @@ int iFrame = stFrame.nFrameIdx; CRect rtProcessArea = rtROI; int nMinSize_X = (pNotchParam->m_nNotch_Inspect_Defect_Min_X_um / (int)m_pGlassData->GetSideData(emDim)->m_dPixelSizeX); int nMinSize_Y = (pNotchParam->m_nNotch_Inspect_Defect_Min_Y_um / (int)m_pGlassData->GetSideData(emDim)->m_dPixelSizeY); int nMinSize = 0; EdgeInspector_App/Recipe/HardwareSettings.cpp
@@ -1041,6 +1041,10 @@ m_bEnableAutoDelete = rhs.m_bEnableAutoDelete; m_strDeleteToolExePath = rhs.m_strDeleteToolExePath; m_strDeleteToolConfigPath = rhs.m_strDeleteToolConfigPath; // lwq,2025.08.04 m_bUse_SaveDLDefectImage = rhs.m_bUse_SaveDLDefectImage; } return *this; } @@ -1282,7 +1286,9 @@ str = _T("DELETETOOL_EXE_PATH"); else if ((void*)&m_strDeleteToolConfigPath == pValue) str = _T("DELETETOOL_CONFIG_PATH"); // lwq,2025.08.04 else if ((void*)&m_bUse_SaveDLDefectImage == pValue) str = _T("SAVE_DLDEFECT_IMAGE"); return str; } @@ -1465,6 +1471,11 @@ return FALSE; BasicInfoFile.GetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath, _T("")); // ly,2025.08.04 str = GetFileString((void*)&m_bUse_SaveDLDefectImage); if (str.IsEmpty() == TRUE) return FALSE; BasicInfoFile.GetItemValue((TCHAR*)(LPCTSTR)str, m_bUse_SaveDLDefectImage, FALSE); return TRUE; } @@ -1645,6 +1656,12 @@ return FALSE; Register.GetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath, _T("")); // lwq,2025.08.04 str = GetFileString((void*)&m_bUse_SaveDLDefectImage); if (str.IsEmpty() == TRUE) return FALSE; Register.GetItemValue((TCHAR*)(LPCTSTR)str, m_bUse_SaveDLDefectImage, FALSE); return TRUE; } @@ -1808,6 +1825,12 @@ return FALSE; Register.SetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath); //lwq2025.08.04 str = GetFileString((void*)&m_bUse_SaveDLDefectImage); if (str.IsEmpty() == TRUE) return FALSE; Register.SetItemValue((TCHAR*)(LPCTSTR)str, (int)m_bUse_SaveDLDefectImage); return TRUE; } @@ -1953,7 +1976,7 @@ if (str.IsEmpty() == TRUE) return FALSE; BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, (int)m_bSaveResultByHour); // ly,2025.07.07 str = GetFileString((void*)&m_bEnableAutoCopy); if (str.IsEmpty() == TRUE) @@ -1980,6 +2003,13 @@ return FALSE; BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath); //lwq,2025.08.04 str = GetFileString((void*)&m_bUse_SaveDLDefectImage); if (str.IsEmpty() == TRUE) return FALSE; BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_bUse_SaveDLDefectImage); BasicInfoFile.WriteToFile(); return TRUE; EdgeInspector_App/Recipe/HardwareSettings.h
@@ -202,6 +202,7 @@ public: BOOL m_bUse_SaveDebugImage; BOOL m_bUse_SaveDLDefectImage; public: BOOL m_bSaveResultByHour; EdgeInspector_App/View/ViewMain_HWSetting.cpp
@@ -82,7 +82,8 @@ DDX_Check(pDX,IDC_CHECK_USE_SAVE_DEBUG_IMAGE,m_pDlgHDSettingParm->m_bUse_SaveDebugImage); DDX_Check(pDX, IDC_CHECK_USE_SAVE_ALL_DMP, g_bUse_SaveAllDMP); DDX_Check(pDX, IDC_CHECK_USE_SAVE_DL_IMAGE, m_pDlgHDSettingParm->m_bUse_SaveDLDefectImage); DDX_Check(pDX, IDC_CHECK_SAVE_RESULT_BY_HOUR, m_pDlgHDSettingParm->m_bSaveResultByHour); // ly,2025.07.10 DDX_Check(pDX, IDC_CHECK_ENABLE_AUTO_COPY, m_pDlgHDSettingParm->m_bEnableAutoCopy); // ly,2025.07.07 EdgeInspector_App/resource.h
@@ -446,6 +446,8 @@ #define IDC_RDO_SIGNAL1 1181 #define IDC_CHECK_USE_SAVE_ALL_DMP 1181 #define IDC_RDO_SIGNAL2 1182 #define IDC_CHECK_USE_SAVE_ALL_DMP2 1182 #define IDC_CHECK_USE_SAVE_DL_IMAGE 1182 #define IDC_NEWPPID_NAME_TITLE 1201 #define IDC_EDIT_PPIDNEW_NAME 1202 #define IDC_BUTTON_LINK 1203