LAPTOP-SNT8I5JK\Boounion
2025-05-29 258d9d2d72bbf199cd86fd3e7bd824e1f117bab8
SourceCode/Bond/Servo/CMaster.cpp
@@ -33,7 +33,7 @@
   CMaster::CMaster()
   {
      m_listener = {nullptr, nullptr, nullptr, nullptr, nullptr, nullptr};
      m_listener = {};
      m_bDataModify = FALSE;
      m_hEventReadBitsThreadExit[0] = ::CreateEvent(NULL, TRUE, FALSE, NULL);
      m_hEventReadBitsThreadExit[1] = ::CreateEvent(NULL, TRUE, FALSE, NULL);
@@ -83,12 +83,7 @@
   void CMaster::setListener(MasterListener listener)
   {
      m_listener.onMasterStateChanged = listener.onMasterStateChanged;
      m_listener.onEqAlive = listener.onEqAlive;
      m_listener.onEqCimStateChanged = listener.onEqCimStateChanged;
      m_listener.onEqAlarm = listener.onEqAlarm;
      m_listener.onEqVcrEventReport = listener.onEqVcrEventReport;
      m_listener.onEqDataChanged = listener.onEqDataChanged;
      m_listener = listener;
   }
   CRobotTask* CMaster::getActiveRobotTask()
@@ -469,19 +464,54 @@
         CEquipment* p = (CEquipment*)pEquipment;
         // 取放片,更新当前搬送任务
         // 取片,更新当前搬送任务
         BOOL bOk = FALSE;
         lock();
         if (m_pActiveRobotTask != nullptr && 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()) {
         if (m_pActiveRobotTask != nullptr) {
            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()) {
                     bOk = TRUE;
                     LOGI("<CMaster>onPreFethedOutJob, 已校验数据一致性.");
                  }
               }
            }
            else if (p->getID() == EQ_ID_ARM_TRAY1 || p->getID() == EQ_ID_ARM_TRAY2) {
               bOk = TRUE;
            }
         }
         unlock();
         if (!bOk) {
            LOGE("<CMaster>onPreFethedOutJob, 数据校验失败.");
         }
         return bOk;
      };
      listener.onPreStoredJob = [&](void* pEquipment, CJobDataB* pJobDataB, short& slot) -> BOOL {
         CEquipment* p = (CEquipment*)pEquipment;
         // 放片,更新当前搬送任务
         BOOL bOk = FALSE;
         lock();
         if (m_pActiveRobotTask != nullptr) {
            if (m_pActiveRobotTask->getTarPosition() == p->getID()) {
               CGlass* pGlass = p->getGlassFromSlot(m_pActiveRobotTask->getTarSlot());
               if (pGlass == nullptr) {
                  bOk = TRUE;
                  slot = m_pActiveRobotTask->getTarSlot();
                  LOGI("<CMaster>onPreFethedOutJob, 已校验数据一致性.");
               }
            }
            else if (p->getID() == EQ_ID_ARM_TRAY1 || p->getID() == EQ_ID_ARM_TRAY2) {
               slot = 1;
               bOk = TRUE;
            }
         }
         unlock();
@@ -513,7 +543,17 @@
            lock();
            if (m_pActiveRobotTask != nullptr && m_pActiveRobotTask->getTarPosition() == p->getID()) {
               m_pActiveRobotTask->stored();
               m_pActiveRobotTask->completed();
               LOGI("放片完成...");
               // 完成此条搬送任务,但要把数据和消息上抛应用层
               unlock();
               lock();
               delete m_pActiveRobotTask;
               m_pActiveRobotTask = nullptr;
            }
            unlock();
         }