1.准备处理PanelDataRequest的响应;
2.删除掉Glass中的JobDataB
| | |
| | | CEqReadStep* pStep = new CEqReadStep(0x6301, 108 * 2, |
| | | [&](void* pFrom, int code, const char* pszData, size_t size) -> int { |
| | | if (code == ROK && pszData != nullptr && size > 0) { |
| | | decodeFacDataReport((CStep*)pFrom, pszData, size); |
| | | decodePanelDataRequest((CStep*)pFrom, pszData, size); |
| | | } |
| | | return -1; |
| | | }); |
| | |
| | | } |
| | | |
| | | { |
| | | // Panel Data Request xxx |
| | | CEqReadStep* pStep = new CEqReadStep(0x6301, 108 * 2, |
| | | // Panel Data Request |
| | | CEqReadStep* pStep = new CEqReadStep(0x617d, 2 * 2, |
| | | [&](void* pFrom, int code, const char* pszData, size_t size) -> int { |
| | | if (code == ROK && pszData != nullptr && size > 0) { |
| | | decodeFacDataReport((CStep*)pFrom, pszData, size); |
| | | decodePanelDataRequest((CStep*)pFrom, pszData, size); |
| | | } |
| | | return -1; |
| | | }); |
| | | pStep->setName(STEP_EQ_FAC_DATA_REPORT); |
| | | pStep->setName(STEP_EFEM_PANEL_DATA_REQUEST); |
| | | pStep->setProp("Port", (void*)1); |
| | | pStep->setWriteSignalDev(0x04d); |
| | | pStep->setWriteSignalDev(0x15d); |
| | | if (addStep(STEP_ID_PANEL_DATA_REQUEST, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | |
| | | CGlass* pContext = nullptr; |
| | | for (int i = 0; i < SLOT_MAX; i++) { |
| | | CGlass* pGlass = (CGlass*)m_slot[i].getContext(); |
| | | if (pGlass != nullptr && compareJobDataB(pJobDataB, pGlass->getJobDataB())) { |
| | | if (pGlass != nullptr && compareJobData(pJobDataB, pGlass->getJobDataS())) { |
| | | pContext = pGlass; |
| | | if (pGlass != nullptr) pGlass->addRef(); |
| | | m_slot[i].setContext(nullptr); |
| | |
| | | return 0; |
| | | } |
| | | |
| | | int CEquipment::decodePanelDataRequest(CStep* pStep, const char* pszData, size_t size) |
| | | { |
| | | int index = 0; |
| | | short cassetteSequenceNo, jobSequenceNo; |
| | | memcpy(&cassetteSequenceNo, &pszData[index], sizeof(short)); |
| | | index += sizeof(short); |
| | | memcpy(&jobSequenceNo, &pszData[index], sizeof(short)); |
| | | index += sizeof(short); |
| | | |
| | | |
| | | // efme, 获取数据后返回 |
| | | // Cassette Sequence No 1W |
| | | // Job Sequence No 1W |
| | | // Job DataS 256W |
| | | |
| | | |
| | | |
| | | |
| | | // 缓存Attribute,用于调试时显示信息 |
| | | unsigned int weight = 201; |
| | | pStep->addAttribute(new CAttribute("CassetteSequenceNo", |
| | | (std::to_string(cassetteSequenceNo)).c_str(), "", weight++)); |
| | | pStep->addAttribute(new CAttribute("JobSequenceNo", |
| | | (std::to_string(jobSequenceNo)).c_str(), "", weight++)); |
| | | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CEquipment::onPreStoredJob(int port, CJobDataB* pJobDataB, short& putSlot) |
| | | { |
| | | LOGI("<CEquipment-%s>onPreStoredJob:port:%d|GlassId:%s", |
| | |
| | | return nullptr; |
| | | } |
| | | |
| | | BOOL CEquipment::compareJobDataB(CJobDataB* pJobDataB1, CJobDataB* pJobDataB2) |
| | | BOOL CEquipment::compareJobData(CJobDataB* pJobDataB, CJobDataS* pJobDataS) |
| | | { |
| | | ASSERT(pJobDataB1); |
| | | ASSERT(pJobDataB2); |
| | | ASSERT(pJobDataB); |
| | | ASSERT(pJobDataS); |
| | | |
| | | if (pJobDataB1->getCassetteSequenceNo() != pJobDataB2->getCassetteSequenceNo()) |
| | | if (pJobDataB->getCassetteSequenceNo() != pJobDataS->getCassetteSequenceNo()) |
| | | return FALSE; |
| | | if (pJobDataB1->getJobSequenceNo() != pJobDataB2->getJobSequenceNo()) |
| | | if (pJobDataB->getJobSequenceNo() != pJobDataS->getJobSequenceNo()) |
| | | return FALSE; |
| | | |
| | | return TRUE; |
| | |
| | | int decodeVCREventReport(CStep* pStep, const char* pszData, size_t size); |
| | | int decodePanelDataReport(CStep* pStep, const char* pszData, size_t size); |
| | | int decodeFacDataReport(CStep* pStep, const char* pszData, size_t size); |
| | | int decodePanelDataRequest(CStep* pStep, const char* pszData, size_t size); |
| | | int addJobDataB(CJobDataB* pJobDataB); |
| | | int removeJobDataB(int nCassetteSequenceNo, int nJobSequenceNo); |
| | | CJobDataB* getJobDataB(int nCassetteSequenceNo, int nJobSequenceNo); |
| | | int addJobDataS(CJobDataS* pJobDataS); |
| | | int removeJobDataS(int nCassetteSequenceNo, int nJobSequenceNo); |
| | | CJobDataS* getJobDataS(int nCassetteSequenceNo, int nJobSequenceNo); |
| | | BOOL compareJobDataB(CJobDataB* pJobDataB1, CJobDataB* pJobDataB2); |
| | | BOOL compareJobData(CJobDataB* pJobDataB, CJobDataS* pJobDataS); |
| | | void setProcessState(PROCESS_STATE state); |
| | | |
| | | protected: |
| | |
| | | m_pPath->serialize(ar); |
| | | } |
| | | char temp[JOBDATAS_SIZE] = { 0 }; |
| | | m_jobDataB.serialize(temp, JOBDATAB_SIZE); |
| | | ar.Write(temp, JOBDATAB_SIZE); |
| | | m_jobDataS.serialize(temp, JOBDATAS_SIZE); |
| | | ar.Write(temp, JOBDATAS_SIZE); |
| | | ar << (ULONGLONG)m_pBuddy; |
| | |
| | | m_pPath->serialize(ar); |
| | | } |
| | | char temp[JOBDATAS_SIZE]; |
| | | ar.Read(temp, JOBDATAB_SIZE); |
| | | m_jobDataB.unserialize(temp, JOBDATAB_SIZE); |
| | | ar.Read(temp, JOBDATAS_SIZE); |
| | | m_jobDataS.unserialize(temp, JOBDATAS_SIZE); |
| | | ar >> ullPath; m_pBuddy = (CGlass*)ullPath; |
| | | ReadString(ar, m_strBuddyId); |
| | | Unlock(); |
| | | } |
| | | } |
| | | |
| | | void CGlass::setJobDataB(CJobDataB* pJobDataB) |
| | | { |
| | | m_jobDataB.copy(pJobDataB); |
| | | } |
| | | |
| | | CJobDataB* CGlass::getJobDataB() |
| | | { |
| | | return &m_jobDataB; |
| | | } |
| | | |
| | | void CGlass::setJobDataS(CJobDataS* pJobDataS) |
| | |
| | | CPath* getPath(); |
| | | void addPath(unsigned int nEqId, unsigned int nUnit); |
| | | void serialize(CArchive& ar); |
| | | void setJobDataB(CJobDataB* pJobDataB); |
| | | CJobDataB* getJobDataB(); |
| | | void setJobDataS(CJobDataS* pJobDataS); |
| | | CJobDataS* getJobDataS(); |
| | | BOOL setBuddy(CGlass* pGlass); |
| | |
| | | MaterialsType m_type; |
| | | std::string m_strID; |
| | | CPath* m_pPath; |
| | | CJobDataB m_jobDataB; |
| | | CJobDataS m_jobDataS; |
| | | CGlass* m_pBuddy; |
| | | std::string m_strBuddyId; |
| | |
| | | for (int i = 0; i < 1; i++) { |
| | | if (!m_slot[i].isEnable()) continue; |
| | | |
| | | CJobDataB jb; |
| | | CJobDataS js; |
| | | |
| | | sprintf_s(szBuffer, "%s%d", pszPrefix, suffix++); |
| | | jb.setGlassId(szBuffer); |
| | | jb.setCassetteSequenceNo(nCassetteSequenceNo); |
| | | jb.setJobSequenceNo(++nJobSequenceNo); |
| | | js.setMaterialsType((int)type); |
| | | js.setCassetteSequenceNo(nCassetteSequenceNo); |
| | | js.setJobSequenceNo(nJobSequenceNo); |
| | |
| | | pGlass->addPath(m_nID, 0); |
| | | pGlass->processEnd(m_nID, 0); |
| | | pGlass->setID(szBuffer); |
| | | pGlass->setJobDataB(&jb); |
| | | pGlass->setType(type); |
| | | pGlass->setJobDataS(&js); |
| | | m_slot[i].setContext(pGlass); |
| | |
| | | if (m_pActiveRobotTask->getSrcPosition() == p->getID()) { |
| | | CGlass* pGlass = p->getGlassFromSlot(m_pActiveRobotTask->getSrcSlot()); |
| | | if (pGlass != nullptr) { |
| | | CJobDataB* pJobDataBSrc = pGlass->getJobDataB(); |
| | | if (pJobDataBSrc != nullptr |
| | | && pJobDataBSrc->getCassetteSequenceNo() == pJobDataB->getCassetteSequenceNo() |
| | | && pJobDataBSrc->getJobSequenceNo() == pJobDataB->getJobSequenceNo()) { |
| | | CJobDataS* pJobDataS = pGlass->getJobDataS(); |
| | | if (pJobDataS != nullptr |
| | | && pJobDataS->getCassetteSequenceNo() == pJobDataB->getCassetteSequenceNo() |
| | | && pJobDataS->getJobSequenceNo() == pJobDataB->getJobSequenceNo()) { |
| | | bOk = TRUE; |
| | | LOGI("<CMaster>onPreFethedOutJob, 已校验数据一致性."); |
| | | } |
| | |
| | | } |
| | | */ |
| | | if (!bTestGenerate) { |
| | | /* |
| | | SERVO::CRobotTask* pTask = theApp.m_model.getMaster().getActiveRobotTask(); |
| | | if (pTask != nullptr) { |
| | | SERVO::CGlass* pGlass = (SERVO::CGlass*)pTask->getContext(); |
| | |
| | | pEquipment->onSentOutJob(0, pJobDataS); |
| | | } |
| | | } |
| | | */ |
| | | } |
| | | } |
| | | else if (nCmd == ID_EQSGRAPHITEM_TEST2) { |
| | | SERVO::CEquipment* pEquipment = (SERVO::CEquipment*)pItem->pData; |
| | | SERVO::CArm* pArm = (SERVO::CArm*)pEquipment->getArm(); |
| | | if (pArm != nullptr) { |
| | | /* |
| | | SERVO::CGlass* pGlass = pArm->getAnyGlass(); |
| | | if (pGlass != nullptr) { |
| | | SERVO::CJobDataB* pJobDataB = pGlass->getJobDataB(); |
| | |
| | | Sleep(600); |
| | | pEquipment->onStoredJob(0, pJobDataB); |
| | | } |
| | | } |
| | | }*/ |
| | | } |
| | | } |
| | | else if (nCmd == ID_EQSGRAPHITEM_TEST3) { |
| | |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | int CReadStep::setReturnData(const char* pszData, unsigned int size) |
| | | { |
| | | ASSERT(size < 1024); |
| | | memcpy(m_szReturnBuf, pszData, size); |
| | | m_nReturnDataSize = size; |
| | | |
| | | return 0; |
| | | } |
| | | } |
| | |
| | | inline void nextStep(); |
| | | inline void resetStep(); |
| | | virtual int setReturnCode(short code); |
| | | virtual int setReturnData(const char* pszData, unsigned int size); |
| | | |
| | | protected: |
| | | HANDLE m_hWorkThreadHandle; |
| | |
| | | #define STEP_PORT4_CASSETTE_TYPE_CHANGE _T("Port4CassetteTypeChange") |
| | | #define STEP_EQ_PANEL_DATA_REPORT _T("EQPanelDataReport") |
| | | #define STEP_EQ_FAC_DATA_REPORT _T("EQFacDataReport") |
| | | |
| | | #define STEP_EFEM_PANEL_DATA_REQUEST _T("EFEMPanelDataRequest") |
| | | |
| | | /* Step ID */ |
| | | #define STEP_ID_CIMMODE_CHANGED_CMD_REPLY 0x550 |