|
|
|
|
#include "manage.h"
|
|
|
|
|
#include "var.h"
|
|
|
|
|
#include "ops.h"
|
|
|
|
|
#include "log.h"
|
|
|
|
|
#include "test.h"
|
|
|
|
|
#include "user.h"
|
|
|
|
|
#include "config.h"
|
|
|
|
|
#include "matrix.h"
|
|
|
|
|
#include "control.h"
|
|
|
|
|
|
|
|
|
|
using std::pair;
|
|
|
|
|
|
|
|
|
|
//CManage<67><65>
|
|
|
|
|
|
|
|
|
|
void makelenstr(char* psz, int len)
|
|
|
|
|
{
|
|
|
|
|
int nlen = strlen(psz);
|
|
|
|
|
if (nlen < len)
|
|
|
|
|
{
|
|
|
|
|
mem_backward(psz, nlen, len - nlen);
|
|
|
|
|
for (int i = 0; i < len - nlen; i++)
|
|
|
|
|
{
|
|
|
|
|
psz[i] = '0';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CManage::UpdateVarProduct()
|
|
|
|
|
{
|
|
|
|
|
ZERO_CHK(m_bupdatevar);
|
|
|
|
|
|
|
|
|
|
CProduct* p = NULL;
|
|
|
|
|
char buff[256] = { 0 };
|
|
|
|
|
for (int i = 0; i < m_vacm_cnt; i++)
|
|
|
|
|
{
|
|
|
|
|
p = m_vacm_lst[i];
|
|
|
|
|
if (p)
|
|
|
|
|
{
|
|
|
|
|
makelenstr(p->data.sn, 4);
|
|
|
|
|
sprintf(buff, "0 %s %d %d %d time:%s status:%d count:%d",
|
|
|
|
|
p->data.sn, p->_t1, p->_t2, p->_t3,
|
|
|
|
|
p->data.start, p->data.status, p->data.count);
|
|
|
|
|
}
|
|
|
|
|
else sprintf(buff, "%d", 0);
|
|
|
|
|
if (strcmp(buff, m_pvar_vacm[i]->getcs()))
|
|
|
|
|
{
|
|
|
|
|
m_pvar_vacm[i]->sets(buff);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < TESTCNT; i++)
|
|
|
|
|
{
|
|
|
|
|
p = m_ptest[i]->_p;
|
|
|
|
|
if (p)
|
|
|
|
|
{
|
|
|
|
|
makelenstr(p->data.sn, 4);
|
|
|
|
|
sprintf(buff, "%d %s %d %d %d time:%s status:%d count:%d",
|
|
|
|
|
m_ptest[i]->_data.status, p->data.sn, p->_t1, p->_t2,
|
|
|
|
|
p->_t3, p->data.start, p->data.status, p->data.count);
|
|
|
|
|
}
|
|
|
|
|
else sprintf(buff, "%d", m_ptest[i]->_data.status);
|
|
|
|
|
if (strcmp(buff, m_pvar_test[i]->getcs()))
|
|
|
|
|
{
|
|
|
|
|
m_pvar_test[i]->sets(buff);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::Test(const char* pszcmd)
|
|
|
|
|
{
|
|
|
|
|
char name[32] = { 0 };
|
|
|
|
|
char desc[32] = { 0 };
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < m_vacm_cnt; i++)
|
|
|
|
|
{
|
|
|
|
|
sprintf(name, "vacm%d_p", i + 1);
|
|
|
|
|
sprintf(desc, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>%d<><64>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>", i + 1);
|
|
|
|
|
m_pvar_vacm[i] = getVar(name, desc);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < TESTCNT; i++)
|
|
|
|
|
{
|
|
|
|
|
sprintf(name, "test%d_p", i + 1);
|
|
|
|
|
sprintf(desc, "<EFBFBD>ξ<EFBFBD>%d<><64>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>", i + 1);
|
|
|
|
|
m_pvar_test[i] = getVar(name, desc);
|
|
|
|
|
}
|
|
|
|
|
m_bupdatevar = true;
|
|
|
|
|
/*CoreConfig cfg;
|
|
|
|
|
GetConfig(&cfg);
|
|
|
|
|
cfg.bBindB = 1;
|
|
|
|
|
cfg.idualindex = 3;
|
|
|
|
|
cfg.bPassTestB = 1;
|
|
|
|
|
SetConfig(&cfg);*/
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::GetVacmCount()
|
|
|
|
|
{//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ٿ<EFBFBD><D9BF><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int count = 0;
|
|
|
|
|
for(int i = 0; i < m_vacm_cnt; i++)
|
|
|
|
|
{
|
|
|
|
|
if (m_vacm_lst[i]) count++;
|
|
|
|
|
}
|
|
|
|
|
return count;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CManage::MakeDate(char* pszdate)
|
|
|
|
|
{
|
|
|
|
|
SYS_TIME tm;
|
|
|
|
|
sys_GetLocalTime(&tm);
|
|
|
|
|
sprintf(pszdate, "%04d/%02d/%02d %02d:%02d:%02d",
|
|
|
|
|
tm.wYear, tm.wMonth, tm.wDay,
|
|
|
|
|
tm.wHour, tm.wMinute, tm.wSecond);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::M1()
|
|
|
|
|
{//M1 ֪ͨ<CDA8><D6AA><EFBFBD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD>
|
|
|
|
|
return m_pVision[EVInput]->Process();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::M3()
|
|
|
|
|
{//M1 ֪ͨOK<4F><4B><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD>
|
|
|
|
|
return m_pVision[EVOkTray]->Process();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::M4()
|
|
|
|
|
{//M4 ֪ͨNG<4E><47><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD>
|
|
|
|
|
return m_pVision[EVNGTray]->Process();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::M2()
|
|
|
|
|
{//M2 ֪ͨ2<D6AA><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><D5BD><EFBFBD>
|
|
|
|
|
return m_pVision[EVHamal]->Process();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::M5()
|
|
|
|
|
{//NGȡһ<C8A1><D2BB>һ
|
|
|
|
|
return m_pVision[EVNGTakeOne]->Process();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::M6()
|
|
|
|
|
{//NG<4E><47>һ<EFBFBD><D2BB>һ
|
|
|
|
|
return m_pVision[EVNGPutOne]->Process();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::M7()
|
|
|
|
|
{//<2F>ξ<EFBFBD>ȡ
|
|
|
|
|
return m_pVision[EVTestTake]->Process();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::M8()
|
|
|
|
|
{//<2F>ξ߷<CEBE>
|
|
|
|
|
return m_pVision[EVTestPut]->Process();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::VacmReset()
|
|
|
|
|
{//vacmreset ֪ͨ<CDA8>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD>
|
|
|
|
|
_logct = 0;
|
|
|
|
|
for(int i = 0; i < m_vacm_cnt; i++)
|
|
|
|
|
{
|
|
|
|
|
m_vacm_lst[i] = NULL;
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::SimTest(int tindex, int benable)
|
|
|
|
|
{
|
|
|
|
|
CoreConfig cfg;
|
|
|
|
|
memcpy(&cfg, &m_cfg, sizeof(cfg));
|
|
|
|
|
switch(tindex)
|
|
|
|
|
{
|
|
|
|
|
case 1:
|
|
|
|
|
cfg.bSimTest1 = benable;
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
cfg.bSimTest2 = benable;
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
cfg.bSimTest3 = benable;
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
cfg.bSimTest4 = benable;
|
|
|
|
|
break;
|
|
|
|
|
case 5:
|
|
|
|
|
cfg.bSimTest5 = benable;
|
|
|
|
|
break;
|
|
|
|
|
case 6:
|
|
|
|
|
cfg.bSimTest6 = benable;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
return SetConfig(&cfg);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::StockReset(int sindex)
|
|
|
|
|
{//stockreset sindex ֪ͨ<CDA8>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>̲<EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD> sindex<65>ϲֱ<CFB2><D6B1><EFBFBD>[1-5]
|
|
|
|
|
vector<CProduct*>::iterator it;
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(sindex >= LocationInput && sindex <= LocationNg3, ERR_INPUT_PARAM);
|
|
|
|
|
|
|
|
|
|
vector<CProduct*>& vec = m_vecStock[sindex - LocationInput];
|
|
|
|
|
for (it = vec.begin(); it != vec.end(); it++)
|
|
|
|
|
{
|
|
|
|
|
if (*it)
|
|
|
|
|
{//<2F><>ֵ<EFBFBD><D6B5><EFBFBD>ͷ<EFBFBD>
|
|
|
|
|
FreeProduct(*it);
|
|
|
|
|
*it = NULL;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD> pvec->clear();
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::VacmTake()
|
|
|
|
|
{//vacmtake ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫȡ<D2AA>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0ʱ<30><CAB1>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>'v'<27><>
|
|
|
|
|
int count = GetVacmCount();
|
|
|
|
|
if (count >= m_vacm_cnt - 1 || m_pclear->geti())
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|
|
|
|
m_pv->seti(0);
|
|
|
|
|
m_pt->seti(0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < m_vacm_cnt; i++)
|
|
|
|
|
{
|
|
|
|
|
if (!m_vacm_lst[i])
|
|
|
|
|
{
|
|
|
|
|
count = i + 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_pt->seti(1);
|
|
|
|
|
m_pv->seti(count);
|
|
|
|
|
LOG_INF1("input set v = %d", count);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::FindTest(CProduct* p, bool bchkp, int aend)
|
|
|
|
|
{//<2F><><EFBFBD>ҿ<EFBFBD><D2BF>Էŵ<D4B7><C5B5>ξ<EFBFBD>
|
|
|
|
|
for (int i = 0; i < aend; i++)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD>
|
|
|
|
|
if (bchkp && m_ptest[i]->_p) continue; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (!m_ptest[i]->Enabled()) continue; //δ<><CEB4><EFBFBD><EFBFBD>
|
|
|
|
|
if (!m_ptest[i]->IsReady()) continue; //<2F><><EFBFBD>ھ<EFBFBD><DABE><EFBFBD>״̬
|
|
|
|
|
if (m_ptest[i]->IsNextNoTest())
|
|
|
|
|
{//<2F><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD> -- ֱ<>ӿ<EFBFBD><D3BF><EFBFBD>
|
|
|
|
|
REPORT("set notest t = %d.", i + 1);
|
|
|
|
|
//set_int_var("test", 1);
|
|
|
|
|
//ops_analog_signal(IOS_PAUSE, 1); //<2F><><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD>ͣһ<CDA3><D2BB>
|
|
|
|
|
return i + 1;
|
|
|
|
|
}
|
|
|
|
|
if (IsAAB() && !p->CanTestAAB(m_ptest[i]->_data.ate))
|
|
|
|
|
{//AABģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD>
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (IsABC() && !p->CanTestABC(m_ptest[i]->_data.ate))
|
|
|
|
|
{//ABCģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD>
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
return i + 1; //okֱ<6B>ӷ<EFBFBD><D3B7><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CManage::GetPutByTest(int &v, int t, bool bchkp)
|
|
|
|
|
{//testput ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ξߵ<CEBE><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>->'v'<27><><EFBFBD>ξ߱<CEBE><DFB1><EFBFBD>->'t'<27><>Ϊ0ʱ<30><CAB1>Ч
|
|
|
|
|
int aend = m_pEnda->geti();
|
|
|
|
|
const char* ate = m_ptest[t-1]->_data.ate;
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < m_vacm_cnt; i++)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (!m_vacm_lst[i]) continue;
|
|
|
|
|
if (bchkp && m_ptest[t - 1]->_p) continue;
|
|
|
|
|
if (m_ptest[t - 1]->IsNextNoTest())
|
|
|
|
|
{//<2F><><EFBFBD>ڻ<EFBFBD><DABB><EFBFBD> -- ֱ<>ӿ<EFBFBD><D3BF><EFBFBD>
|
|
|
|
|
v = i + 1;
|
|
|
|
|
REPORT("set notest v = %d t = %d.", v, t);
|
|
|
|
|
//set_int_var("test", 1);
|
|
|
|
|
//ops_analog_signal(IOS_PAUSE, 1); //<2F><><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD>ͣһ<CDA3><D2BB>
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
if (m_vacm_lst[i]->lastIndex() > aend) continue; //<2F>Ѿ<EFBFBD><D1BE><EFBFBD>B<EFBFBD><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (!m_vacm_lst[i]->NeedTest(getBinA())) continue; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
if (IsAAB() && !m_vacm_lst[i]->CanTestAAB(ate))
|
|
|
|
|
{//AABģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD>
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (IsABC() && !m_vacm_lst[i]->CanTestABC(ate))
|
|
|
|
|
{//ABCģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD>
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
v = i + 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CManage::GetTestPut(int &v, int &t, bool bchkp)
|
|
|
|
|
{//testput ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ξߵ<CEBE><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>->'v'<27><><EFBFBD>ξ߱<CEBE><DFB1><EFBFBD>->'t'<27><>Ϊ0ʱ<30><CAB1>Ч
|
|
|
|
|
v = 0;
|
|
|
|
|
if (t > 0 && t <= TESTCNT &&
|
|
|
|
|
m_ptest[t-1]->Enabled() &&
|
|
|
|
|
m_ptest[t-1]->IsReady())
|
|
|
|
|
{//<2F>ξ߱<CEBE><DFB1><EFBFBD><EFBFBD><EFBFBD>Ч
|
|
|
|
|
return GetPutByTest(v, t, bchkp);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < m_vacm_cnt; i++)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (!m_vacm_lst[i]) continue;
|
|
|
|
|
if (!m_vacm_lst[i]->NeedTest(getBinA())) continue; //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
t = FindTest(m_vacm_lst[i], bchkp);
|
|
|
|
|
if (0 == t) continue; //δ<>ҵ<EFBFBD>
|
|
|
|
|
v = i + 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::TestPut()
|
|
|
|
|
{//testput ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ξߵ<CEBE><DFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>->'v'<27><><EFBFBD>ξ߱<CEBE><DFB1><EFBFBD>->'t'<27><>Ϊ0ʱ<30><CAB1>Ч
|
|
|
|
|
int v = 0;
|
|
|
|
|
int t = m_pt->geti(); //<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ǰ<EFBFBD>ξ<EFBFBD>
|
|
|
|
|
int aend = m_pEnda->geti();
|
|
|
|
|
|
|
|
|
|
//GetTestPut(v, t, true);
|
|
|
|
|
GetTestPutDual(v, t, aend, true); //<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD>ж<EFBFBD><D0B6><EFBFBD>û<EFBFBD>в<EFBFBD>Ʒ<EFBFBD><C6B7><EFBFBD>ξ<EFBFBD>
|
|
|
|
|
m_pv->seti(v && t ? v : 0);
|
|
|
|
|
m_pt->seti(v && t ? t : 0);
|
|
|
|
|
LOG_INF1("testput get v = %d t = %d", v, t);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CManage::GetTestTake(int &v, int &t)
|
|
|
|
|
{//testake ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ξ<EFBFBD>ȡ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>->'v'<27><><EFBFBD>ξ߱<CEBE><DFB1><EFBFBD>->'t'<27><>Ϊ0ʱ<30><CAB1>Ч
|
|
|
|
|
v = 0; //<2F>Ȼ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
for(int i = 0; i < m_vacm_cnt; i++)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (m_vacm_lst[i]) continue; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
v = i + 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ZERO_CHK(v > 0);
|
|
|
|
|
|
|
|
|
|
if (t > 0 && t <= TESTCNT &&
|
|
|
|
|
m_ptest[t-1]->Enabled() && //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
m_ptest[t-1]->IsReady()) //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
{//<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξ߱<CEBE><DFB1><EFBFBD><EFBFBD><EFBFBD>Ч,ֱ<>ӷ<EFBFBD><D3B7><EFBFBD>
|
|
|
|
|
if (!m_ptest[t - 1]->_p)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>˴<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD>ȡֱ<C8A1>ӷ<EFBFBD>
|
|
|
|
|
v = 0; //<2F><><EFBFBD>ﲻ<EFBFBD><EFB2BB><EFBFBD><EFBFBD>t<EFBFBD><74>0<EFBFBD><30><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
t = 0; //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
for(int i = 0; i < TESTCNT; i++)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD>
|
|
|
|
|
if (!m_ptest[i]->_p) continue; //û<><C3BB>
|
|
|
|
|
if (!m_ptest[i]->Enabled()) continue; //δ<><CEB4><EFBFBD><EFBFBD>
|
|
|
|
|
if (!m_ptest[i]->IsReady()) continue; //δ<><CEB4><EFBFBD><EFBFBD>
|
|
|
|
|
t = i + 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::TestTake()
|
|
|
|
|
{//testake ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ξ<EFBFBD>ȡ<EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>->'v'<27><><EFBFBD>ξ߱<CEBE><DFB1><EFBFBD>->'t'<27><>Ϊ0ʱ<30><CAB1>Ч
|
|
|
|
|
int v = 0;
|
|
|
|
|
int t = m_pt->geti(); //<2F><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD>ǰ<EFBFBD>ξ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
GetTestTake(v, t);
|
|
|
|
|
m_pt->seti(t);
|
|
|
|
|
m_pv->seti(v && t ? v : 0);
|
|
|
|
|
LOG_INF1("testake get v = %d t = %d", v, t);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::StockPut()
|
|
|
|
|
{//stockput ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ż<EFBFBD><C5BB>ϲֵ<CFB2><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>->'v'<27><><EFBFBD>ϲֱ<CFB2><D6B1><EFBFBD>[2-5]->'t'<27><>Ϊ0ʱ<30><CAB1>Ч
|
|
|
|
|
int v = 0;
|
|
|
|
|
int t = 0;
|
|
|
|
|
int tmax = 0;
|
|
|
|
|
int vmax = 0;
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < m_vacm_cnt; i++)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
|
|
|
|
if (!m_vacm_lst[i]) continue; //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
if (m_vacm_lst[i]->lastIndex() <= m_pEnda->geti() //δ<><CEB4>B<EFBFBD><42>
|
|
|
|
|
&& m_vacm_lst[i]->NeedTest(getBinA())) continue; //<2F><>A<EFBFBD><41><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
v = i + 1;
|
|
|
|
|
t = m_vacm_lst[i]->IsOk() ? 2/*m_vacm_lst[i]->tCount() + 1*/ : 5; //3<><33>NGΪ<47>ϲ<EFBFBD>5
|
|
|
|
|
if (t > tmax)
|
|
|
|
|
{//<2F>ҵ<EFBFBD><D2B5><EFBFBD><EFBFBD><EFBFBD>ֵ -- ÿ<><C3BF><EFBFBD>ϲ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Է<EFBFBD><D4B7><EFBFBD>
|
|
|
|
|
tmax = t;
|
|
|
|
|
vmax = v;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_pv->seti(vmax);
|
|
|
|
|
m_pt->seti(tmax);
|
|
|
|
|
if (vmax > 0) m_pBin->sets(m_vacm_lst[vmax - 1]->data.level); //<2F><><EFBFBD><EFBFBD>bin<69><6E>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
LOG_INF1("stockput set v = %d t = %d", vmax, tmax);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void CManage::GetNotestPut(int &v, int &t)
|
|
|
|
|
{//4<><34><EFBFBD><EFBFBD><EFBFBD>춼<EFBFBD><ECB6BC>Ҫ<EFBFBD><D2AA><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ξ߿<CEBE><DFBF>Բ<EFBFBD><D4B2>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//for (int i = 0; i < m_vacm_cnt; i++)
|
|
|
|
|
//{
|
|
|
|
|
// if (m_vacm_lst[i])
|
|
|
|
|
// {//<2F><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// v = i + 1;
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
v = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
for (int i = 0; i < TESTCNT; i++)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD>ξ<EFBFBD>
|
|
|
|
|
if (m_ptest[i]->_p) continue; //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
if (!m_ptest[i]->Enabled()) continue; //δ<><CEB4><EFBFBD><EFBFBD>
|
|
|
|
|
if (!m_ptest[i]->IsReady()) continue; //δ<><CEB4><EFBFBD><EFBFBD>
|
|
|
|
|
m_ptest[i]->setNextNoTest(); //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
t = i + 1;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#define PUTCT 6000 //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1> ÿ<><C3BF>6s
|
|
|
|
|
|
|
|
|
|
int CManage::WhereToGo()
|
|
|
|
|
{//where ֪ͨ<CDA8><D6AA><EFBFBD>õ<EFBFBD>ǰ<EFBFBD>Ǹ<EFBFBD><C7B8>ξ<CEBE><DFBB>ϻ<EFBFBD><CFBB>Ƿ<EFBFBD><C7B7>ϵ<EFBFBD><CFB5>ϲ֣<CFB2><D6A3><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>'t'<27>У<EFBFBD>0<EFBFBD><30>ʶ<EFBFBD><CAB6><EFBFBD>ϵ<EFBFBD><CFB5>ϲ֣<CFB2>[1-6]<5D><>ʶ<EFBFBD><CAB6><EFBFBD>ξ<CEBE><DFBB><EFBFBD>
|
|
|
|
|
int i = 0;
|
|
|
|
|
int v = 0;
|
|
|
|
|
int t = 0;
|
|
|
|
|
int v1 = 0;
|
|
|
|
|
int t1 = 0;
|
|
|
|
|
ulong cur = 0;
|
|
|
|
|
ulong minct = TESTCT; //<2F><>Сʱ<D0A1><CAB1>
|
|
|
|
|
ulong takect = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʱ<D2AA><CAB1>
|
|
|
|
|
ulong tm = 0; //<2F><><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD>ʣ<EFBFBD><CAA3>ʱ<EFBFBD><CAB1>
|
|
|
|
|
int ntest = 0; //<2F>ж<EFBFBD><D0B6>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD>Էŵ<D4B7><C5B5>ξߵ<CEBE><DFB5><EFBFBD>
|
|
|
|
|
int nput = 0; //<2F>ж<EFBFBD><D0B6>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD>Էŵ<D4B7>OK<4F>ϲֵ<CFB2><D6B5><EFBFBD>
|
|
|
|
|
int nstock = 0; //<2F>ж<EFBFBD><D0B6>ٸ<EFBFBD><D9B8><EFBFBD><EFBFBD>Էŵ<D4B7><C5B5>ϲֵ<CFB2><D6B5><EFBFBD>
|
|
|
|
|
//int curt = m_pt->geti(); //<2F><>ǰ<EFBFBD>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int curt = m_prePut; //<2F><>ǰ<EFBFBD>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int aend = m_pEnda->geti();
|
|
|
|
|
int bclear = m_pclear->geti(); //<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|
|
|
|
|
|
|
|
|
for(i = 0; i < m_vacm_cnt; i++)
|
|
|
|
|
{
|
|
|
|
|
if (!m_vacm_lst[i])
|
|
|
|
|
{//<2F>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>¼һ<C2BC><D2BB>
|
|
|
|
|
if (0 == v) v = i + 1;
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
if (NeedTestDual(m_vacm_lst[i]))
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD>С<EFBFBD><D0A1>3<EFBFBD>β<EFBFBD><CEB2>Ҳ<EFBFBD><D2B2><EFBFBD>NG
|
|
|
|
|
ntest++;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5>ϲ<EFBFBD>
|
|
|
|
|
nstock++;
|
|
|
|
|
if (1 == m_vacm_lst[i]->tCount()) nput++; //OK<4F><4B>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_pnput->seti(nput);
|
|
|
|
|
m_pntake->seti(m_vacm_cnt - ntest - 1);
|
|
|
|
|
//if ((0 == ntest && !bclear) || (ntest + nstock == m_vacm_cnt))
|
|
|
|
|
if ((0 == ntest && !bclear)
|
|
|
|
|
|| (nstock >= m_vacm_cnt - 1)
|
|
|
|
|
|| (nstock > 0 && ntest + nstock >= m_vacm_cnt))
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> -- <20><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ųֿ⣬<D6BF><E2A3AC><EFBFBD>ȷŲֿ<C5B2>
|
|
|
|
|
m_pt->seti(0);
|
|
|
|
|
LOG_INF1("where set t = 0");
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>㵱ǰ<E3B5B1><C7B0><EFBFBD>ϵ<EFBFBD><CFB5>ξ<EFBFBD><CEBE><EFBFBD>Ҫ<EFBFBD>ȶ<EFBFBD><C8B6>ã<EFBFBD>
|
|
|
|
|
//<2F><><EFBFBD>㵱ǰȡ<C7B0><C8A1>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ã<EFBFBD>
|
|
|
|
|
cur = sys_GetTickCount();
|
|
|
|
|
takect = PUTCT * nstock; //<2F><><EFBFBD>Ϻ<EFBFBD>ʱԤ<CAB1><D4A4>
|
|
|
|
|
if (curt <= 0 || curt > TESTCNT) curt = TESTCNT;
|
|
|
|
|
i = curt - 1; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
|
|
|
|
|
do
|
|
|
|
|
{//<2F>ӵ<EFBFBD>ǰt<C7B0><74>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD>t<EFBFBD><74><EFBFBD><EFBFBD>
|
|
|
|
|
i = (i + 1) % TESTCNT; //ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (!m_ptest[i]->Enabled()) continue; //δ<><CEB4><EFBFBD><EFBFBD>
|
|
|
|
|
if (m_ptest[i]->IsReady())
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD>״ֱ̬<CCAC>ӷ<EFBFBD>
|
|
|
|
|
t1 = i + 1;
|
|
|
|
|
//GetTestPut(v, t); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>Էŵ<D4B7><C5B5>ξߺ<CEBE><DFBA><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//REPORT("test(%d) idle", t1);
|
|
|
|
|
GetTestPutDual(v1, t1, aend, ntest == m_vacm_cnt ? true : false); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>Էŵ<D4B7><C5B5>ξߺ<CEBE><DFBA><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (v1 > 0 && t1 > 0)
|
|
|
|
|
{//ok <20><><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
|
|
|
|
|
m_pv->seti(v); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊȡ<CEAA><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
m_pt->seti(t1);
|
|
|
|
|
LOG_INF1("where set v = %d t = %d", v, t1);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
if (bclear)
|
|
|
|
|
{//<2F><>û<EFBFBD>пɷŵģ<C5B5><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źţ<C5BA><C5A3>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>ȡ
|
|
|
|
|
GetTestTake(v1, t1);
|
|
|
|
|
if (v1 > 0 && t1 > 0)
|
|
|
|
|
{//ok <20><><EFBFBD>Ի<EFBFBD><D4BB><EFBFBD>
|
|
|
|
|
m_pv->seti(v1);
|
|
|
|
|
m_pt->seti(t1);
|
|
|
|
|
LOG_INF1("where set v = %d t = %d", v1, t1);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else if ((i < aend || bclear) && m_ptest[i]->IsRunning())
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ÿ<EFBFBD><C3BF>Բ<EFBFBD><D4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(Ԥ<><D4A4>) -- A<><41><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>,B<><42><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>ʱҪ<CAB1>ȴ<EFBFBD>)
|
|
|
|
|
tm = m_ptest[i]->startCT() + m_ptest[i]->lastCT();
|
|
|
|
|
if (tm > cur) tm -= cur; //ʣ<><CAA3>ʱ<EFBFBD><CAB1>
|
|
|
|
|
else tm = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
//REPORT("test(%d) lastct:%d start:%d remain time:%d", i + 1, m_ptest[i]->lastCT(), m_ptest[i]->startCT(), tm);
|
|
|
|
|
if (tm < minct)
|
|
|
|
|
{//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD><D4B5>ξ<EFBFBD><CEBE><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
minct = tm;
|
|
|
|
|
t = i + 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} while (i != curt - 1);
|
|
|
|
|
|
|
|
|
|
if (TESTCT == minct && bclear)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD>״̬<D7B4>£<EFBFBD><C2A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξ߶<CEBE><DFB6>ѿ<EFBFBD>
|
|
|
|
|
t = -1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʶ
|
|
|
|
|
m_prePut = 0;
|
|
|
|
|
REPORT("clear material finished.");
|
|
|
|
|
}
|
|
|
|
|
else if (minct > takect && nstock > 0)
|
|
|
|
|
{//ȡ<>ϱȽϿ죬<CFBF><ECA3AC><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2><EFBFBD>
|
|
|
|
|
t = 0;
|
|
|
|
|
}
|
|
|
|
|
else if (ntest == m_vacm_cnt)
|
|
|
|
|
{//4<><34><EFBFBD><EFBFBD><EFBFBD>춼<EFBFBD><ECB6BC>Ҫ<EFBFBD><D2AA><EFBFBD>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD>ξ߿<CEBE><DFBF>Բ<EFBFBD><D4B2>ԣ<EFBFBD><D4A3><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
GetNotestPut(v, t);
|
|
|
|
|
//m_pPause->seti(1); //<2F><>ͣ
|
|
|
|
|
REPORT("4 vacm must test.");
|
|
|
|
|
//send_message(MSG_NORMAL, "4 vacm must test.");
|
|
|
|
|
}
|
|
|
|
|
m_pv->seti(v);
|
|
|
|
|
m_pt->seti(t);
|
|
|
|
|
LOG_INF1("where set v = %d t = %d", v, t);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::TakeFromInput(const char* sn, int vacmIndex)
|
|
|
|
|
{//<2F>ӽ<EFBFBD><D3BD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>
|
|
|
|
|
int index = 0;
|
|
|
|
|
CProduct* p = NULL;
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(sn && *sn, ERR_INPUT_PARAM);
|
|
|
|
|
RETURN_CHK_NOPRT(strlen(sn) < MAX_NAME_LEN, ERR_INPUT_PARAM);
|
|
|
|
|
RETURN_CHK_NOPRT(vacmIndex > 0 && vacmIndex <= m_vacm_cnt, ERR_INPUT_PARAM);
|
|
|
|
|
RETURN_CHK_NOPRT(!m_vacm_lst[vacmIndex - 1], ERR_EXIST_PRODUCT);
|
|
|
|
|
|
|
|
|
|
sys_EnterCriticalSection(m_hSection);
|
|
|
|
|
p = GetFromInput();
|
|
|
|
|
strcpy(p->data.sn, sn);
|
|
|
|
|
MakeDate(p->data.start);
|
|
|
|
|
p->data.index = vacmIndex;
|
|
|
|
|
p->data.pos = LocationVacm;
|
|
|
|
|
m_vacm_lst[vacmIndex - 1] = p;
|
|
|
|
|
LOG_INF1("create product:%s", p->data.sn);
|
|
|
|
|
if (m_hash_lst.find(sn) == m_hash_lst.end())
|
|
|
|
|
{//û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
m_hash_lst.insert(pair<string, CProduct*>(sn, p));
|
|
|
|
|
}
|
|
|
|
|
sys_LeaveCriticalSection(m_hSection);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::MovetoTest(int vacmIndex, int testIndex)
|
|
|
|
|
{//<2F><><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD>
|
|
|
|
|
int ret = 0;
|
|
|
|
|
CProduct* p = NULL;
|
|
|
|
|
CTest* ptest = NULL;
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(vacmIndex > 0 && vacmIndex <= m_vacm_cnt, ERR_INPUT_PARAM);
|
|
|
|
|
RETURN_CHK_NOPRT(testIndex > 0 && testIndex <= TESTCNT, ERR_INPUT_PARAM);
|
|
|
|
|
|
|
|
|
|
p = m_vacm_lst[vacmIndex - 1];
|
|
|
|
|
ptest = m_ptest[testIndex - 1];
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(p, ERR_NO_PRODUCT);
|
|
|
|
|
RETURN_CHK_NOPRT(!ptest->_p, ERR_EXIST_PRODUCT);
|
|
|
|
|
RETURN_CHK_NOPRT(ptest->IsReady(), ERR_NOREADY);
|
|
|
|
|
|
|
|
|
|
ret = m_ptest[testIndex - 1]->StartTest(p, m_cfg.machine, m_cfg.Config, m_cfg.ConfigD,
|
|
|
|
|
m_cfg.sitel, m_cfg.project, m_cfg.bUpMes, m_cfg.bUpMTcp, 0,m_cfg.sublotname,m_cfg.bUpNoise);
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(!ret, ret);
|
|
|
|
|
|
|
|
|
|
m_prePut = testIndex; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>η<EFBFBD><CEB7><EFBFBD>
|
|
|
|
|
m_vacm_lst[vacmIndex - 1] = NULL; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::MovetoVacm(int testIndex, int vacmIndex)
|
|
|
|
|
{//<2F><><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD>
|
|
|
|
|
CProduct* p = NULL;
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(vacmIndex > 0 && vacmIndex <= m_vacm_cnt, ERR_INPUT_PARAM);
|
|
|
|
|
RETURN_CHK_NOPRT(testIndex > 0 && testIndex <= TESTCNT, ERR_INPUT_PARAM);
|
|
|
|
|
RETURN_CHK_NOPRT(!m_vacm_lst[vacmIndex - 1], ERR_EXIST_PRODUCT);
|
|
|
|
|
RETURN_CHK_NOPRT(m_ptest[testIndex-1]->IsReady(), ERR_NOREADY);
|
|
|
|
|
|
|
|
|
|
p = m_ptest[testIndex-1]->_p;
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(p, ERR_NO_PRODUCT);
|
|
|
|
|
|
|
|
|
|
p->data.index = vacmIndex;
|
|
|
|
|
p->data.pos = LocationVacm;
|
|
|
|
|
m_ptest[testIndex-1]->_p = NULL;
|
|
|
|
|
m_vacm_lst[vacmIndex-1] = p;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::MovetoStock(int vacmIndex, int sindex)
|
|
|
|
|
{//<2F><><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD>-<2D>ϲ<EFBFBD>
|
|
|
|
|
CProduct* p = NULL;
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(vacmIndex > 0 && vacmIndex <= m_vacm_cnt, ERR_INPUT_PARAM);
|
|
|
|
|
RETURN_CHK_NOPRT(sindex >= LocationOk && sindex <= LocationNg3, ERR_INPUT_PARAM);
|
|
|
|
|
|
|
|
|
|
p = m_vacm_lst[vacmIndex-1];
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(p, ERR_NO_PRODUCT);
|
|
|
|
|
|
|
|
|
|
MakeDate(p->data.end);
|
|
|
|
|
PutToStock(sindex, p);
|
|
|
|
|
m_vacm_lst[vacmIndex-1] = NULL;
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::WaitTestIdle(int testIndex, int timeout)
|
|
|
|
|
{//<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ξ߾<CEBE><DFBE><EFBFBD>
|
|
|
|
|
uint ct = sys_GetTickCount();
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(testIndex > 0 && testIndex <= TESTCNT, ERR_INPUT_PARAM);
|
|
|
|
|
RETURN_CHK_NOPRT(m_ptest[testIndex-1]->Enabled(), ERR_NOREADY);
|
|
|
|
|
|
|
|
|
|
while (1)
|
|
|
|
|
{
|
|
|
|
|
if (m_ptest[testIndex-1]->IsReady())
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
if (sys_GetTickCount() > ct + timeout)
|
|
|
|
|
{//<2F><>ʱ
|
|
|
|
|
return ERR_TIMEOUT;
|
|
|
|
|
}
|
|
|
|
|
sys_Sleep(5); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>CPU<50><55><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
return ERR_TIMEOUT;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::WaitM2Result(int sindex, char* szres, int timeout)
|
|
|
|
|
{//WaitM2 sindex sindex<65>ϲֱ<CFB2><D6B1><EFBFBD>[1-5] <20>ȴ<EFBFBD>2<EFBFBD><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD>ˢ<EFBFBD>²<EFBFBD>Ʒ<EFBFBD><C6B7>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>Ϣ<EFBFBD><CFA2><EFBFBD>ظ<EFBFBD>ʽ<EFBFBD><CABD>res 0<><30>ʶ<EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
TOpsCfg cfg;
|
|
|
|
|
int res = 0;
|
|
|
|
|
int bret = 0;
|
|
|
|
|
int index = 0;
|
|
|
|
|
int start = 0;
|
|
|
|
|
TMatrixInfo mat;
|
|
|
|
|
char* ptmp = NULL;
|
|
|
|
|
char* pnext = NULL;
|
|
|
|
|
char buff[1024] = {0};
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(sindex >= LocationInput && sindex <= LocationNg3, ERR_INPUT_PARAM);
|
|
|
|
|
|
|
|
|
|
ops_get_cfg(&cfg);
|
|
|
|
|
if (cfg.offVision)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӿ<EFBFBD>
|
|
|
|
|
sprintf(szres, "0");
|
|
|
|
|
StockReset(sindex);
|
|
|
|
|
set_matrix_cur_node(sindex, 0);
|
|
|
|
|
#if 0
|
|
|
|
|
if (LocationInput == sindex)
|
|
|
|
|
{//ģ<><C4A3>һ<EFBFBD>½<EFBFBD><C2BD>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
get_matrix_info(sindex, &mat);
|
|
|
|
|
if (IsFourpic()) mat.size *= 4;
|
|
|
|
|
for (int i = 0; i < mat.size; i++)
|
|
|
|
|
{
|
|
|
|
|
res = (i < 10 || (i < 26 && i >= 16)) ? 0 : 1;
|
|
|
|
|
if (res) MakeProduct(sindex, index);
|
|
|
|
|
else ReleaseProduct(sindex, index);
|
|
|
|
|
if (0 == start && LocationInput == sindex && res)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD>ǰ<EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
start = index + 1;
|
|
|
|
|
}
|
|
|
|
|
else if (0 == start && LocationInput != sindex && !res)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
start = index + 1;
|
|
|
|
|
}
|
|
|
|
|
index++;
|
|
|
|
|
}
|
|
|
|
|
if (start > 0 && IsFourpic() && (LocationInput == sindex))
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int r = (start - 1) / (mat.col * 2) / 2; //new row
|
|
|
|
|
int c = (start - 1) % (mat.col * 2) / 2; //new col
|
|
|
|
|
start = r * mat.col + c + 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
set_matrix_cur_node(sindex, start > 0 ? start - 1 : mat.size);
|
|
|
|
|
}
|
|
|
|
|
#else
|
|
|
|
|
if (LocationInput == sindex) MakeInput();
|
|
|
|
|
#endif
|
|
|
|
|
return 0; //<2F><><EFBFBD>سɹ<D8B3>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
res = m_pVision[EVHamal]->WaitResult(buff, timeout);
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(!res, res);
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ptmp = sys_strtok(buff, ",", &pnext);
|
|
|
|
|
if (!ptmp || 0 == *ptmp) return 0;
|
|
|
|
|
res = atoi(ptmp);
|
|
|
|
|
if (0 != res)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|
|
|
|
sprintf(szres, "%d", res); //res==0<><30><EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD>ӷ<EFBFBD><D3B7>ؽ<EFBFBD><D8BD>ս<EFBFBD><D5BD><EFBFBD><EFBFBD>ɹ<EFBFBD>
|
|
|
|
|
return 0; //ָ<><EFBFBD>سɹ<D8B3>
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
while(ptmp = sys_strtok(NULL, ",", &pnext))
|
|
|
|
|
{
|
|
|
|
|
if (EMSTR_INT != get_str_type(ptmp))
|
|
|
|
|
{//<2F><>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
|
|
|
|
REPORT("M2 reply format error");
|
|
|
|
|
return ERR_INPUT_PARAM;
|
|
|
|
|
}
|
|
|
|
|
res = atoi(ptmp); //<2F><>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
if (res)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
MakeProduct(sindex, index);
|
|
|
|
|
if (LocationInput != sindex) bret = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{//ȱ<><C8B1><EFBFBD><EFBFBD>
|
|
|
|
|
ReleaseProduct(sindex, index);
|
|
|
|
|
if (LocationInput == sindex) bret = 1; //<2F><><EFBFBD>ϲ<EFBFBD><CFB2>ж<EFBFBD>ȱ<EFBFBD><C8B1><EFBFBD><EFBFBD>
|
|
|
|
|
}
|
|
|
|
|
if (0 == start && LocationInput == sindex && res)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵<EFBFBD>ǰ<EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
start = index + 1;
|
|
|
|
|
}
|
|
|
|
|
else if (0 == start && LocationInput != sindex && !res)
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
start = index + 1;
|
|
|
|
|
}
|
|
|
|
|
index++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
get_matrix_info(sindex, &mat);
|
|
|
|
|
if (start > 0 && IsFourpic() && (LocationInput == sindex))
|
|
|
|
|
{//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int r = (start - 1) / (mat.col * 2) / 2; //new row
|
|
|
|
|
int c = (start - 1) % (mat.col * 2) / 2; //new col
|
|
|
|
|
start = r * mat.col + c + 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
sprintf(szres, "%d", bret); //<2F><><EFBFBD><EFBFBD>0<EFBFBD><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʶȱ<CAB6><C8B1>Ʒ<EFBFBD><C6B7><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD>Ʒ
|
|
|
|
|
set_matrix_cur_node(sindex, start > 0 ? start - 1 : mat.size); //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int CManage::SetPosxy(int sindex, char* pszcmd)
|
|
|
|
|
{//pszcmd index sn offsetx offsety
|
|
|
|
|
int index = 0;
|
|
|
|
|
TMatrixInfo mat;
|
|
|
|
|
TMatrixNode node;
|
|
|
|
|
TPosxy* p = NULL;
|
|
|
|
|
char* sn = NULL;
|
|
|
|
|
char* ptmp = NULL;
|
|
|
|
|
|
|
|
|
|
RETURN_CHK_NOPRT(pszcmd && sindex >= LocationInput && sindex <= LocationNg3, ERR_INPUT_PARAM);
|
|
|
|
|
|
|
|
|
|
//index
|
|
|
|
|
trim_char(pszcmd);
|
|
|
|
|
ptmp = sys_strtok(NULL, " ", &pszcmd);
|
|
|
|
|
RETURN_CHK_NOPRT(EMSTR_INT == get_str_type(ptmp), ERR_INPUT_PARAM);
|
|
|
|
|
index = atoi(ptmp);
|
|
|
|
|
RETURN_CHK_NOPRT(index > 0 && index <= 4, ERR_INPUT_PARAM);
|
|
|
|
|
get_matrix_info(sindex, &mat);
|
|
|
|
|
get_matrix_cur_node(sindex, &node);
|
|
|
|
|
if (IsFourpic() && LocationInput == sindex)
|
|
|
|
|
{//4<><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD> index<65><78><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>1234 <20><>Ӧλ<D3A6><CEBB>λ<EFBFBD><CEBB><EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD><EFBFBD>ϡ<EFBFBD><CFA1><EFBFBD><EFBFBD>¡<EFBFBD><C2A1><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
node.index = (node.col - 1) * 2 + (node.row - 1) * 2 * mat.col * 2
|
|
|
|
|
+ ((index - 1) / 2) * mat.col * 2 + (index - 1) % 2 + 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//sn
|
|
|
|
|
trim_char(pszcmd);
|
|
|
|
|
sn = sys_strtok(NULL, " ", &pszcmd);
|
|
|
|
|
RETURN_CHK_NOPRT(pszcmd && sn && *sn && strlen(sn) < MAX_NAME_LEN, ERR_INPUT_PARAM);
|
|
|
|
|
|
|
|
|
|
//x y
|
|
|
|
|
trim_char(pszcmd);
|
|
|
|
|
ptmp = sys_strtok(NULL, " ", &pszcmd);
|
|
|
|
|
if (pszcmd) trim_char(pszcmd);
|
|
|
|
|
RETURN_CHK_NOPRT(get_str_type(ptmp) && get_str_type(pszcmd), ERR_INPUT_PARAM);
|
|
|
|
|
|
|
|
|
|
p = new TPosxy;
|
|
|
|
|
p->x = atof(ptmp);
|
|
|
|
|
p->y = atof(pszcmd);
|
|
|
|
|
p->index = node.index;
|
|
|
|
|
comm_strcpy(p->sn, sn);
|
|
|
|
|
sys_EnterCriticalSection(m_hSection);
|
|
|
|
|
m_lst_pos[sindex - LocationInput].push_back(p);
|
|
|
|
|
sys_LeaveCriticalSection(m_hSection);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|