LAPTOP-SNT8I5JK\Boounion
2025-07-28 bfe14e41fa5b07771d78af4511ba18d706bc23cc
SourceCode/Bond/Servo/CEquipment.cpp
@@ -7,22 +7,6 @@
#include "Servo.h"
#define CHECK_READ_STEP_SIGNAL(addr, data, size) {                     \
   BOOL bFlag = isBitOn(data, size, addr);                           \
   SERVO::CStep* pStep = getStep(addr);                           \
   if (pStep != nullptr) {                                       \
      ((CReadStep*)pStep)->onReadSignal(bFlag ? addr : 0);            \
   }                                                      \
}
#define CHECK_WRITE_STEP_SIGNAL(addr, data, size) {                     \
   BOOL bFlag = isBitOn(data, size, addr);                           \
   SERVO::CStep* pStep = getStep(addr);                           \
   if (pStep != nullptr) {                                       \
      ((CWriteStep*)pStep)->onRecvSignal(bFlag ? addr : 0);            \
   }                                                      \
}
namespace SERVO {
   CEquipment::CEquipment() : m_nID(0), m_strName(""), m_strDescription(""), m_station(0, 255)
@@ -1313,6 +1297,7 @@
         CGlass* pGlass = (CGlass*)m_slot[i].getContext();
         if (!isSlotProcessed(i)) continue;
         if (pGlass == nullptr) continue;
         if(pGlass->getInspResult(m_nID, 0) == InspResult::Fail) continue;
         int lsPath = m_slot[i].getLinkSignalPath();
         if(!m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_INLINE]
            || m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_TROUBLE]
@@ -1352,6 +1337,26 @@
               return &m_slot[i];
            }
         }
      }
      return nullptr;
   }
   CSlot* CEquipment::getInspFailSlot()
   {
      for (int i = 0; i < SLOT_MAX; i++) {
         if (!m_slot[i].isEnable()) continue;
         if (m_slot[i].isLock()) continue;
         CGlass* pGlass = (CGlass*)m_slot[i].getContext();
         if (pGlass == nullptr) continue;
         if (pGlass->getInspResult(m_nID, 0) != InspResult::Fail) continue;
         int lsPath = m_slot[i].getLinkSignalPath();
         if (!m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_INLINE]
            || m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_TROUBLE]
            || !m_bLinkSignalToUpstream[lsPath][SIGNAL_INTERLOCK]
            || !m_bLinkSignalToUpstream[lsPath][SIGNAL_SEND_ABLE]) continue;
         return &m_slot[i];
      }
      return nullptr;
@@ -1397,6 +1402,10 @@
      if (pSlot == nullptr) return -1;
      pSlot->setContext(nullptr);
      if (m_listener.onDataChanged != nullptr) {
         m_listener.onDataChanged(this, EDCC_FETCHOUT_JOB);
      }
      return 0;
   }
@@ -1619,7 +1628,7 @@
      index += sizeof(short);
      CToolUnits::convertString(&pszData[index], 128 * 2, strPanelJudgeData);
      index += 128 * 2;
      CToolUnits::convertString(&pszData[index], 256 * 2, strPanelJudgeData);
      CToolUnits::convertString(&pszData[index], 256 * 2, strPanelGradeData);
      index += 256 * 2;
@@ -1634,6 +1643,15 @@
      pStep->addAttribute(new CAttribute("PanelGradeData",
         strPanelGradeData.c_str(), "", weight++));
      // 更新检测结果
      CGlass* pGlass = getGlassWithCassette(cassetteNo, jobSequenceNo);
      if (pGlass == nullptr) {
         LOGE("<CEquipment-%s>更新Panel Data失败,找不到对应的Glass.cassetteNo=%d, jobSequenceNo=%d",
            getName().c_str(), cassetteNo, jobSequenceNo);
         return -1;
      }
      pGlass->setInspResult(m_nID, 0, judgeStringToInspResult(strPanelJudgeData));
      return 0;
   }
@@ -1974,4 +1992,16 @@
         );
      }
   }
   InspResult CEquipment::judgeStringToInspResult(std::string& strJudge)
   {
      if (strJudge.compare("N") == 0) {
         return InspResult::Fail;
      }
      if (strJudge.compare("G") == 0) {
         return InspResult::Pass;
      }
      return InspResult::NotInspected;
   }
}