You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

139 lines
4.7 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#ifndef _INCLUDE_COREWORK_TEST_H
#define _INCLUDE_COREWORK_TEST_H
#include "skt.h"
#include "ipvar.h"
#include "sysapi.h"
#include "corework.h"
#include "user.h"
#include <string>
#define TESTCT 100000 //初始测试CT
using std::string;
class CProduct;
class CTest
{
public:
TestMachine _data; //治具数据
CProduct* _p; //产品数据
CTest();
~CTest(void);
cstr getAte() { return _data.ate; }
int getIndex() { return _index; }
int getSocket() { return _socket; }
int getStatus() { return _data.status; }
void loadCounter();
void saveCounter();
void resetCounter();
void Open(const char* pszip = 0); //服务端IP
void Close(); //关闭
void Connect(); //手动连接 -- 由线程执行
void Process(); //其它处理 -- 由线程执行
void RecvMsg(); //接收消息 -- 由线程执行
ulong startCT() { return _startct; }
ulong lastCT() { return _data.lastct; }
bool IsReady() { return TestIdle == _data.status; }
bool IsRunning(){ return TestRunning == _data.status; }
bool Enabled() { return 1 == _data.benable; }
bool IsOpen() { return _skt != INVALID_SKT; }
bool IsConn() { return SOCKET_CONNECTED == _status; }
bool IsRegOk() { return 0 == _regtm; }
bool IsNormal() { return SOCKET_CONNECTED == _status && 0 == _regtm; } //是否可以正常使用
//设置下一次放入产品不开始测试 -- 用于缓存
void setNextNoTest() { _notest = true; }
bool IsNextNoTest() { return _notest; }
void PutProduct(CProduct* p); //放入产品
int SetVarStatus(const char* szvar);
//外部调用,不可用遍历线程调以下接口
int StartTest(CProduct* p, const char* machine, const char* pszcfg, const char* pszcfg2,
const char* site, const char* project, int bmes, int bmtcp, int bdualmode, const char* sublotname, int bupnoise);
int Home();
int Reset();
int Pause(int bpause = 1);
int EnableGrip(int benable = 1);
int SendGR(const char* s);
//获取测试项 返回字符串长度
int getRusult() { return _result; }
int GetResultCsvInfo(char* pbuffer = 0, int nsize = 0);
int GetResultFailInfo(char* pbuffer = 0, int nsize = 0);
int GetResultTestInfo(char* pbuffer = 0, int nsize = 0);
void operator =(CTest &r);
protected:
void setReply() { sys_SetEvent(_hReply); }
void resetReply() { sys_ResetEvent(_hReply); }
bool waitReply() { return 0 == sys_WaitForSingleObject(_hReply, 3000); }
bool IsReplyed() { return 0 == sys_WaitForSingleObject(_hReply, 0); }
void unlock() { sys_SetEvent(_hSend); }
bool lock() { return 0 == sys_WaitForSingleObject(_hSend, 1000); }
bool trylock() { return 0 == sys_WaitForSingleObject(_hSend, 0); }
void ClearFlag(); //清空标识
void ChkRegist(); //检测注册超时
void QueryStatus(); //查询治具状态
void ChkReplyTimeout(); //检测回复超时
void UpdateStatus(TestStatus status); //更新治具状态
int SendMsg(const char *pszFormat, ...); //发送消息
int FindEnd(char* pszmsg); //查找结束符,并清零
void ParseMsg(char* pszmsg); //解析并处理消息
void ParseRegister(char* pszcmd); //解析注册消息
void ParseStatusReply(char* pszcmd); //治具状态回复
void ParseStartReply(char* pszcmd); //启动测试回复
void ParseResultReply(char* pszcmd); //询问结果回复
void ParseResult(char* pszcmd); //解析结果
void ParseErrorReply(char* pszcmd); //错误代码回复
void ParseIntReply(char* pszcmd); //结果回复
void ParseWriteLog(char* pszcmd); //解析测试日志
void ParseGR(char* pszmsg); //解析视觉指令
void ParseRIO(char* pszmsg); //远程读取IO
void ParseWIO(char* pszmsg); //远程写入IO
void CalcRowColumn(int takeindex, char* rowcol); //有索引值计算行列
private:
int _index; //治具索引
int _cmdres; //指令返回结果
uint _startct; //开始测试时间
uint _qstatus; //查询状态时间
uint _regtm; //连接上2s内必须注册否则断开
uint _qstart; //发送指令计时
Handle _hReply; //接收返回完成
Handle _hSend; //发送事件
Handle _hSection; //临界区
ipvar* _pvar; //保存状态
bool _notest; //本次不测试,仅用于缓存
int _status; //连接状态
int _socket; //socket句柄
int _skt; //skt句柄
int _len; //当前消息长度
int _size; //缓冲区大小
char* _msg; //单条消息缓冲区
char _client[MAX_NAME_LEN]; //客户端ip:port
//记录信息
int _result; //1ok 0ng
string _csvInfo;
string _failItems;
string _testItems;
string _csvTitle;
char _daypath[MAX_NAME_LEN]; //按天生成的文件夹 \\20210916
};
#endif //防止重复包含