LAPTOP-SNT8I5JK\Boounion
2025-09-15 52e054f5607bc586bbdd68c69a31d100dc316e0c
SourceCode/Bond/Servo/Model.cpp
@@ -8,6 +8,7 @@
#include "CGlassPool.h"
#include "TransferManager.h"
#include "RecipeManager.h"
#include "GlassLogDb.h"
CModel::CModel()
@@ -50,6 +51,9 @@
         cassetteType, transferMode, autoChangeEnable);
      m_master.setPortType(i, portEnable, portType, portMode, cassetteType,
         transferMode, autoChangeEnable);
      int seed = m_configuration.getPortCassetteSnSeed(i + 1);
      m_master.setPortCassetteSnSeed(i + 1, seed);
   }
}
@@ -246,9 +250,18 @@
         alarmData.strUnitName = alarmManager.getUnitNameById(alarmData.nDeviceId, alarmData.nUnitId);
         alarmData.strStartTime = CToolUnits::timeToString2(CToolUnits::getTimestamp());
         alarmData.strEndTime = "";
         alarmData.strDescription = "";
         const AlarmInfo* alarmInfo = alarmManager.getAlarmInfoByID(alarmData.nId);
         alarmData.strDescription = alarmInfo != nullptr ? alarmInfo->strAlarmText : "";
         if (alarmInfo != nullptr) {
            if (alarmInfo->strDescription.empty()) {
               alarmData.strDescription = alarmInfo->strAlarmText;
            }
            else {
               alarmData.strDescription = alarmInfo->strAlarmText + "," + alarmInfo->strDescription + ".";
            }
         }
         int nAlarmEventId = 0;
         bool result = alarmManager.addAlarm(alarmData, nAlarmEventId);
@@ -382,10 +395,64 @@
         }
         m_hsmsPassive.requestEventReportSend_CarrierID_Readed();
      }
      else if (status == PORT_BLOCKED) {
         SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
         if (pLoadPort != nullptr) {
            m_hsmsPassive.setVariableValue("BlockedPortId", pLoadPort->getID());
         }
         m_hsmsPassive.requestEventReportSend_Port_Blocked();
      }
      else if (status == PORT_LOAD_READY) {
         SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
         if (pLoadPort != nullptr) {
            m_hsmsPassive.setVariableValue("LoadReadyPortId", pLoadPort->getID());
         }
         m_hsmsPassive.requestEventReportSend_Port_Load_Ready();
      }
      else if (status == PORT_UNLOAD_READY) {
         SERVO::CLoadPort* pLoadPort = dynamic_cast<SERVO::CLoadPort*>(pEquipment);
         if (pLoadPort != nullptr) {
            m_hsmsPassive.setVariableValue("UnloadReadyPortId", pLoadPort->getID());
         }
         m_hsmsPassive.requestEventReportSend_Port_Unload_Ready();
      }
      notifyPtr(RX_CODE_LOADPORT_STATUS_CHANGED, pEquipment);
   };
   masterListener.onCTRoundEnd = [&](void* pMaster, int round) {
      m_configuration.setContinuousTransferCount(round);
   };
   masterListener.onCjStart = [&](void* pMaster, void* pj) {
      m_hsmsPassive.setVariableValue("CJStartID", ((SERVO::CControlJob*)pj)->id().c_str());
      m_hsmsPassive.requestEventReportSend_CJ_Start();
   };
   masterListener.onCjEnd = [&](void* pMaster, void* pj) {
      m_hsmsPassive.setVariableValue("CJEndID", ((SERVO::CControlJob*)pj)->id().c_str());
      m_hsmsPassive.requestEventReportSend_CJ_End();
      // 结批,保存ControlJob
      //
   };
   masterListener.onPjStart = [&](void* pMaster, void* pj) {
      m_hsmsPassive.setVariableValue("PJStartID", ((SERVO::CProcessJob*)pj)->id().c_str());
      m_hsmsPassive.requestEventReportSend_PJ_Start();
   };
   masterListener.onPjEnd = [&](void* pMaster, void* pj) {
      m_hsmsPassive.setVariableValue("PJEndID", ((SERVO::CProcessJob*)pj)->id().c_str());
      m_hsmsPassive.requestEventReportSend_PJ_End();
   };
   masterListener.onPanelStart = [&](void* pMaster, void* pPanel) {
      m_hsmsPassive.setVariableValue("PanelStartID", ((SERVO::CGlass*)pPanel)->getID().c_str());
      m_hsmsPassive.requestEventReportSend_Panel_Start();
   };
   masterListener.onPanelEnd = [&](void* pMaster, void* pPanel) {
      m_hsmsPassive.setVariableValue("PanelEndID", ((SERVO::CGlass*)pPanel)->getID().c_str());
      m_hsmsPassive.requestEventReportSend_Panel_End();
      auto& db = GlassLogDb::Instance();
      db.insertFromCGlass((*(SERVO::CGlass*)pPanel));
      SERVO::CGlass* pBuddy = ((SERVO::CGlass*)pPanel)->getBuddy();
      if (pBuddy != nullptr) {
         db.insertFromCGlass(*pBuddy);
      }
   };
   m_master.setListener(masterListener);
   m_master.setContinuousTransferCount(m_configuration.getContinuousTransferCount());
@@ -413,12 +480,21 @@
   alarmManager.readAlarmFile(szBuffer);
   // Glass数据库
   strLogDir.Format(_T("%s\\db\\process.db"), (LPTSTR)(LPCTSTR)m_strWorkDir);
   std::string path((LPTSTR)(LPCTSTR)strLogDir);
   GlassLogDb::Init(path);
   return 0;
}
int CModel::term()
{
   m_configuration.setPortCassetteSnSeed(1, m_master.getPortCassetteSnSeed(1));
   m_configuration.setPortCassetteSnSeed(2, m_master.getPortCassetteSnSeed(2));
   m_configuration.setPortCassetteSnSeed(3, m_master.getPortCassetteSnSeed(3));
   m_configuration.setPortCassetteSnSeed(4, m_master.getPortCassetteSnSeed(4));
   m_hsmsPassive.saveCache();
   m_hsmsPassive.term();
   CLog::GetLog()->SetOnLogCallback(nullptr);