chenluhua1980
2026-01-08 9c9100b078e9ac4ee7ed61500b4d7c7a74207549
SourceCode/Bond/Servo/CLoadPort.cpp
@@ -364,7 +364,6 @@
      // 模拟测试
      /*
      if (m_nIndex == 0) {
         static int ii = 0;
         ii++;
@@ -377,6 +376,7 @@
            portStatusReport.setCassetteId("CID1001");
            int nRet = portStatusReport.serialize(szBuffer, 64);
            decodePortStatusReport(pStep, szBuffer, 64);
            LOGI("<CLoadPort>Port1载入模拟数据, id:CID1001 map: 0xf");
         }
      }
      if (m_nIndex == 1) {
@@ -391,9 +391,9 @@
            portStatusReport.setCassetteId("CID1004");
            int nRet = portStatusReport.serialize(szBuffer, 64);
            decodePortStatusReport(pStep, szBuffer, 64);
            LOGI("<CLoadPort>Port2载入模拟数据, id:CID1004 map: 0xff");
         }
      }
      */
   }
   void CLoadPort::serialize(CArchive& ar)
@@ -559,6 +559,11 @@
   std::string& CLoadPort::getCassetteId()
   {
      return m_portStatusReport.getCassetteId();
   }
   void CLoadPort::simulateSetCassetteId(const char* pszCarrierId)
   {
      m_portStatusReport.setCassetteId(pszCarrierId);
   }
   int CLoadPort::getLoadingCassetteType()
@@ -937,25 +942,13 @@
      // 当port状态为InUse, 比较map
      if (m_portStatusReport.getPortStatus() == PORT_INUSE) {
         if (m_isCompareMapsBeforeProceeding) {
            short scanMap = getScanCassetteMap();
            short downloadMap = getDownloadCassetteMap();
            if (scanMap == downloadMap) {
               generateGlassList(scanMap);
               this->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
            }
            else {
               this->sendCassetteCtrlCmd(CCC_PROCESS_CANCEL, nullptr, 0, 0, 0, nullptr, nullptr);
         // 生成玻璃列表:来自 EFEM 扫描到的 map
         generateGlassList(getScanCassetteMap());
               // 抛出到应用层做提示
               if (m_listener.onMapMismatch != nullptr) {
                  m_listener.onMapMismatch(this, scanMap, downloadMap);
               }
            }
         }
         else {
            // 抛出到应用层做选择要加工的片子
            generateGlassList(getScanCassetteMap());
         // CompareMapsBeforeProceeding:不在此处自动 Start/Cancel,改为等待 Host 决策(ProceedWithCarrier/ProceedWithSlotMap/CarrierRelease)
         // Host 决策入口:S3F17 CarrierAction -> listener.onCarrierAction -> CMaster::proceedWithCarrier()/carrierRelease()
         if (m_isCompareMapsBeforeProceeding) {
            // 这里仅等待,具体上报由上层在 PORT_INUSE 事件中触发(S6F11 CheckSlotMap)
         }
      }
      if (m_listener.onPortStatusChanged != nullptr) {
@@ -1324,4 +1317,9 @@
   {
      m_isCompareMapsBeforeProceeding = bCompare;
   }
   BOOL CLoadPort::isCompareMapsBeforeProceeding() const
   {
      return m_isCompareMapsBeforeProceeding;
   }
}