SourceCode/Bond/Servo/Model.cpp
@@ -2,6 +2,9 @@
#include "Model.h"
#include "Log.h"
#include "Common.h"
#include "ToolUnits.h"
#include "CEqAlarmStep.h"
#include "AlarmManager.h"
CModel::CModel()
@@ -33,7 +36,7 @@
   m_configuration.getUnitId(strUnitId);
   // 机器型号和软件版本号应从配置中读取,当前先固定值
   CString strModeType = _T("Bond2860");
   CString strModeType = _T("Master");
   CString strSoftRev = _T("1.0.2");
@@ -99,10 +102,70 @@
   masterListener.onEqCimStateChanged = [&](void* pMaster, SERVO::CEquipment* pEquipment, BOOL bOn) -> void {
      LOGI("<CModel>Equipment Cim State:%s(%s).\n", pEquipment->getName().c_str(),
         bOn ? _T("ON") : _T("OFF"));
      notifyPtr(RX_CODE_EQ_ALIVE, pEquipment);
   };
   masterListener.onEqAlarm = [&](void* pMaster, SERVO::CEquipment* pEquipment, int state, int alarmId, int unitId, int level) -> void {
      AlarmManager& alarmManager = AlarmManager::getInstance();
      std::string strAlarmText;
      const AlarmInfo* pAlarmInfo = alarmManager.getAlarmInfoByID(alarmId);
      if (pAlarmInfo != nullptr) {
         strAlarmText = pAlarmInfo->strAlarmText;
      }
      if (state == 1) {
         AlarmData alarmData;
         alarmData.nId = alarmId;
         alarmData.nSeverityLevel = level;
         alarmData.nDeviceId = pEquipment->getID();
         alarmData.nUnitId = unitId;
         alarmData.strDeviceName = alarmManager.getDeviceNameById(alarmData.nDeviceId);
         alarmData.strUnitName = alarmManager.getUnitNameById(alarmData.nDeviceId, alarmData.nUnitId);
         alarmData.strStartTime = CToolUnits::timeToString2(CToolUnits::getTimestamp());
         alarmData.strEndTime = "";
         const AlarmInfo* alarmInfo = alarmManager.getAlarmInfoByID(alarmData.nId);
         alarmData.strDescription = alarmInfo != nullptr ? alarmInfo->strAlarmText : "";
         int nAlarmEventId = 0;
         bool result = alarmManager.addAlarm(alarmData, nAlarmEventId);
         if (result) {
            LOGI("<CModel> Alarm added successfully!");
         }
         else {
            LOGE("<CModel> Failed to add alarm.");
         }
         notify(RX_CODE_ALARM_SET);
      }
      else {
         alarmManager.clearAlarmByAttributes(alarmId,
            pEquipment->getID(),
            unitId,
            CToolUnits::getCurrentTimeString());
         notify(RX_CODE_ALARM_CLEAR);
      }
      m_hsmsPassive.requestAlarmReport(state,
         pEquipment->getBaseAlarmId() + alarmId,
         strAlarmText.c_str());
   };
   m_master.setListener(masterListener);
   // master 设置缓存文件
   CString strMasterDataFile;
   strMasterDataFile.Format(_T("%s\\Master.dat"), (LPTSTR)(LPCTSTR)m_strWorkDir);
   m_master.setCacheFilepath((LPTSTR)(LPCTSTR)strMasterDataFile);
   // 加载警告信息
   AlarmManager& alarmManager = AlarmManager::getInstance();
   char szBuffer[MAX_PATH];
   sprintf_s(szBuffer, MAX_PATH, "%s\\AlarmList.csv", (LPTSTR)(LPCTSTR)m_strWorkDir);
   alarmManager.readAlarmFile(szBuffer);
   return 0;
}