123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518 |
- #pragma once
- #include <vector>
- #include <string>
- #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:
- /// <summary>
- /// 获取设备信息
- /// </summary>
- /// <returns></returns>
- long GetDeviceInfo(DEVICE_INFO_STRUCT &info);
- /// <summary>
- /// 设置红光
- /// </summary>
- /// <param name="iCameraId">相机Id</param>
- /// <param name="LightValue">灯光值</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long SetRedLight(int iCameraId,int LightValue);
- /// <summary>
- /// 设置绿光
- /// </summary>
- /// <param name="LightValue">灯光值</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long SetGreenLight(int iCameraId, int LightValue);
- /// <summary>
- /// 设置蓝光
- /// </summary>
- /// <param name="iCameraId">相机Id</param>
- /// <param name="LightValue">灯光值</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long SetBlueLight(int iCameraId, int LightValue);
- /// <summary>
- /// 设置点光
- /// </summary>
- /// <param name="iCameraId">相机Id</param>
- /// <param name="LightValue">灯光值</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long SetPointLight(int iCameraId, int LightValue);
- /// <summary>
- /// 获取灯光值
- /// </summary>
- /// <param name="iCameraId">相机Id</param>
- /// <param name="redLightValue">红光。值为-1时,表示没有该灯</param>
- /// <param name="greenLightValue">绿光。值为-1时,表示没有该灯</param>
- /// <param name="blueLightValue">蓝光。值为-1时,表示没有该灯</param>
- /// <param name="pointLightValue">点光。值为-1时,表示没有该灯</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetLight(int iCameraId, int &redLightValue, int &greenLightValue, int &blueLightValue,int &pointLightValue);
- /// <summary>
- /// 获取相机图像。调用后会阻塞,直到有新的相机图像时才返回
- /// </summary>
- /// <param name="iCameraId">相机Id</param>
- /// <param name="image"></param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GrabImage(int iCameraId, ImageInfo& image);
- /// <summary>
- /// 获取CPK数据信息
- /// </summary>
- /// <param name="CpkList">CPK数据</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetCpkList(std::vector<CPK_LIST_STRUCT> &CpkList);
- /// <summary>
- /// 读取表中指定GroupId的配置信息
- /// </summary>
- /// <param name="iGroupId">组Id</param>
- /// <param name="strTableName">表名</param>
- /// <param name="vecConfig">返回的配置信息</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long LoadConfigDB(string strTableName, vector<int> iGroupId, vector<CONFIG_BASE_STRUCT>& vecConfig);
- /// <summary>
- /// 保存配置信息
- /// </summary>
- /// <param name="strTableName">表名</param>
- /// <param name="vecConfig">要保存的配置信息</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long SaveConfigDB(string strTableName, vector<CONFIG_BASE_STRUCT> vecConfig);
- /// <summary>
- /// 获取相机列表
- /// </summary>
- /// <param name="vecCamera">相机列表</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetCameraList(vector<CameraInfo>& vecCamera);
- /// <summary>
- /// 获取告警信息
- /// </summary>
- /// <param name="alarmList">告警列表</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetAlarmList(vector<ALARM_LIST_STRUCT>& alarmList);
- /// <summary>
- /// 相机移动某个位置
- /// </summary>
- /// <param name="iCameraId">相机Id</param>
- /// <param name="x">图像中的X像素坐标</param>
- /// <param name="y">图像中的y像素坐标</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long CameraMove(int iCameraId, double x, double y);
- /// <summary>
- /// 相机移动到某个位置
- /// </summary>
- /// <param name="iCameraId">相机Id</param>
- /// <param name="x">图像中的X像素坐标</param>
- /// <param name="y">图像中的y像素坐标</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long CameraMoveTo(int iCameraId, double x, double y);
- /// <summary>
- /// 像素值转为物理位置坐标
- /// </summary>
- /// <param name="iCameraId">相机Id</param>
- /// <param name="inX">图像中的X像素坐标X</param>
- /// <param name="inY">图像中的Y像素坐标</param>
- /// <param name="outX">转换后的物理X坐标。单位微米</param>
- /// <param name="outY">转换后的物理Y坐标。单位微米</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long PixelToPos(int iCameraId, double inX, double inY,double &outX,double &outY);
- #pragma region 晶圆接口
- /// <summary>
- /// 获取所有晶圆信息
- /// </summary>
- /// <param name="stPointInfo">晶圆信息</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetWaferAllPointInfo(vector<WAFER_MATRIX_POINT_INFO_STRUCT>& stPointInfo);
- /// <summary>
- /// 获取晶环尺寸
- /// </summary>
- /// <param name="iSize">获取到的尺寸</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetWaferSize(int& iSize);
- /// <summary>
- /// 获取晶圆尺寸
- /// </summary>
- /// <param name="iLong">长</param>
- /// <param name="iWide">宽</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetDieSize(int &iLong,int &iWide);
- /// <summary>
- /// 移动到指定的点
- /// </summary>
- /// <param name="iDieIndex"></param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long MoveWaferToPoint(int iDieIndex);
- /// <summary>
- /// 从底层获取模板图片
- /// </summary>
- /// <param name="image">获取到的图片</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetWaferRefImage(ImageInfo& image);
- /// <summary>
- /// 获取晶圆台角度
- /// </summary>
- /// <param name="angle">获取到的角度</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetWaferTableAngle(double &angle);
- /// <summary>
- /// 设置矩形边界
- /// </summary>
- /// <param name="nDieMatrixId">矩阵Id</param>
- /// <param name="row1">左上角行号</param>
- /// <param name="col1">左上角列号</param>
- /// <param name="row2">右下角行号</param>
- /// <param name="col2">右下触目列号</param>
- /// <returns></returns>
- long SetWaferRectBorder(int nDieMatrixId,int row1,int col1,int row2,int col2);
- #pragma endregion
- #pragma region 华夫盒接口
- /// <summary>
- /// 获取所有晶圆信息
- /// </summary>
- /// <param name="stPointInfo">晶圆信息</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetWafflePackAllPointInfo(vector<WAFFLE_MATRIX_POINT_STRUCT>& stPointInfo);
- /// <summary>
- /// 移动到指定的点
- /// </summary>
- /// <param name="iDieIndex"></param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long MoveWafflePackToPoint(int iDieIndex);
- /// <summary>
- /// 从底层获取模板图片
- /// </summary>
- /// <param name="image">获取到的图片</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetWafflePackRefImage(ImageInfo& image);
- /// <summary>
- /// 设置矩形边界
- /// </summary>
- /// <param name="nPackMatrixId">华夫盒矩阵 Id</param>
- /// <param name="nDieMatrixId">矩阵Id</param>
- /// <param name="row1">左上角行号</param>
- /// <param name="col1">左上角列号</param>
- /// <param name="row2">右下角行号</param>
- /// <param name="col2">右下触目列号</param>
- /// <returns></returns>
- long SetWafflePackRectBorder(int nPackMatrixId,int nDieMatrixId, int row1, int col1, int row2, int col2);
- #pragma endregion
- #pragma region 载具物料接口
- /// <summary>
- /// 获取所有晶圆信息
- /// </summary>
- /// <param name="stPointInfo">晶圆信息</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetBondAllPointInfo(vector<POINT_INFO_STRUCT>& stPointInfo);
- /// <summary>
- /// 移动到指定的点
- /// </summary>
- /// <param name="iDieIndex"></param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long MoveBondToPoint(int iDieIndex);
- /// <summary>
- /// 从底层获取模板图片
- /// </summary>
- /// <param name="image">获取到的图片</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetBondRefImage(ImageInfo& image);
- /// <summary>
- /// 设置矩形边界
- /// </summary>
- /// <param name="nPackMatrixId">华夫盒矩阵 Id</param>
- /// <param name="nDieMatrixId">矩阵Id</param>
- /// <param name="row1">左上角行号</param>
- /// <param name="col1">左上角列号</param>
- /// <param name="row2">右下角行号</param>
- /// <param name="col2">右下触目列号</param>
- /// <returns></returns>
- long SetBondRectBorder(int nPackMatrixId, int nDieMatrixId, int row1, int col1, int row2, int col2);
- #pragma endregion
- #pragma region 料盒类
- /// <summary>
- /// 获取所有料盒信息
- /// </summary>
- /// <param name="stPointInfo">晶圆信息</param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long GetMaterialBoxAllPointInfo(vector<MATERIAL_BOX_STRUCT>& stPointInfo);
- /// <summary>
- /// 移动到指定的层
- /// </summary>
- /// <param name="iLayers"></param>
- /// <returns>成功返回0,否则返回错误码</returns>
- long MoveMaterialBoxToiLayers(int iLayers);
- #pragma endregion
- //long GetErrorStatistic(long sTime,long eTime,vector<ALARM_LIST_STRUCT>& alarmList);
- };
|