| | |
| | | && pLoadPorts[s]->getPortStatus() == PORT_INUSE) { |
| | | m_pActiveRobotTask = createTransferTask(pLoadPorts[s], pAligner, primaryType, secondaryType, m_bJobMode); |
| | | if (m_pActiveRobotTask != nullptr) { |
| | | pEFEM->setContext(m_pActiveRobotTask->getContext()); |
| | | bool bMoved = glassFromQueueToInPorcess((CGlass*)m_pActiveRobotTask->getContext()); |
| | | CGlass* pGlass = (CGlass*)m_pActiveRobotTask->getContext(); |
| | | pEFEM->setContext(pGlass); |
| | | pGlass->start(); |
| | | bool bMoved = glassFromQueueToInPorcess(pGlass); |
| | | if (bMoved) { |
| | | LOGI("<Master>Glass(%s)ä»çå¾
åéå°å·¥èºåé转移æå.", |
| | | ((CGlass*)m_pActiveRobotTask->getContext())->getID().c_str()); |
| | | pGlass->getID().c_str()); |
| | | } |
| | | else { |
| | | LOGE("<Master>Glass(%s)ä»çå¾
åéå°å·¥èºåé转移失败.", |
| | | ((CGlass*)m_pActiveRobotTask->getContext())->getID().c_str()); |
| | | pGlass->getID().c_str()); |
| | | } |
| | | |
| | | goto BATCH_PORT_GET; |
| | |
| | | bOk = TRUE; |
| | | LOGI("<CMaster>onPreFethedOutJob, å·²æ ¡éªæ°æ®ä¸è´æ§."); |
| | | } |
| | | LOGI("<CMaster>onPreFethedOutJob 0004."); |
| | | if (pJobDataS != nullptr) { |
| | | LOGI("<CMaster>onPreFethedOutJob 0005. %d,%d,%d,%d", |
| | | pJobDataS->getCassetteSequenceNo(), |
| | | pJobDataB->getCassetteSequenceNo(), |
| | | pJobDataS->getJobSequenceNo(), |
| | | pJobDataB->getJobSequenceNo() |
| | | ); |
| | | } |
| | | } |
| | | } |
| | | else if (p->getID() == EQ_ID_ARM_TRAY1 || p->getID() == EQ_ID_ARM_TRAY2) { |
| | |
| | | |
| | | // å¦ææ¯æ¬éåä»AOIæ¬éåPort, åglasså·¥èºå®æ |
| | | if (m_pActiveRobotTask->getSrcPosition() == EQ_ID_MEASUREMENT) { |
| | | bool bMoved = glassFromInPorcessToComplete((CGlass*)m_pActiveRobotTask->getContext()); |
| | | CGlass* pGlass = (CGlass*)m_pActiveRobotTask->getContext(); |
| | | pGlass->complete(); |
| | | bool bMoved = glassFromInPorcessToComplete(pGlass); |
| | | if (bMoved) { |
| | | LOGI("<Master>Glass(%s)ä»å·¥èºåéå°å®æåé转移æå.", |
| | | ((CGlass*)m_pActiveRobotTask->getContext())->getID().c_str()); |
| | | pGlass->getID().c_str()); |
| | | } |
| | | else { |
| | | LOGE("<Master>Glass(%s)ä»å·¥èºåéå°å®æåé转移失败.", |
| | | ((CGlass*)m_pActiveRobotTask->getContext())->getID().c_str()); |
| | | pGlass->getID().c_str()); |
| | | } |
| | | |
| | | // æ£æ¥PJæ¯å¦å·²ç»å®æ |
| | | CProcessJob* pJob = getGlassProcessJob((CGlass*)m_pActiveRobotTask->getContext()); |
| | | if (pJob != nullptr && checkAndUpdatePjComplete(pJob)) { |
| | | LOGE("<Master>ProcessJob(%s)宿.", |
| | | pJob->id().c_str()); |
| | | if (m_listener.onPjEnd != nullptr) { |
| | | m_listener.onPjEnd(this, pJob); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | unlock(); |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | // æ¨¡ææµè¯ |
| | | /* |
| | | static int aaa = 0; |
| | | aaa++; |
| | | if (aaa % 30 == 0) { |
| | | if (!m_queueGlasses.empty()) { |
| | | CGlass* pGlass = m_queueGlasses.front(); |
| | | pGlass->start(); |
| | | glassFromQueueToInPorcess(pGlass); |
| | | } |
| | | } |
| | | |
| | | if (aaa % 45 == 0) { |
| | | if (!m_inProcesGlasses.empty()) { |
| | | CGlass* pGlass = m_inProcesGlasses.front(); |
| | | pGlass->complete(); |
| | | glassFromInPorcessToComplete(pGlass); |
| | | |
| | | |
| | | CProcessJob* pJob = getGlassProcessJob(pGlass); |
| | | if (pJob != nullptr && checkAndUpdatePjComplete(pJob)) { |
| | | LOGE("<Master>ProcessJob(%s)宿.", |
| | | pJob->id().c_str()); |
| | | if (m_listener.onPjEnd != nullptr) { |
| | | m_listener.onPjEnd(this, pJob); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | */ |
| | | } |
| | | |
| | | void CMaster::connectEquipments() |
| | |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | bool CMaster::checkAndUpdatePjComplete(CProcessJob* pJob) |
| | | { |
| | | ASSERT(pJob); |
| | | auto state = pJob->state(); |
| | | if (state != PJState::InProcess && state != PJState::Paused) return false; |
| | | |
| | | for (auto c : pJob->carriers()) { |
| | | for (auto g : c.contexts) { |
| | | CGlass* pGlass = (CGlass*)g; |
| | | if (pGlass->state() != GlsState::Aborted |
| | | && pGlass->state() != GlsState::Completed |
| | | && pGlass->state() != GlsState::Failed) return false; |
| | | } |
| | | } |
| | | |
| | | return pJob->complete(); |
| | | } |
| | | |
| | | CProcessJob* CMaster::getGlassProcessJob(CGlass* pGlass) |
| | | { |
| | | if (m_pControlJob == nullptr) return nullptr; |
| | | for (auto pj : m_pControlJob->getPjs()) { |
| | | for (auto c : pj->carriers()) { |
| | | for (auto g : c.contexts) { |
| | | if (g == pGlass) return pj; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return nullptr; |
| | | } |
| | | } |