chenluhua1980
2026-01-05 6a0f19f181b6968d86aca3885662aabedefc3a3e
SourceCode/Bond/Servo/CMaster.cpp
@@ -1483,6 +1483,7 @@
                     this->saveState();
                     LOGE("<Master>ProcessJob(%s)完成.",
                        pJob->id().c_str());
                     processJobFromInPorcessToComplete(pJob);
                     if (m_listener.onPjEnd != nullptr) {
                        m_listener.onPjEnd(this, pJob);
                     }
@@ -1551,6 +1552,10 @@
            if (pGlass != nullptr) {
               m_pCollector->batchStop(SlotToMid(eqid, slotNo));
            }
         }
         if (m_listener.onProcessStateChanged != nullptr) {
            m_listener.onProcessStateChanged(this, (CEquipment*)pEquipment, slotNo, state);
         }
      };
      listener.onMapMismatch = [&](void* pEquipment, short scanMap, short downMap) {
@@ -2600,15 +2605,31 @@
      }
      m_processJobs = temp;
      // 重置各端口 DownloadMap(Host/本地勾选的期望加工槽位)
      for (int i = 0; i < 4; i++) {
         auto* pPort = (CLoadPort*)getEquipment(EQ_ID_LOADPORT1 + i);
         if (pPort != nullptr) {
            pPort->setDownloadCassetteMap(0);
         }
      }
      // 更新context
      std::vector<uint8_t> newSlots;
      std::vector<void*> newContexts;
      for (auto pj : m_processJobs) {
         for (auto& c : pj->carriers()) {
            auto pPort = getPortWithCarrierId(c.carrierId);
            if (pPort == nullptr) continue;
            short downloadMap = 0;
            for (auto s : c.slots) {
               if (s >= 1 && s <= 8) {
                  downloadMap |= (short)(1 << (s - 1));
               }
            }
            pPort->setDownloadCassetteMap((short)(pPort->getDownloadCassetteMap() | downloadMap));
            std::vector<uint8_t> newSlots;
            std::vector<void*> newContexts;
            for (auto s : c.slots) {
               auto pGlass = pPort->getGlassFromSlot(s);
               if (pGlass == nullptr) continue;