| | |
| | | ASSERT(pMeasurement); |
| | | |
| | | pEfem->setPort(0, pPort1); |
| | | pEfem->setPort(1, pPort1); |
| | | pEfem->setPort(2, pPort1); |
| | | pEfem->setPort(3, pPort1); |
| | | pEfem->setPort(1, pPort2); |
| | | pEfem->setPort(2, pPort3); |
| | | pEfem->setPort(3, pPort4); |
| | | pEfem->setFliper(pFliper); |
| | | pEfem->setAligner(pAligner); |
| | | pEfem->setArmTray(0, pArmTray1); |
| | |
| | | } |
| | | |
| | | |
| | | // Measurement -> LoadPort |
| | | CLoadPort* pEqLoadPort[] = { pLoadPort1, pLoadPort2, pLoadPort3, pLoadPort4 }; |
| | | CEquipment* pEqTar[] = { pVacuumBack, pFliper }; |
| | | if (primaryType == MaterialsType::G2) { |
| | | pEqTar[0] = pFliper; |
| | | pEqTar[1] = pVacuumBack; |
| | | } |
| | | for (int s = 0; s < 4; s++) { |
| | | if (pEqLoadPort[s]->isEnable() |
| | | && pEqLoadPort[s]->getPortType() == PortType::Unloading |
| | | && pEqLoadPort[s]->getPortMode() == PortMode::ReadyToUnload) { |
| | | m_pActiveRobotTask = createTransferTask(pMeasurement, pEqLoadPort[s], primaryType, secondaryType); |
| | | if (m_pActiveRobotTask != nullptr) { |
| | | goto PORT_PUT; |
| | | } |
| | | } |
| | | } |
| | | |
| | | PORT_PUT: |
| | | if (m_pActiveRobotTask != nullptr) { |
| | | m_pActiveRobotTask->run(); |
| | | std::string strDescription = m_pActiveRobotTask->getDescription(); |
| | | unlock(); |
| | | if (m_listener.onRobotTaskEvent != nullptr) { |
| | | m_listener.onRobotTaskEvent(this, m_pActiveRobotTask, ROBOT_EVENT_CREATE); |
| | | } |
| | | LOGI("创建新任务<%s>...", strDescription.c_str()); |
| | | continue; |
| | | } |
| | | |
| | | |
| | | // BakeCooling ->Measurement |
| | | m_pActiveRobotTask = createTransferTask_bakecooling_to_measurement(pBakeCooling, pMeasurement); |
| | | if (m_pActiveRobotTask != nullptr) { |
| | |
| | | |
| | | // LoadPort -> Fliper(G2) |
| | | // LoadPort -> VacuumBake(G1) |
| | | CLoadPort* pEqSrc[] = { pLoadPort1, pLoadPort2, pLoadPort3, pLoadPort4 }; |
| | | CEquipment* pEqTar[] = { pVacuumBack, pFliper }; |
| | | if (primaryType == MaterialsType::G2) { |
| | | pEqTar[0] = pFliper; |
| | | pEqTar[1] = pVacuumBack; |
| | | } |
| | | for (int s = 0; s < 4; s++) { |
| | | for (int t = 0; t < 2; t++) { |
| | | if (pEqSrc[s]->isEnable() |
| | | && pEqSrc[s]->getPortType() == PortType::Loading |
| | | && pEqSrc[s]->getPortMode() == PortMode::ReadyToLoad) { |
| | | m_pActiveRobotTask = createTransferTask(pEqSrc[s], pEqTar[t], primaryType, secondaryType); |
| | | if (pEqLoadPort[s]->isEnable() |
| | | && pEqLoadPort[s]->getPortType() == PortType::Loading |
| | | && pEqLoadPort[s]->getPortMode() == PortMode::ReadyToLoad) { |
| | | m_pActiveRobotTask = createTransferTask(pEqLoadPort[s], pEqTar[t], primaryType, secondaryType); |
| | | if (m_pActiveRobotTask != nullptr) { |
| | | goto PORT_GET; |
| | | } |
| | |
| | | LOGI("创建新任务<%s>...", strDescription.c_str()); |
| | | continue; |
| | | } |
| | | |
| | | |
| | | // Measurement -> LoadPort |
| | | |
| | | |
| | | |
| | | unlock(); |
| | | |
| | |
| | | |
| | | // 读标志位 |
| | | for (auto item : m_listEquipment) { |
| | | if (item->getID() == EQ_ID_Bonder1 || |
| | | item->getID() == EQ_ID_Bonder2) { |
| | | const StationIdentifier& station = item->getStation(); |
| | | MemoryBlock& block = item->getReadBitBlock(); |
| | | //if (item->getID() == EQ_ID_Bonder1 || |
| | | // item->getID() == EQ_ID_Bonder2) { |
| | | // const StationIdentifier& station = item->getStation(); |
| | | // MemoryBlock& block = item->getReadBitBlock(); |
| | | |
| | | int nRet = m_cclink.ReadData2(station, (DeviceType)block.type, |
| | | block.start, block.size, block.buffer); |
| | | if (0 == nRet) { |
| | | item->onReceiveLBData(block.buffer, block.size); |
| | | } |
| | | // int nRet = m_cclink.ReadData2(station, (DeviceType)block.type, |
| | | // block.start, block.size, block.buffer); |
| | | // if (0 == nRet) { |
| | | // item->onReceiveLBData(block.buffer, block.size); |
| | | // } |
| | | //} |
| | | const StationIdentifier& station = item->getStation(); |
| | | MemoryBlock& block = item->getReadBitBlock(); |
| | | |
| | | int nRet = m_cclink.ReadData2(station, (DeviceType)block.type, |
| | | block.start, block.size, block.buffer); |
| | | if (0 == nRet) { |
| | | item->onReceiveLBData(block.buffer, block.size); |
| | | } |
| | | } |
| | | } |
| | |
| | | pEquipment->setBaseAlarmId(BASE_ALARM_EFEM); |
| | | pEquipment->setName("VacuumBake(G1)"); |
| | | pEquipment->setDescription("VacuumBake(G1)."); |
| | | pEquipment->setReadBitBlock(0x4000, 0x45ff); |
| | | pEquipment->setReadBitBlock(0x5c00, 0x66ff); |
| | | pEquipment->setStation(0, 255); |
| | | addToEquipmentList(pEquipment); |
| | | |
| | |
| | | pEquipment->setBaseAlarmId(BASE_ALARM_EFEM); |
| | | pEquipment->setName("BakeCooling"); |
| | | pEquipment->setDescription("BakeCooling."); |
| | | pEquipment->setReadBitBlock(0x4000, 0x45ff); |
| | | pEquipment->setReadBitBlock(0x5100, 0x5bff); |
| | | pEquipment->setStation(0, 255); |
| | | addToEquipmentList(pEquipment); |
| | | |
| | |
| | | if (pSrcSlot != nullptr && nullptr != pTarSlot) { |
| | | pTask = new CRobotTask(); |
| | | pTask->setContext(pSrcSlot->getContext()); |
| | | pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM)); |
| | | pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(), |
| | | pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo()); |
| | | } |