|
|
|
|
#pragma once
|
|
|
|
|
#ifndef _INCLUDE_COREWORK_MANAGE_H
|
|
|
|
|
#define _INCLUDE_COREWORK_MANAGE_H
|
|
|
|
|
#include "sysapi.h"
|
|
|
|
|
#include <list>
|
|
|
|
|
#include <hash_map>
|
|
|
|
|
#include <string>
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include "corework.h"
|
|
|
|
|
#include "simtest.h"
|
|
|
|
|
#include "vision.h"
|
|
|
|
|
#include "ipvar.h"
|
|
|
|
|
|
|
|
|
|
using std::list;
|
|
|
|
|
using std::vector;
|
|
|
|
|
using std::string;
|
|
|
|
|
using std::hash_map;
|
|
|
|
|
|
|
|
|
|
#define VACMCNT 4 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
#define TESTCNT 6 //<2F>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
#define MINAEND 3 //<2F><>СA<D0A1><41><EFBFBD>ֽ<EFBFBD>ֵ
|
|
|
|
|
#define STOCKCNT 5 //<2F>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
#define VERSION 2135 //<2F>汾<EFBFBD><E6B1BE>
|
|
|
|
|
|
|
|
|
|
#define CFG_KEY "work"
|
|
|
|
|
|
|
|
|
|
#define ins CManage::Get_Instance()
|
|
|
|
|
|
|
|
|
|
//#define REPORT(msg, ...) ins->Report(msg, __VA_ARGS__)
|
|
|
|
|
#define REPORT(msg, ...) post_message(MSG_ASCII, msg, __VA_ARGS__)
|
|
|
|
|
|
|
|
|
|
#define SPLIT "#" //<2F>ָ<EFBFBD><D6B8><EFBFBD>
|
|
|
|
|
#define REG "Register" //<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>
|
|
|
|
|
#define STATUS "Status" //<2F><>ѯ<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD>״̬
|
|
|
|
|
#define START "StartTest" //֪ͨ<CDA8>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
#define RES "Result" //<2F><>ѯ<EFBFBD><D1AF><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
#define ERR "ErrorCode" //<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<2B><><EFBFBD><EFBFBD>
|
|
|
|
|
#define GRIP "Grip" //֪ͨ<CDA8>ξߴ<DFB4>צ
|
|
|
|
|
#define PAUSE "Pause" //֪ͨ<CDA8>ξ<EFBFBD><CEBE><EFBFBD>ͣ
|
|
|
|
|
#define GR "GR" //<2F>Ӿ<EFBFBD><D3BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
#define HOME "Home" //֪ͨ<CDA8>ξ<CEBE>ԭ
|
|
|
|
|
#define RESET "Reset" //֪ͨ<CDA8>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
#define RIO "ReadIO" //<2F><>ȡIO
|
|
|
|
|
#define WIO "WriteIO" //д<><D0B4>IO
|
|
|
|
|
#define VLOG "Vlog" //<2F>ϴ<EFBFBD><CFB4><EFBFBD>־
|
|
|
|
|
#define HOMECT 60000 //<2F><><EFBFBD><EFBFBD><EFBFBD>ξ<CEBE>ԭʱ<D4AD><CAB1>
|
|
|
|
|
#define TAKECT 5000 //ȡ<>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>ʱ<EFBFBD><CAB1>
|
|
|
|
|
#define VPORT 6051 //<2F>Ӿ<EFBFBD><D3BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD>˿<EFBFBD>
|
|
|
|
|
#define VPORTEST 6081 //<2F><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˿<EFBFBD>
|
|
|
|
|
|
|
|
|
|
cstr GetTestMode(cstr p);
|
|
|
|
|
|
|
|
|
|
enum VisionSence
|
|
|
|
|
{//<2F>Ӿ<EFBFBD><D3BE>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
EVInput = 0, //M1 ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
EVHamal, //M2 <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
EVOkTray, //M3 ok<6F><6B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
EVNGTray, //M4 NG<4E><47><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
EVNGTakeOne, //M5 NGȡһ<C8A1><D2BB>һ
|
|
|
|
|
EVNGPutOne, //M6 NG<4E><47>һ<EFBFBD><D2BB>һ
|
|
|
|
|
EVTestTake, //M7 <20>궨<EFBFBD>鳡<EFBFBD><E9B3A1>
|
|
|
|
|
EVTestPut, //M8 <20>ξ߷<CEBE>
|
|
|
|
|
|
|
|
|
|
EVSize, //<2F>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct MachineInfo
|
|
|
|
|
{//<2F>ξ߽ṹ
|
|
|
|
|
TestMachine data; //<2F>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int index; //<2F>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
uint start; //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
int lastct; //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>CT
|
|
|
|
|
uint qstatus; //<2F><>ѯ״̬ʱ<CCAC><CAB1>
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct TPosxy
|
|
|
|
|
{//ȡ<>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
char sn[MAX_NAME_LEN];
|
|
|
|
|
double x;
|
|
|
|
|
double y;
|
|
|
|
|
int index;
|
|
|
|
|
|
|
|
|
|
TPosxy() { memset(this, 0, sizeof(TPosxy)); }
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct TGRMsg
|
|
|
|
|
{//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD>ξߵ<CEBE><DFB5><EFBFBD>Ϣ
|
|
|
|
|
int tindex;
|
|
|
|
|
char* s;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class CProduct
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
CProduct(int sindex = LocationInput);
|
|
|
|
|
|
|
|
|
|
int _t1; //<2F><>һ<EFBFBD><D2BB><EFBFBD>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int _t2; //<2F>ڶ<EFBFBD><DAB6><EFBFBD>
|
|
|
|
|
int _t3;
|
|
|
|
|
TProduct data;
|
|
|
|
|
|
|
|
|
|
void Clear();
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
|
|
|
|
|
int tCount() { return data.count; }
|
|
|
|
|
|
|
|
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ok
|
|
|
|
|
bool IsOk() { return 1 == data.status; }
|
|
|
|
|
|
|
|
|
|
//<2F>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
bool NeedTest(cstr s = 0) { return data.count < 3 && 0 == data.status && !IsSameBin(s); }
|
|
|
|
|
|
|
|
|
|
//<2F>Ƿ<EFBFBD>Bin<69><6E>Ϣ<EFBFBD><CFA2>ͬ
|
|
|
|
|
bool IsSameBin(cstr s) { return s && 0 == strcmp(s, data.level); }
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD>ز<EFBFBD>ģʽ<C4A3><CABD>ʶ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> -- <20><><EFBFBD>Ϳ<EFBFBD>ʼָ<CABC><D6B8>ʱ
|
|
|
|
|
cstr getRetryModelS();
|
|
|
|
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD>ز<EFBFBD>ģʽ<C4A3><CABD>ʶ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> -- <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>ʱ
|
|
|
|
|
cstr getRetryModelE();
|
|
|
|
|
|
|
|
|
|
char* Ate(); //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ξ߱<CEBE><DFB1><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
|
|
|
|
|
void SetIndex(int t); //<2F><><EFBFBD>õ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
int lastIndex();
|
|
|
|
|
|
|
|
|
|
const char* LastAte();
|
|
|
|
|
bool CanTestAAB(const char* ate);
|
|
|
|
|
bool CanTestABC(const char* ate);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class CTest;
|
|
|
|
|
class CManage
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
static CManage* Get_Instance();
|
|
|
|
|
static void ReleaseInstance();
|
|
|
|
|
|
|
|
|
|
CManage(void);
|
|
|
|
|
~CManage(void);
|
|
|
|
|
|
|
|
|
|
int Init();
|
|
|
|
|
int Deinit();
|
|
|
|
|
|
|
|
|
|
int IsRun() { return m_brun ? 1 : 0; } //<2F>ξ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//<2F>ξ<EFBFBD>ͨ<EFBFBD><CDA8>
|
|
|
|
|
int StartRun();
|
|
|
|
|
int StopRun();
|
|
|
|
|
|
|
|
|
|
cstr GetTestModel();
|
|
|
|
|
|
|
|
|
|
int SetConfig(CoreConfig* pcfg);
|
|
|
|
|
const CoreConfig* getCfg() const { return &m_cfg; }
|
|
|
|
|
void GetConfig(CoreConfig* pcfg) { memcpy(pcfg, &m_cfg, sizeof(m_cfg)); }
|
|
|
|
|
|
|
|
|
|
int SummaryLog(const char* title, const char* content);
|
|
|
|
|
int BreakdownLog(const char* psztype, const char* pszmsg);
|
|
|
|
|
int UnitTracker(const char* sn, const char* ate, const char* lot, int result, const char* RetryUsage);
|
|
|
|
|
int EventTracker(const char* keyword, int errcode, const char*errmsg, const char*msg);
|
|
|
|
|
|
|
|
|
|
int GetProduct(const char* sn, TProduct* pdata);
|
|
|
|
|
int GetAllProduct(TProduct* pdata/* = 0*/, int nsize/* = 0*/);
|
|
|
|
|
int GetProductByPos(EMapPos pos, int index, TProduct* pdata/* = 0*/);
|
|
|
|
|
int GetProductList(EMapPos pos, TProduct* pdata/* = 0*/, int nsize/* = 0*/);
|
|
|
|
|
|
|
|
|
|
int GetMachine(int index, TestMachine* pdata);
|
|
|
|
|
int TestEnable(int index, int benable);
|
|
|
|
|
int TestDebug(int index, const char* sn);
|
|
|
|
|
int TestHome(int testIndex);
|
|
|
|
|
int TestReset(int testIndex);
|
|
|
|
|
int TestClear(int testIndex);
|
|
|
|
|
|
|
|
|
|
int SendCustomCmd(const char* msg, char* res = NULL);
|
|
|
|
|
int RecvCustomCmd(const char* msg, char* res, int timeout/* = 0*/);
|
|
|
|
|
int GetCommandDesc(char* pszcmddesc);
|
|
|
|
|
|
|
|
|
|
cstr GetVersion();
|
|
|
|
|
|
|
|
|
|
cstr getBinA() { return m_cfg.BinA; } //<2F><>ȡBinA<6E><41><EFBFBD><EFBFBD>
|
|
|
|
|
cstr getLot() { return m_cfg.lot; } //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>κ<EFBFBD>
|
|
|
|
|
cstr getMachine() { return m_cfg.machine; }
|
|
|
|
|
bool NodeLog() { return 0 != m_cfg.bNodeLog; }
|
|
|
|
|
bool IsMakeDir() { return 0 != m_cfg.bDirDate; }
|
|
|
|
|
bool IsFourpic() { return 0 != m_cfg.bFourPic; }
|
|
|
|
|
bool IsSavePos() { return 0 != m_cfg.bSavePos; }
|
|
|
|
|
bool testLog() { return 0 != m_cfg.bTestlog; }
|
|
|
|
|
bool visionLog() { return 0 != m_cfg.bVisionlog; }
|
|
|
|
|
bool IsBindTest() { return 0 != m_cfg.bBindB; } //B<><42><EFBFBD>Ƿ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ģʽ TC1->TCB1 TC2->TCB2
|
|
|
|
|
bool IsPassToB() { return 0 != m_cfg.bPassTestB; } //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>pass<73>Ž<EFBFBD><C5BD><EFBFBD>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
uint getFail() { return 100 - m_cfg.iSimYield; } //ʧ<><CAA7><EFBFBD><EFBFBD>
|
|
|
|
|
uint getSimCT() { return m_cfg.iSimCT; } //ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD>Ի<EFBFBD>̨CT
|
|
|
|
|
|
|
|
|
|
//<2F>ξ<EFBFBD>ע<EFBFBD><D7A2>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξ߱<CEBE><DFB1><EFBFBD><EFBFBD>Ƿ<EFBFBD>ok
|
|
|
|
|
bool ChkAteValid(int index, const char* pszate);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><CDB8>Ӿ<EFBFBD><D3BE><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|
|
|
|
int SendTestGR(int tindex, const char* s = 0);
|
|
|
|
|
int PostReplyGR(int tindex, const char* s);
|
|
|
|
|
|
|
|
|
|
//<2F>ϱ<EFBFBD><CFB1><EFBFBD>־
|
|
|
|
|
void Report(const char *pszFormat, ...);
|
|
|
|
|
void PostWarn(const char *pszFormat, ...);
|
|
|
|
|
|
|
|
|
|
int regist_callback(callback fun);
|
|
|
|
|
|
|
|
|
|
callback get_callback()
|
|
|
|
|
{
|
|
|
|
|
return m_callback;
|
|
|
|
|
}
|
|
|
|
|
protected:
|
|
|
|
|
|
|
|
|
|
void Release();
|
|
|
|
|
void ReadConfig();
|
|
|
|
|
void RestorePos(int sindex);
|
|
|
|
|
|
|
|
|
|
//ģ<><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void MakeInput();
|
|
|
|
|
|
|
|
|
|
//ȷ<><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void Resize(vector<CProduct*>& vec, int nsize);
|
|
|
|
|
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>λ<EFBFBD><CEBB><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
|
|
|
|
|
void MakeProduct(int sindex, int index);
|
|
|
|
|
|
|
|
|
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>λ<EFBFBD><CEBB><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD>
|
|
|
|
|
void ReleaseProduct(int sindex, int index);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int GetPosxy(int sindex); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>ɾ<EFBFBD><C9BE>
|
|
|
|
|
int SetPosxy(int sindex); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int PosMap(int sindex); //ͨ<><CDA8>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD>ݼ<EFBFBD><DDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int ReleasePosxy(int sindex); //<2F>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int SetPosxy(int sindex, char* pszcmd);
|
|
|
|
|
|
|
|
|
|
void MakeDate(char* pszdate);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
|
|
|
|
|
int CreateVar(const char* pszname, const char* pszdesc, int keep = 0);
|
|
|
|
|
void SetVarInit(const char* pszname, int ival);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ipvar* getVar(const char* pszname, const char* pszdesc, bool block = true);
|
|
|
|
|
ipvar* getVar(const char* pszname, const char* pszdesc, const char* pszval);
|
|
|
|
|
|
|
|
|
|
int GetTestIndex(const char* ate); //ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2>Ի<EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
//<2F><>Ʒ
|
|
|
|
|
CProduct* GetFromInput(); //<2F>ӽ<EFBFBD><D3BD>ϲֻ<CFB2>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|
|
|
|
CProduct* FindProduct(const char* sn);
|
|
|
|
|
|
|
|
|
|
void FreeProduct(CProduct* p); //<2F>ͷŲ<CDB7>Ʒ
|
|
|
|
|
void PutToStock(int sindex, CProduct* p); //<2F><><EFBFBD><EFBFBD><EFBFBD>ϲ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
//δ<>ӱ<EFBFBD><D3B1><EFBFBD>
|
|
|
|
|
int GetVacmCount(); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int FindTest(CProduct* p, bool bchkp, int aend = TESTCNT); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD> ʧ<>ܷ<EFBFBD><DCB7><EFBFBD>0
|
|
|
|
|
int FindTestDual(CProduct* p, bool bchkp, int aend = TESTCNT); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD> ʧ<>ܷ<EFBFBD><DCB7><EFBFBD>0 -- ˫<><CBAB>ģʽ
|
|
|
|
|
|
|
|
|
|
int M1();
|
|
|
|
|
int M2();
|
|
|
|
|
int M3();
|
|
|
|
|
int M4();
|
|
|
|
|
int M5();
|
|
|
|
|
int M6();
|
|
|
|
|
int M7();
|
|
|
|
|
int M8();
|
|
|
|
|
int Test(const char* pszcmd); //<2F><><EFBFBD>Խӿ<D4BD>
|
|
|
|
|
int SimTest(int tindex, int benable);
|
|
|
|
|
int VacmReset();
|
|
|
|
|
int StockReset(int sindex);
|
|
|
|
|
int VacmTake();
|
|
|
|
|
int TestPut();
|
|
|
|
|
int TestTake();
|
|
|
|
|
int StockPut();
|
|
|
|
|
int WhereToGo();
|
|
|
|
|
int TakeFromInput(const char* sn, int vacmIndex);
|
|
|
|
|
int MovetoTest(int vacmIndex, int testIndex);
|
|
|
|
|
int MovetoVacm(int testIndex, int vacmIndex);
|
|
|
|
|
int MovetoStock(int vacmIndex, int sindex);
|
|
|
|
|
int WaitTestIdle(int testIndex, int timeout);
|
|
|
|
|
int WaitM2Result(int sindex, char* szres, int timeout);
|
|
|
|
|
|
|
|
|
|
//˫<><CBAB>ģʽ<C4A3>ӿ<EFBFBD>
|
|
|
|
|
bool NeedTestDual(CProduct* p, int t = 0);
|
|
|
|
|
void GetTestPutDual(int &v, int &t, int aend, bool bchkp = false);
|
|
|
|
|
|
|
|
|
|
bool IsAAB() { return m_cfg.testType == 1; }
|
|
|
|
|
bool IsABC() { return m_cfg.testType == 2; }
|
|
|
|
|
bool IsDefault() { return m_cfg.testType == 0; }
|
|
|
|
|
|
|
|
|
|
void GetTestTake(int &v, int &t);
|
|
|
|
|
void GetNotestPut(int &v, int &t); //<2F><><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>ס<EFBFBD>ˣ<EFBFBD><CBA3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ξ߽<CEBE><DFBD>л<EFBFBD><D0BB><EFBFBD>
|
|
|
|
|
void GetPutByTest(int &v, int t, bool bchkp);
|
|
|
|
|
void GetPutByTestB(int &v, int t, bool bchkp); //<2F><><EFBFBD>ξ<EFBFBD><CEBE>Ҳ<EFBFBD>Ʒ - B<><42>
|
|
|
|
|
void GetTestPut(int &v, int &t, bool bchkp = false);
|
|
|
|
|
|
|
|
|
|
//<2F>ӱ<EFBFBD><D3B1><EFBFBD>
|
|
|
|
|
int M1B();
|
|
|
|
|
int M2B();
|
|
|
|
|
int VacmResetB();
|
|
|
|
|
int StockResetB(int sindex);
|
|
|
|
|
int VacmTakeB();
|
|
|
|
|
int TestPutB();
|
|
|
|
|
int TestTakeB();
|
|
|
|
|
int StockPutB();
|
|
|
|
|
int WhereToGoB();
|
|
|
|
|
int TestPause(int testIndex, int bpause);
|
|
|
|
|
int GripEnable(int testIndex, int benable);
|
|
|
|
|
int CreateProductB(const char* sn, int vacmIndex);
|
|
|
|
|
int MovetoVacmB(int testIndex, int vacmIndex);
|
|
|
|
|
int MovetoStockB(int vacmIndex, int sindex);
|
|
|
|
|
|
|
|
|
|
int GetProductByPosB(EMapPos pos, int index, TProduct* pdata/* = 0*/);
|
|
|
|
|
int GetProductListB(EMapPos pos, TProduct* pdata/* = 0*/, int nsize/* = 0*/);
|
|
|
|
|
|
|
|
|
|
static int GreaterThenProduct(const void* a,const void* b);
|
|
|
|
|
|
|
|
|
|
//<2F>ξ<EFBFBD>ͨ<EFBFBD><CDA8>
|
|
|
|
|
void AcceptNew(); //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
void ProcessMsg(); //<2F><>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
|
|
|
|
void RecvTestMsg();
|
|
|
|
|
void CalcUph(); //<2F><><EFBFBD><EFBFBD>UPH
|
|
|
|
|
void UpdateVarProduct();
|
|
|
|
|
void UploadReport();
|
|
|
|
|
|
|
|
|
|
int Process(); //<2F>̺߳<DFB3><CCBA><EFBFBD>
|
|
|
|
|
static int WINAPI ThreadFun(void* param);
|
|
|
|
|
|
|
|
|
|
void ProcessSendGR();
|
|
|
|
|
static int WINAPI PoolGR(void* param);
|
|
|
|
|
|
|
|
|
|
ulong _logct; //<2F><><EFBFBD>ڼ<EFBFBD>¼<EFBFBD><C2BC>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>־ʱ<D6BE><CAB1>
|
|
|
|
|
ulong GetLastCT(ulong curct);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
static CManage *m_pInstance;
|
|
|
|
|
|
|
|
|
|
Handle m_hSection; //<2F>ٽ<EFBFBD><D9BD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
CoreConfig m_cfg;
|
|
|
|
|
|
|
|
|
|
list<char*> m_lsgMsg;
|
|
|
|
|
|
|
|
|
|
bool m_tstRun; //ת<><D7AA><EFBFBD>߳<EFBFBD><DFB3>Ƿ<EFBFBD><C7B7><EFBFBD>ִ<EFBFBD>У<EFBFBD>
|
|
|
|
|
list<TGRMsg*> m_tstMsg; //ת<><D7AA><EFBFBD><EFBFBD><EFBFBD>ξߵ<CEBE><DFB5><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ִ<EFBFBD><D6B4>
|
|
|
|
|
|
|
|
|
|
vector<CProduct*> m_vecStock[STOCKCNT]; //<2F><><EFBFBD><EFBFBD>Input OK NG1 NG2 NG3
|
|
|
|
|
CProduct** m_vacm_lst; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ
|
|
|
|
|
int m_vacm_cnt;
|
|
|
|
|
|
|
|
|
|
//<2F><>ǰ<EFBFBD><C7B0><EFBFBD>մ洢λ<E6B4A2><CEBB><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
list<TPosxy*> m_lst_pos[STOCKCNT];
|
|
|
|
|
list<TPosxy*> m_lst_posTmp[STOCKCNT];
|
|
|
|
|
int m_lst_index[STOCKCNT]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ȡλ<C8A1><CEBB>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|
|
|
|
int m_prePut; //<2F><>һ<EFBFBD>η<EFBFBD><CEB7>ξ߱<CEBE><DFB1><EFBFBD>
|
|
|
|
|
CTest* m_ptest[TESTCNT]; //<2F>ξ<EFBFBD>
|
|
|
|
|
CTest* m_pconn; //<2F><><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>
|
|
|
|
|
|
|
|
|
|
bool m_brun; //<2F>߳<EFBFBD><DFB3><EFBFBD><EFBFBD>б<EFBFBD>ʶ
|
|
|
|
|
Handle m_hThread; //<2F>߳̾<DFB3><CCBE><EFBFBD>
|
|
|
|
|
|
|
|
|
|
hash_map<string, CProduct*> m_hash_lst; //<2F><><EFBFBD>в<EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
//<2F>Ӿ<EFBFBD><D3BE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
CVision* m_pVision[EVSize];
|
|
|
|
|
CVision* m_pVisionTest; //<2F><><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
//ģ<><C4A3>
|
|
|
|
|
CSimTest* m_psimTest[TESTCNT];
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
ipvar* m_pv; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ipvar* m_pt; //<2F>ξ<EFBFBD>/<2F>ϲֱ<CFB2><D6B1><EFBFBD>
|
|
|
|
|
ipvar* m_pclear; //<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|
|
|
|
ipvar* m_pFour; //<2F>Ƿ<EFBFBD>һ<EFBFBD><D2BB>4
|
|
|
|
|
ipvar* m_pntake; //Ҫȡ<D2AA><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ipvar* m_pnput; //Ҫ<><D2AA>OK<4F>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ipvar* m_pUph; //<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʵʱUPH
|
|
|
|
|
ipvar* m_pAllUph; //<2F><><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>UPH
|
|
|
|
|
ipvar* m_pOutput; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ipvar* m_pLot; //<2F><><EFBFBD>̻<EFBFBD><CCBB>ϴ<EFBFBD><CFB4><EFBFBD>
|
|
|
|
|
ipvar* m_pEnda; //A<><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ipvar* m_pPause; //<2F><>ͣ<EFBFBD>ź<EFBFBD>
|
|
|
|
|
ipvar* m_pBin; //<2F><>bin<69><6E>Ϣ
|
|
|
|
|
ipvar* m_pCastoff; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
bool m_bupdatevar; //<2F>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>²<EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ipvar* m_pvar_vacm[4];
|
|
|
|
|
ipvar* m_pvar_test[TESTCNT];
|
|
|
|
|
callback m_callback; //<2F>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif //<2F><>ֹ<EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|