#pragma once #include #include #ifdef INTERFACE_DLL #define INTERFACE_API __declspec(dllexport) #else #define INTERFACE_API #endif using namespace std; // 图像数据类型,指向内存中的图像二进制数据 typedef unsigned char* ImageDataPtr; typedef struct { double x; double y; }XY_DOUBLE_STRUCT; typedef struct { long x; long y; }XY_LONG_STRUCT; typedef struct { double x; double y; double a; //角度 }X_Y_ANGLE_STRUCT; enum DEVICE_STATUS { IDLE,//停机待机 RUNING,//生产 CALIB,//校准 WARN,//报警 FAULT, //故障 DIAGNOSE//诊断 }; enum CONNECT_STATUS { NO_CONNECT,//未连接 CONNECT_ING,//连接中 CONNECT_OK,//连接成功 }; typedef struct { string name; //设备名称 string type; //设备类型 DEVICE_STATUS deveicStatus; //设备状态 string product; //产品批号 CONNECT_STATUS connectStatus; //连接状态 }DEVICE_INFO_STRUCT; enum MATERIAL_TYPE { MATERIAL_WAFER,//晶圆 MATERIAL_WAFFLE,//华夫盒 MATERIAL_BOX,//料盒 MATERIAL_BOND //载具物料 }; typedef struct { int iCameraId; // 相机Id string name; // 相机名称 MATERIAL_TYPE eType; //物料类型 }CameraInfo; enum ImageFormat { GRAY8 = 0, // 灰度图,色值0~255 Format_Grayscale8 RGB888, // 每个像素 24 位,顺序是 0xRRGGBB,没有 Alpha 通道 Format_RGB888 ARGB8888, // 带有 Alpha 通道的 32 位像素格式,顺序是 0xAARRGGBB RGB32, // 每个像素 32 位,其中包含了 RGB 颜色信息,顺序通常是 0xAARRGGBB(最高字节为 Alpha 通道,但被忽略,因为 Alpha 通道总是视为 0xFF) YUV422, // YUV4:2:2 }; /** * @brief 存储图像信息的结构 */ typedef struct { int width; // 图像宽度 int height; // 图像高度 int channel; // 图像通道数 ImageFormat format; // 图像格式 ImageDataPtr data; // 图像数据 }ImageInfo; enum PICK_DIE_STATUS { DIE_EXIST,/*原来的*/ PICK_ING,/*正在取*/ NO_EXIST,/*已取走*/ SKIP_DIE,/*跳过的点*/ EDGE_DIE /*边缘无效*/ }; typedef struct { int nDieMatrixId; //晶圆矩阵Id int nDieRow; //固晶点在矩阵中所在行 int nDieCol; //固晶点在矩阵中所在列 int iDieIndex; //所在Point点ID bool bDisable; //不可用点,等同于无效点 PICK_DIE_STATUS eStatus; //晶片状态 XY_DOUBLE_STRUCT stPosition; //程序设置的位置 } WAFER_MATRIX_POINT_INFO_STRUCT; typedef struct _WAFFLE_MATRIX_POINT_STRUCT { int nPackMatrixId; //华夫盒矩阵 Id 第个Id表示一种晶圆 int nPackRow; //华夫盒矩阵行数 int nPackCol; //华夫盒矩阵列数 int nDieMatrixId; //晶圆矩阵Id int nDieRow; //固晶点在矩阵中所在行 int nDieCol; //固晶点在矩阵中所在列 int iDieIndex; //当前Point在pcb中的序号 bool bDisable; //不可用晶片 PICK_DIE_STATUS eStatus; //晶片状态 XY_DOUBLE_STRUCT stPosition; //程序设置的位置 } WAFFLE_MATRIX_POINT_STRUCT; //固晶点 typedef struct _BOND_INDEX_STRUCT { //UINT iProductId = 1; //固晶点所在产品Id int iPcbMatId = 1; //固晶点所在PCB Id int iPcbRow = 1; //固晶点在PCB中所在行 int iPcbCol = 1; //固晶点在PCB中所在列 int iPtMatId = 1; //固晶点所在Pt矩阵Id int iPtRow = 1; //固晶点在矩阵中所在行 int iPtCol = 1; //固晶点在矩阵中所在列 int iIndex = 1; //当前Point在整个Bond矩阵中的序号 } BOND_MATRIX_POINT_INFO_STRUCT; //固晶点 enum DIE_STATUS { NO_PICK = 0, /*未取晶*/ WAF_PICK_DONE, /*已从晶片台取晶*/ TRANSFER_BOND_DONE, /*已将晶片放到中转台*/ TRANSFER_PICK_DONE, /*已从中转台取晶*/ LOOKUP_CALIB_DONE, /*已上视校准*/ BOND_DONE, /*已固晶*/ BOND_DEL /*不固晶点*/ }; //过程产生的关联数据 typedef struct { //流程过程中的状态数据,不保存到数据库中 DIE_STATUS bDieStatus; //固晶状态 bool bAlnStatus; //对点状态,是否已对点 bool bIsCheck; //是否固后检测完成 X_Y_ANGLE_STRUCT stLookUpOffset; //上视拍照偏差结果 XY_DOUBLE_STRUCT stSetBondPosition; //程序设置的固晶位置 XY_DOUBLE_STRUCT stAlnBondPosition; //对点后的固晶位置 XY_DOUBLE_STRUCT stAlnOffset; //固晶点对点偏移 double dAlnAngle; //对点角度 XY_DOUBLE_STRUCT stCheckOffset; //固后检测结果 double dCheckAngle; //固后检测角度 } BOND_STATUS_STRUCT; typedef struct { BOND_MATRIX_POINT_INFO_STRUCT stIndex; BOND_STATUS_STRUCT stBondStatus; //PROCESS_INFO_STRUCT stBondInfo; } POINT_INFO_STRUCT; typedef struct { int iLayersTotal; //总层数 int iTopLev; //最上层高度 int iBottomLev; //最下层高度 XY_DOUBLE_STRUCT stPos; //料盒位置 }MATERIAL_BOX_STRUCT; typedef struct { int Lot; //批次号 int PtIndex; //固晶点编号 int Attribute; //0表示正常数据;1表示接手动允许数据;2表示跳过数据。其它无意义 int X_Offset; //X方向偏差 int X_RefMin; //X方向参考范围小值 int X_RefMax; //X方向参考范围大值 int Y_Offset; //Y方向偏差 int Y_RefMin; //Y方向参考范围小值 int Y_RefMax; //Y方向参考范围大值 int Theta_Offset; //Theta方向偏差 int Theta_RefMin; //Theta方向参考范围小值 int Theta_RefMax; //Theta方向参考范围大值 long Time; //加工时间 } CPK_LIST_STRUCT; typedef struct _CONFIG_BASE_STRUCT { int iGroupId; string strName; string strDescribe; int iUserGrade; int iChangeFlag; string strValue; string strType; string strDefult; string strLowerLimit; string strUpperLimit; string strUnit; }CONFIG_BASE_STRUCT; enum LogLevel { Info, Error, Warn, Debug, Fatal, }; typedef struct { LogLevel iLevel; //告警级别 int iId; //告警Id string strInfo; //告警信息 long lTime; //告警时间 }ALARM_LIST_STRUCT; typedef struct { int iBlackNum; //阻塞次数 int iId; //告警Id string strInfo; //告警信息 long lTime; //告警时间 }ERROR_STATISTIC_STRUCT; class INTERFACE_API CInterface { public: /// /// 获取设备信息 /// /// long GetDeviceInfo(DEVICE_INFO_STRUCT &info); /// /// 设置红光 /// /// 相机Id /// 灯光值 /// 成功返回0,否则返回错误码 long SetRedLight(int iCameraId,int LightValue); /// /// 设置绿光 /// /// 灯光值 /// 成功返回0,否则返回错误码 long SetGreenLight(int iCameraId, int LightValue); /// /// 设置蓝光 /// /// 相机Id /// 灯光值 /// 成功返回0,否则返回错误码 long SetBlueLight(int iCameraId, int LightValue); /// /// 设置点光 /// /// 相机Id /// 灯光值 /// 成功返回0,否则返回错误码 long SetPointLight(int iCameraId, int LightValue); /// /// 获取灯光值 /// /// 相机Id /// 红光。值为-1时,表示没有该灯 /// 绿光。值为-1时,表示没有该灯 /// 蓝光。值为-1时,表示没有该灯 /// 点光。值为-1时,表示没有该灯 /// 成功返回0,否则返回错误码 long GetLight(int iCameraId, int &redLightValue, int &greenLightValue, int &blueLightValue,int &pointLightValue); /// /// 获取相机图像。调用后会阻塞,直到有新的相机图像时才返回 /// /// 相机Id /// /// 成功返回0,否则返回错误码 long GrabImage(int iCameraId, ImageInfo& image); /// /// 获取CPK数据信息 /// /// CPK数据 /// 成功返回0,否则返回错误码 long GetCpkList(std::vector &CpkList); /// /// 读取表中指定GroupId的配置信息 /// /// 组Id /// 表名 /// 返回的配置信息 /// 成功返回0,否则返回错误码 long LoadConfigDB(string strTableName, vector iGroupId, vector& vecConfig); /// /// 保存配置信息 /// /// 表名 /// 要保存的配置信息 /// 成功返回0,否则返回错误码 long SaveConfigDB(string strTableName, vector vecConfig); /// /// 获取相机列表 /// /// 相机列表 /// 成功返回0,否则返回错误码 long GetCameraList(vector& vecCamera); /// /// 获取告警信息 /// /// 告警列表 /// 成功返回0,否则返回错误码 long GetAlarmList(vector& alarmList); /// /// 相机移动某个位置 /// /// 相机Id /// 图像中的X像素坐标 /// 图像中的y像素坐标 /// 成功返回0,否则返回错误码 long CameraMove(int iCameraId, double x, double y); /// /// 相机移动到某个位置 /// /// 相机Id /// 图像中的X像素坐标 /// 图像中的y像素坐标 /// 成功返回0,否则返回错误码 long CameraMoveTo(int iCameraId, double x, double y); /// /// 像素值转为物理位置坐标 /// /// 相机Id /// 图像中的X像素坐标X /// 图像中的Y像素坐标 /// 转换后的物理X坐标。单位微米 /// 转换后的物理Y坐标。单位微米 /// 成功返回0,否则返回错误码 long PixelToPos(int iCameraId, double inX, double inY,double &outX,double &outY); #pragma region 晶圆接口 /// /// 获取所有晶圆信息 /// /// 晶圆信息 /// 成功返回0,否则返回错误码 long GetWaferAllPointInfo(vector& stPointInfo); /// /// 获取晶环尺寸 /// /// 获取到的尺寸 /// 成功返回0,否则返回错误码 long GetWaferSize(int& iSize); /// /// 获取晶圆尺寸 /// /// 长 /// 宽 /// 成功返回0,否则返回错误码 long GetDieSize(int &iLong,int &iWide); /// /// 移动到指定的点 /// /// /// 成功返回0,否则返回错误码 long MoveWaferToPoint(int iDieIndex); /// /// 从底层获取模板图片 /// /// 获取到的图片 /// 成功返回0,否则返回错误码 long GetWaferRefImage(ImageInfo& image); /// /// 获取晶圆台角度 /// /// 获取到的角度 /// 成功返回0,否则返回错误码 long GetWaferTableAngle(double &angle); /// /// 设置矩形边界 /// /// 矩阵Id /// 左上角行号 /// 左上角列号 /// 右下角行号 /// 右下触目列号 /// long SetWaferRectBorder(int nDieMatrixId,int row1,int col1,int row2,int col2); #pragma endregion #pragma region 华夫盒接口 /// /// 获取所有晶圆信息 /// /// 晶圆信息 /// 成功返回0,否则返回错误码 long GetWafflePackAllPointInfo(vector& stPointInfo); /// /// 移动到指定的点 /// /// /// 成功返回0,否则返回错误码 long MoveWafflePackToPoint(int iDieIndex); /// /// 从底层获取模板图片 /// /// 获取到的图片 /// 成功返回0,否则返回错误码 long GetWafflePackRefImage(ImageInfo& image); /// /// 设置矩形边界 /// /// 华夫盒矩阵 Id /// 矩阵Id /// 左上角行号 /// 左上角列号 /// 右下角行号 /// 右下触目列号 /// long SetWafflePackRectBorder(int nPackMatrixId,int nDieMatrixId, int row1, int col1, int row2, int col2); #pragma endregion #pragma region 载具物料接口 /// /// 获取所有晶圆信息 /// /// 晶圆信息 /// 成功返回0,否则返回错误码 long GetBondAllPointInfo(vector& stPointInfo); /// /// 移动到指定的点 /// /// /// 成功返回0,否则返回错误码 long MoveBondToPoint(int iDieIndex); /// /// 从底层获取模板图片 /// /// 获取到的图片 /// 成功返回0,否则返回错误码 long GetBondRefImage(ImageInfo& image); /// /// 设置矩形边界 /// /// 华夫盒矩阵 Id /// 矩阵Id /// 左上角行号 /// 左上角列号 /// 右下角行号 /// 右下触目列号 /// long SetBondRectBorder(int nPackMatrixId, int nDieMatrixId, int row1, int col1, int row2, int col2); #pragma endregion #pragma region 料盒类 /// /// 获取所有料盒信息 /// /// 晶圆信息 /// 成功返回0,否则返回错误码 long GetMaterialBoxAllPointInfo(vector& stPointInfo); /// /// 移动到指定的层 /// /// /// 成功返回0,否则返回错误码 long MoveMaterialBoxToiLayers(int iLayers); #pragma endregion //long GetErrorStatistic(long sTime,long eTime,vector& alarmList); };