|
|
/*********************************************************************
|
|
|
*文件说明: 专案主业务模块
|
|
|
*作者: logos
|
|
|
*日期: 2016/10/19
|
|
|
*修改日志: 2016/10/19 logos 创建
|
|
|
2017/02/24 logos 修改
|
|
|
|
|
|
*PS: 可以在这里定义额外的接口供应用层调用
|
|
|
记得在def文件导出标准接口
|
|
|
脚本函数:
|
|
|
|
|
|
int wlog(string keyword, int err, string errmsg, string msg);
|
|
|
*Function: 记录日志
|
|
|
*Intput: keyword 日志类型、关键字
|
|
|
err 错误代码 无错误传0
|
|
|
errmsg 错误描述,有错误发生时才有效
|
|
|
msg 日志详细描述
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
|
|
|
int vlog(string desc, string msg);
|
|
|
*Function: 记录日志
|
|
|
*Intput: desc 日志描述
|
|
|
msg 日志详细信息
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
|
|
|
2.1.12 update
|
|
|
1. 修改aab模式错误bug
|
|
|
2. 增加开始测试给治具发送命令,增加一个字段/T1/R1/R2
|
|
|
3. 修改视觉类,可一次拍照4个,接收4次消息即可WaitM1/WaitM2
|
|
|
|
|
|
***********************************************************************/
|
|
|
#pragma once
|
|
|
#ifndef DLL_INCLUDE_SDK_COREWORK_H
|
|
|
#define DLL_INCLUDE_SDK_COREWORK_H
|
|
|
|
|
|
#ifndef WINAPI
|
|
|
#define WINAPI __stdcall
|
|
|
#endif
|
|
|
|
|
|
#ifndef EXPORT_C
|
|
|
#define EXPORT_C extern "C"
|
|
|
#endif
|
|
|
|
|
|
#ifndef MAX_BUF_LEN
|
|
|
#define MAX_BUF_LEN 256
|
|
|
#endif
|
|
|
|
|
|
#ifndef MAX_NAME_LEN
|
|
|
#define MAX_NAME_LEN 32
|
|
|
#endif
|
|
|
|
|
|
#ifndef MAX_IP_LEN
|
|
|
#define MAX_IP_LEN 16
|
|
|
#endif
|
|
|
|
|
|
struct CoreConfig
|
|
|
{//模块参数设置
|
|
|
char Config[MAX_NAME_LEN]; //配置?
|
|
|
char ConfigD[MAX_NAME_LEN]; //配置?
|
|
|
char lot[MAX_NAME_LEN]; //产品批次/料号
|
|
|
char machine[MAX_NAME_LEN]; //设备ID
|
|
|
char sitel[MAX_NAME_LEN]; //厂商
|
|
|
char project[MAX_NAME_LEN]; //项目代码
|
|
|
char sublotname[MAX_NAME_LEN]; //子产品批次/料号
|
|
|
char BinA[MAX_NAME_LEN]; //BinA信息设定值
|
|
|
char serverip[MAX_IP_LEN]; //测试服务端IP地址
|
|
|
char visionip[MAX_IP_LEN]; //视觉服务端IP地址
|
|
|
int bNodeLog; //是否记录Breakdown日志
|
|
|
int testType; //测试模式 0 默认模式 1-AAB 2-ABC
|
|
|
int bUpMes; //是否上传MES 治具用
|
|
|
int bUpMTcp; //是否打开MTCP 治具用
|
|
|
int bUpNoise; //是否上传噪音数据
|
|
|
int bSingleTestFilter; //是否开启单测试过滤
|
|
|
int bDirDate; //是否按日期生成文件夹
|
|
|
int bFourPic; //是否每次拍4个产品, 默认拍4个产品
|
|
|
int bSavePos; //是否缓存位置 默认缓存
|
|
|
int uphFrequency; //实时uph刷新频率 0-1min 1-2min 2-5min 3-6min 4-10min 5-20min
|
|
|
int b2nd; //是否为二代机
|
|
|
int bTestlog; //是否打印测试通讯日志
|
|
|
int bVisionlog; //是否打印视觉通讯日志
|
|
|
int idualindex; //分组序号 A组 1~(3-6)
|
|
|
int bPassTestB; //是否测试pass才进入B组测试
|
|
|
int bBindB; //B组是否为绑定模式 TC1->TCB1 TC2->TCB2
|
|
|
int iSimYield; //模拟测试良率 [0-100] 默认100
|
|
|
int iSimCT; //模拟测试CT 单位:秒 默认30s
|
|
|
int bSimTest1; //模拟测试机台
|
|
|
int bSimTest2;
|
|
|
int bSimTest3;
|
|
|
int bSimTest4;
|
|
|
int bSimTest5;
|
|
|
int bSimTest6;
|
|
|
};
|
|
|
|
|
|
enum TestStatus
|
|
|
{//治具状态
|
|
|
TestNoConn = 0, //未连接
|
|
|
TestRunning, //测试中
|
|
|
TestIdle, //就绪
|
|
|
TestWarn, //治具报警
|
|
|
TestHoming, //治具回原
|
|
|
};
|
|
|
|
|
|
struct TestMachine
|
|
|
{//测试治具
|
|
|
char ate[MAX_NAME_LEN]; //治具编码
|
|
|
int benable; //是否启用 1启用 0禁用
|
|
|
TestStatus status; //治具状态
|
|
|
int lastct; //最后一次CT
|
|
|
int total; //测量总数
|
|
|
int pass; //pass总数
|
|
|
float yield; //良率
|
|
|
};
|
|
|
|
|
|
enum EMapPos
|
|
|
{//产品处于什么位置?
|
|
|
LocationVacm = 0, //吸嘴
|
|
|
LocationInput, //进料仓
|
|
|
LocationOk, //ok仓
|
|
|
LocationNg1, //NG1仓
|
|
|
LocationNg2, //NG2仓
|
|
|
LocationNg3, //NG3仓
|
|
|
LocationTest, //测试治具
|
|
|
};
|
|
|
|
|
|
struct TProduct
|
|
|
{//产品数据
|
|
|
char sn[MAX_NAME_LEN]; //二维码
|
|
|
char lot[MAX_NAME_LEN]; //产品批次/料号
|
|
|
char ate1[MAX_NAME_LEN]; //治具编码1
|
|
|
char ate2[MAX_NAME_LEN]; //治具编码2 NG1次才有此编码
|
|
|
char ate3[MAX_NAME_LEN]; //治具编码3 NG2次才有此编码
|
|
|
char start[MAX_NAME_LEN]; //取料时间 YYYY/MM/DD HH:MM:SS
|
|
|
char end[MAX_NAME_LEN]; //放料时间 YYYY/MM/DD HH:MM:SS
|
|
|
char level[MAX_NAME_LEN]; //产品等级 -- 分bin使用
|
|
|
char failItems[MAX_BUF_LEN]; //测试不良项目 多项以;分割
|
|
|
int status; //最终状态 1pass 0ng
|
|
|
EMapPos pos; //当前处于哪个位置
|
|
|
int index; //对应位置的序号 比如治具第几个?料盘上的第几个?
|
|
|
int count; //测试了几次?
|
|
|
int takeIndex; //取料时在料盘中的位置
|
|
|
};
|
|
|
|
|
|
typedef void(*callback) (int mode, char* content);
|
|
|
|
|
|
//错误代码
|
|
|
enum CORE_ERR_CODE
|
|
|
{
|
|
|
ERR_NO_PRODUCT = -599, //无产品
|
|
|
ERR_EXIST_PRODUCT, //已经有产品存在
|
|
|
};
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 初始化
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI core_init();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 释放模块资源
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI core_deinit();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取版本号
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 返回当前版本号(4位整数)
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI core_version();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 设置参数
|
|
|
*Intput: cfg 参数结构体
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI core_set_cfg(CoreConfig* cfg);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取参数
|
|
|
*Intput: cfg 参数结构体
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI core_get_cfg(CoreConfig* cfg);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前测试模式 -- 通过登录用户判定
|
|
|
*Intput: NULL
|
|
|
*Output: NULL
|
|
|
*Return: 返回测试模式 字符串
|
|
|
******************************************************/
|
|
|
EXPORT_C const char* WINAPI get_test_model();
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前产品信息
|
|
|
*Intput: sn 二维码
|
|
|
pdata 缓冲区
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_product_info(const char* sn, TProduct* pdata);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 根据位置获取产品信息
|
|
|
*Intput: pos 料仓位置 EMapPos
|
|
|
index 所在位置序号
|
|
|
pdata 缓冲区
|
|
|
*Output: NULL
|
|
|
*Return: 有产品返回0,失败返回错误代码<0
|
|
|
*PS: pdata传入NULL可判断产品有无
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_product_by_pos(EMapPos pos, int index, TProduct* pdata = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取某个位置的产品列表 -- 进料仓时,sn为null
|
|
|
*Intput: pos 料仓位置 EMapPos
|
|
|
pdata 缓冲区
|
|
|
nsize 缓冲区大小
|
|
|
*Output: NULL
|
|
|
*Return: 返回当前产品数量
|
|
|
*PS:可以先传NULL进去获取数量,然后申请内存再次获取
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_product_list(EMapPos pos, TProduct* pdata = 0, int nsize = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取当前所有产品信息
|
|
|
*Intput: pdata 缓冲区
|
|
|
nsize 缓冲区大小
|
|
|
*Output: NULL
|
|
|
*Return: 返回当前产品数量
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_all_product_info(TProduct* pdata = 0, int nsize = 0);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 启用/禁用一个治具
|
|
|
*Intput: index 治具编号 [1-6]
|
|
|
benable 1启用 0禁用
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI test_enable(int index, int benable = 1);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 获取测试治具信息
|
|
|
*Intput: index 治具编号 [1-6]
|
|
|
*Output: pdata 治具信息
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI get_test_data(int index, TestMachine* pdata);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 调试一个测试治具
|
|
|
*Intput: index 治具编号 [1-6]
|
|
|
sn 产品二维码
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
*PS: 根据sn生产数据,并从1号吸嘴创建,并将数据移入治具,开始测试
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI test_debug(int index, const char* sn);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 通知一个测试回原
|
|
|
*Intput: index 治具编号 [1-6]
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI test_home(int index);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 通知一个测试复位
|
|
|
*Intput: index 治具编号 [1-6]
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI test_reset(int index);
|
|
|
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 测试Breakdown日志记录 -- 单步骤耗时日志
|
|
|
*Intput: pszt 日志标题
|
|
|
pszmsg 日志详细内容
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI vlog(const char* pszt, const char* pszmsg);
|
|
|
|
|
|
/****************************************************
|
|
|
*Function: 记录日志
|
|
|
*Intput: keyword 操作模式
|
|
|
errcode 错误代码 0无效
|
|
|
errmsg errcode!=0时的错误描述
|
|
|
msg 日志内容
|
|
|
*Output: NULL
|
|
|
*Return: 成功返回0,失败返回错误代码<0
|
|
|
******************************************************/
|
|
|
EXPORT_C int WINAPI wlog(const char* keyword, int errcode, const char* errmsg, const char* msg);
|
|
|
|
|
|
EXPORT_C int WINAPI regist_callback(callback fun);
|
|
|
#endif //防止重复包含
|