| SourceCode/Bond/Servo/CEquipment.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEquipment.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CMaster.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CMaster.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CPageGraph2.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
SourceCode/Bond/Servo/CEquipment.cpp
@@ -335,22 +335,23 @@ } // 梳理各玻璃之间的绑定关系 /* Lock(); std::list<CGlass*> list = m_glassList; for (auto item : list) { std::string& strBuddyId = item->getBuddyId(); if (!strBuddyId.empty()) { for (auto item2 : m_glassList) { if (strBuddyId.compare(item2->getID()) == 0) { item->setBuddy(item2); TRACE("绑定关系: %s <- %s\n", item->getID().c_str(), item2->getID().c_str()); for (int i = 0; i < SLOT_MAX; i++) { CGlass* pGlass = (CGlass*)m_slot[i].getContext(); if (pGlass != nullptr) { std::string& strBuddyId = pGlass->getBuddyId(); if (!strBuddyId.empty()) { for (int j = 0; j < SLOT_MAX; j++) { CGlass* pBudy = (CGlass*)m_slot[j].getContext(); if (pBudy != nullptr && strBuddyId.compare(pBudy->getID()) == 0) { pGlass->setBuddy(pBudy); TRACE("绑定关系: %s <- %s\n", pGlass->getID().c_str(), pBudy->getID().c_str()); } } } } } Unlock(); */ } } @@ -1163,6 +1164,32 @@ return nullptr; } CSlot* CEquipment::getProcessedSlot2(MaterialsType putSlotType, const std::vector<int>& candidates) { for (auto item : candidates) { for (int i = 0; i < SLOT_MAX; i++) { if (item == i + 1) { if (!m_slot[i].isEnable()) continue; if (m_slot[i].isLock()) continue; CGlass* pGlass = (CGlass*)m_slot[i].getContext(); if (pGlass == nullptr) continue; if (!m_bLinkSignal[0][SIGNAL_UPSTREAM_INLINE] || m_bLinkSignal[0][SIGNAL_UPSTREAM_TROUBLE] || !m_bLinkSignal[0][SIGNAL_INTERLOCK] || !m_bLinkSignal[0][SIGNAL_SEND_ABLE]) continue; MaterialsType glassType = pGlass->getType(); if (glassType == MaterialsType::G1 && putSlotType == MaterialsType::G2) continue; if (glassType == MaterialsType::G2 && putSlotType == MaterialsType::G1) continue; return &m_slot[i]; } } } return nullptr; } CGlass* CEquipment::getGlassFromSlot(int slotNo) { CSlot* pSlot = nullptr; SourceCode/Bond/Servo/CEquipment.h
@@ -164,6 +164,7 @@ // 获取一个指定物料类型(G1,G2,G1&G2)的且已经加工处理的槽位 CSlot* getProcessedSlot(MaterialsType putSlotType); CSlot* getProcessedSlot2(MaterialsType putSlotType, const std::vector<int>& candidates); // 获取玻璃物料 CGlass* getGlassFromSlot(int slotNo); SourceCode/Bond/Servo/CMaster.cpp
@@ -367,8 +367,10 @@ } // Bonder -> BakeCooling m_pActiveRobotTask = createTransferTask_bonder_to_bakecooling(pBonder1, pBakeCooling, primaryType, secondaryType); // BakeCooling内部 // Bake -> Cooling m_pActiveRobotTask = createTransferTask_bake_to_cooling(pBakeCooling); if (m_pActiveRobotTask != nullptr) { std::string strDescription = m_pActiveRobotTask->getDescription(); unlock(); @@ -379,7 +381,20 @@ continue; } m_pActiveRobotTask = createTransferTask_bonder_to_bakecooling(pBonder2, pBakeCooling, primaryType, secondaryType); // Bonder -> BakeCooling m_pActiveRobotTask = createTransferTask_bonder_to_bakecooling(pBonder1, pBakeCooling); if (m_pActiveRobotTask != nullptr) { 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; } m_pActiveRobotTask = createTransferTask_bonder_to_bakecooling(pBonder2, pBakeCooling); if (m_pActiveRobotTask != nullptr) { std::string strDescription = m_pActiveRobotTask->getDescription(); unlock(); @@ -525,6 +540,7 @@ break; } // 读标志位 for (auto item : m_listEquipment) { if (item->getID() == EQ_ID_Bonder1 || item->getID() == EQ_ID_Bonder2) { @@ -1112,21 +1128,36 @@ return pTask; } CRobotTask* CMaster::createTransferTask_bonder_to_bakecooling(CEquipment* pSrcEq, CEquipment* pTarEq, MaterialsType primaryType/* = MaterialsType::G1*/, MaterialsType secondaryType/* = MaterialsType::G2*/) CRobotTask* CMaster::createTransferTask_bonder_to_bakecooling(CEquipment* pSrcEq, CEquipment* pTarEq) { std::vector<int> slots = {1, 2}; CRobotTask* pTask = nullptr; CSlot* pSrcSlot, * pTarSlot; pTarSlot = pTarEq->getAvailableSlotForGlass2(primaryType, slots); pSrcSlot = pSrcEq->getProcessedSlot(primaryType); if (pSrcSlot == nullptr || nullptr == pTarSlot) { pTarSlot = pTarEq->getAvailableSlotForGlass(secondaryType); pSrcSlot = pSrcEq->getProcessedSlot(secondaryType); pTarSlot = pTarEq->getAvailableSlotForGlass2(MaterialsType::G1, slots); pSrcSlot = pSrcEq->getProcessedSlot(MaterialsType::G1); if (pSrcSlot != nullptr && nullptr != pTarSlot) { pTask = new CRobotTask(); pTask->setContext(pSrcSlot->getContext()); pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(), pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo()); } return pTask; } CRobotTask* CMaster::createTransferTask_bake_to_cooling(CEquipment* pSrcEq) { std::vector<int> slotsTar = { 3, 4 }; std::vector<int> slotsSrc = { 1, 2 }; CRobotTask* pTask = nullptr; CSlot* pSrcSlot, * pTarSlot; pTarSlot = pSrcEq->getAvailableSlotForGlass2(MaterialsType::G1, slotsTar); pSrcSlot = pSrcEq->getProcessedSlot2(MaterialsType::G1, slotsSrc); if (pSrcSlot != nullptr && nullptr != pTarSlot) { pTask = new CRobotTask(); pTask->setContext(pSrcSlot->getContext()); SourceCode/Bond/Servo/CMaster.h
@@ -86,8 +86,8 @@ void setState(MASTERSTATE state); CRobotTask* createTransferTask(CEquipment* pSrcEq, CEquipment* pTarEq, MaterialsType primaryType = MaterialsType::G1, MaterialsType secondaryType = MaterialsType::G2); CRobotTask* createTransferTask_bonder_to_bakecooling(CEquipment* pSrcEq, CEquipment* pTarEq, MaterialsType primaryType = MaterialsType::G1, MaterialsType secondaryType = MaterialsType::G2); CRobotTask* createTransferTask_bonder_to_bakecooling(CEquipment* pSrcEq, CEquipment* pTarEq); CRobotTask* createTransferTask_bake_to_cooling(CEquipment* pSrcEq); private: CRITICAL_SECTION m_criticalSection; SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -270,6 +270,16 @@ pEquipment->setLinkSignal(0, SIGNAL_INTERLOCK, TRUE); pEquipment->setLinkSignal(0, SIGNAL_SEND_ABLE, TRUE); } if (pEquipment != nullptr && (pEquipment->getID() == EQ_ID_Bonder1 || pEquipment->getID() == EQ_ID_Bonder2)) { SERVO::CGlass* pGlass = pEquipment->getAnyGlass(); if (pGlass != nullptr) { SERVO::CProcessData pd; pd.setGlassId(pGlass->getID().c_str()); pEquipment->onProcessData(&pd); } } } else if (nCmd == ID_EQSGRAPHITEM_TEST5) { SERVO::CEquipment* pEquipment = (SERVO::CEquipment*)pItem->pData;