LAPTOP-SNT8I5JK\Boounion
2025-06-06 7b3161e949bb32f91d5cebc9d52147198e360b6b
SourceCode/Bond/Servo/CEquipment.cpp
@@ -35,6 +35,7 @@
      m_bLocalAlarm = FALSE;
      m_bAutoRecipeChange = FALSE;
      m_bVCREnable[0] = FALSE;
      memset(m_bLinkSignal, 0, sizeof(m_bLinkSignal));
      m_pCclink = nullptr;
      m_nBaseAlarmId = 0;
      m_pArm = nullptr;
@@ -363,9 +364,20 @@
      }
      */
      // 以下解释和处理数据
      // 连接信号解释和保存
      BOOL bFlag;
      int index = 0x540;
      int index = 0;
      for (int i = 0; i < 8; i++) {
         m_bLinkSignal[i][SIGNAL_UPSTREAM_INLINE] = isBitOn(pszData, size, index + 0);
         m_bLinkSignal[i][SIGNAL_UPSTREAM_TROUBLE] = isBitOn(pszData, size, index + 1);
         m_bLinkSignal[i][SIGNAL_INTERLOCK] = isBitOn(pszData, size, index + 2);
         m_bLinkSignal[i][SIGNAL_SEND_ABLE] = isBitOn(pszData, size, index + 3);
         index += 0x40;
      }
      // 其它信号及响应
      index = 0x540;
      // alive
@@ -580,6 +592,28 @@
   {
      if (index >= VCR_MAX) return FALSE;
      return m_bVCREnable[index];
   }
   BOOL CEquipment::isLinkSignalOn(unsigned int path, unsigned int signal)
   {
      if (path >= PATH_MAX) return FALSE;
      if (signal >= SIGNAL_MAX) return FALSE;
      return m_bLinkSignal[path][signal];
   }
   void CEquipment::setLinkSignal(unsigned int path, unsigned int signal, BOOL bOn)
   {
      if (path >= PATH_MAX) return;
      if (signal >= SIGNAL_MAX) return;
      m_bLinkSignal[path][signal] = bOn;
   }
   void CEquipment::setLinkSignalBlock(unsigned int path, BOOL* pSignal)
   {
      if (path >= PATH_MAX) return;
      for (int i = 0; i < SIGNAL_MAX; i++) {
         m_bLinkSignal[path][i] = pSignal[i];
      }
   }
   int CEquipment::onStepEvent(CStep* pStep, int code)
@@ -1114,11 +1148,14 @@
         if (m_slot[i].isLock()) continue;
         CGlass* pGlass = (CGlass*)m_slot[i].getContext();
         if (pGlass == nullptr) continue;
         if(!m_bLinkSignal[0][SIGNAL_UPSTREAM_INLINE]
            || m_bLinkSignal[0][SIGNAL_UPSTREAM_TROUBLE]
            || !m_bLinkSignal[0][SIGNAL_INTERLOCK]
            || !m_bLinkSignal[0][SIGNAL_SEND_ABLE] ) continue;
         MaterialsType glassType = pGlass->getType();
         if (glassType == MaterialsType::G1 && putSlotType == MaterialsType::G2) continue;
         if (glassType == MaterialsType::G2 && putSlotType == MaterialsType::G1) continue;
         if (!pGlass->isProcessed(m_nID, 0)) continue;
         return &m_slot[i];
      }