LAPTOP-SNT8I5JK\Boounion
2025-08-22 7a20b6f44d2ea3f23ef8d228ec4c1424925e5dfb
SourceCode/Bond/Servo/CMaster.cpp
@@ -55,6 +55,7 @@
      m_pActiveRobotTask = nullptr;
      m_nLastError = 0;
      m_isCompareMapsBeforeProceeding = FALSE;
      m_bJobMode = FALSE;
      m_bEnableEventReport = true;
      m_bEnableAlarmReport = true;
      m_bContinuousTransfer = false;
@@ -684,7 +685,7 @@
               if (!rmd.armState[0] && pLoadPorts[s]->isEnable()
                  && (pt == PortType::Loading || pt == PortType::Both)
                  && pLoadPorts[s]->getPortStatus() == PORT_INUSE) {
                  m_pActiveRobotTask = createTransferTask(pLoadPorts[s], pAligner, primaryType, secondaryType);
                  m_pActiveRobotTask = createTransferTask(pLoadPorts[s], pAligner, primaryType, secondaryType, m_bJobMode);
                  if (m_pActiveRobotTask != nullptr) {
                     pEFEM->setContext(m_pActiveRobotTask->getContext());
                     goto PORT_GET;
@@ -1143,6 +1144,25 @@
      };
      listener.onPortStatusChanged = [&](void* pEquipment, short status, __int64 data) {
         LOGE("<Master-%s>onPortStatusChanged。status=%d, data=%lld", ((CEquipment*)pEquipment)->getName().c_str(), status);
         if (status == PORT_INUSE && m_pControlJob != nullptr) {
            CLoadPort* pPort = (CLoadPort*)pEquipment;
            auto pjs = m_pControlJob->getPjs();
            for (auto pj : pjs) {
               auto carrier = pj->getCarrier(pPort->getCassetteId());
               if (carrier != nullptr) {
                  for (auto slot : carrier->slots) {
                     CGlass* pGlass = pPort->getGlassFromSlot(slot);
                     carrier->contexts.push_back((void*)pGlass);
                     if (pGlass != nullptr) {
                        pGlass->setProcessJob(pj);
                     }
                  }
               }
            }
         }
         if (m_listener.onLoadPortStatusChanged != nullptr) {
            m_listener.onLoadPortStatusChanged(this, (CEquipment*)pEquipment, status, data);
         }
@@ -1548,7 +1568,7 @@
   static int taskSeqNo = 0;
   CRobotTask* CMaster::createTransferTask(CEquipment* pSrcEq, CEquipment* pTarEq,
      MaterialsType primaryType/* = MaterialsType::G1*/, MaterialsType secondaryType/* = MaterialsType::G2*/,
      int armNo/* = 1*/)
      int armNo/* = 1*/, BOOL bJobMode/* = FALSE*/)
   {
      if (!pSrcEq->IsEnabled()) { 
         return nullptr;
@@ -1557,10 +1577,10 @@
      CRobotTask* pTask = nullptr;
      CSlot* pSrcSlot, * pTarSlot;
      pTarSlot = pTarEq->getAvailableSlotForGlass(primaryType);
      pSrcSlot = pSrcEq->getProcessedSlot(primaryType);
      pSrcSlot = pSrcEq->getProcessedSlot(primaryType, bJobMode);
      if (pSrcSlot == nullptr || nullptr == pTarSlot) {
         pTarSlot = pTarEq->getAvailableSlotForGlass(secondaryType);
         pSrcSlot = pSrcEq->getProcessedSlot(secondaryType);
         pSrcSlot = pSrcEq->getProcessedSlot(secondaryType, bJobMode);
      }
@@ -1802,6 +1822,11 @@
      m_isCompareMapsBeforeProceeding = bCompare;
   }
   void CMaster::setJobMode(BOOL bJobMode)
   {
      m_bJobMode = bJobMode;
   }
   void CMaster::datetimeSync(SYSTEMTIME& time)
   {
      for (auto item : m_listEquipment) {
@@ -1868,7 +1893,7 @@
      m_processJobs = temp;
      this->saveState();
      return m_processJobs.size();
      return (int)m_processJobs.size();
   }
   std::vector<CProcessJob*>& CMaster::getProcessJobs()