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.

822 lines
23 KiB
C++

2 years ago
#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;
}