LAPTOP-SNT8I5JK\Boounion
2025-03-15 e7a450d2fdc99bd501e1af7dd7c16c477cfea75e
SourceCode/Bond/Servo/CMaster.cpp
@@ -1,4 +1,5 @@
#include "stdafx.h"
#include "Common.h"
#include "CMaster.h"
namespace SERVO {
@@ -12,7 +13,7 @@
   CMaster::CMaster()
   {
      m_listener = {nullptr, nullptr, nullptr};
   }
   CMaster::~CMaster()
@@ -23,15 +24,30 @@
      m_listEquipment.clear();
   }
   void CMaster::setListener(MasterListener listener)
   {
      m_listener.onEqAlive = listener.onEqAlive;
      m_listener.onEqCimStateChanged = listener.onEqCimStateChanged;
      m_listener.onEqStepEvent = listener.onEqStepEvent;
   }
   int CMaster::init()
   {
      LOGI("<Master>正在初始化...");
      StepListener listener;
      listener.onEvent = [&](void* pStep, int code, void* pData) -> void {
         TRACE("<CEquipment>onEvent<%d, 0x%x>.\n", code, pData);
         if (m_listener.onEqStepEvent != nullptr) {
            m_listener.onEqStepEvent((CStep*)pStep, code, pData);
         }
      };
      //    cclink
      if (m_cclink.Connect(CC_LINK_IE_CONTROL_CHANNEL(1)) != 0) {
         LOGE("连接CC-Link失败.");
         return -1;
      }
      else {
         LOGI("连接CC-Link成功.");
@@ -56,15 +72,8 @@
      // 初始化添加各子设备
      {
         CEFEM* pEquipment = new CEFEM();
         pEquipment->setName("EFEM(ROBOT)");
         pEquipment->setDescription("EFEM(ROBOT).");
         pEquipment->setReadBitBlock(0x4000, 0x45ff);
         pEquipment->setStation(1, 2);
         addEquipment(pEquipment);
         LOGE("已添加“EFEM(ROBOT)”.");
      }
      addEFEM(listener);
      /*
      {
         CBonder* pBonder = new CBonder();
@@ -88,12 +97,206 @@
   int CMaster::term()
   {
      LOGI("<Master>正在结束程序.");
      for (auto item : m_listEquipment) {
         item->term();
      }
      return 0;
   }
   int CMaster::addEquipment(CEquipment* pEquipment)
   {
      EquipmentListener listener;
      listener.onAlive = [&](void* pEquipment, BOOL bAlive) -> void {
         CEquipment* p = (CEquipment*)pEquipment;
         if (m_listener.onEqAlive != nullptr) {
            m_listener.onEqAlive(this, p, bAlive);
         }
      };
      listener.onCimStateChanged = [&](void* pEquipment, BOOL bOn) -> void {
         CEquipment* p = (CEquipment*)pEquipment;
         if (m_listener.onEqCimStateChanged != nullptr) {
            m_listener.onEqCimStateChanged(this, p, bOn);
         }
      };
      pEquipment->setListener(listener);
      pEquipment->setCcLink(&m_cclink);
      m_listEquipment.push_back(pEquipment);
      return 0;
   }
   std::list<CEquipment*>& CMaster::getEquipmentList()
   {
      return m_listEquipment;
   }
   CEquipment* CMaster::getEquipment(int id)
   {
      for (auto item : m_listEquipment) {
         if (item->getID() == id) return item;
      }
      return nullptr;
   }
   int CMaster::addEFEM(StepListener& listener)
   {
      CEFEM* pEquipment = new CEFEM();
      pEquipment->setID(EQ_ID_EFEM);
      pEquipment->setBaseAlarmId(BASE_ALARM_EFEM);
      pEquipment->setName("EFEM(ROBOT)");
      pEquipment->setDescription("EFEM(ROBOT).");
      pEquipment->setReadBitBlock(0x4000, 0x45ff);
      pEquipment->setStation(0, 255);
      addEquipment(pEquipment);
      // 添加 step
      {
         CEqModeStep* pStep = new CEqModeStep();
         pStep->setName(STEP_MODE);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x30);
         pStep->setModeDev(0x4a8c);
         if (pEquipment->addStep(0x360, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqStatusStep* pStep = new CEqStatusStep();
         pStep->setName(STEP_STATUS);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x31);
         pStep->setStatusDev(0x4a68);
         if (pEquipment->addStep(0x361, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqAlarmStep* pStep = new CEqAlarmStep();
         pStep->setName(STEP_ALARM_BLOCK1);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x32);
         pStep->setAlarmDev(0x4c1d);
         if (pEquipment->addStep(0x362, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqAlarmStep* pStep = new CEqAlarmStep();
         pStep->setName(STEP_ALARM_BLOCK2);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x33);
         pStep->setAlarmDev(0x4c4a);
         if (pEquipment->addStep(0x363, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqAlarmStep* pStep = new CEqAlarmStep();
         pStep->setName(STEP_ALARM_BLOCK3);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x34);
         pStep->setAlarmDev(0x4c77);
         if (pEquipment->addStep(0x364, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqAlarmStep* pStep = new CEqAlarmStep();
         pStep->setName(STEP_ALARM_BLOCK4);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x35);
         pStep->setAlarmDev(0x4ca4);
         if (pEquipment->addStep(0x365, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqAlarmStep* pStep = new CEqAlarmStep();
         pStep->setName(STEP_ALARM_BLOCK5);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x36);
         pStep->setAlarmDev(0x4cd1);
         if (pEquipment->addStep(0x366, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqProcessStep* pStep = new CEqProcessStep();
         pStep->setName(STEP_PROCESS);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x37);
         pStep->setProcessDev(0x1864);
         if (pEquipment->addStep(0x367, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqCimModeChangeStep* pStep = new CEqCimModeChangeStep();
         pStep->setName(STEP_CIM_MODE_CHANGE);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x50);
         pStep->setCimModeDev(0x15);
         if (pEquipment->addStep(0x350, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqCimMessageCmdStep* pStep = new CEqCimMessageCmdStep();
         pStep->setName(STEP_CIM_MESSAGE_CMD);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x51);
         pStep->setCimMessageDev(0x0);
         if (pEquipment->addStep(0x351, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqCimMessageClearStep* pStep = new CEqCimMessageClearStep();
         pStep->setName(STEP_CIM_MESSAGE_CLEAR);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x52);
         pStep->setClearCimMessageDev(0x13);
         if (pEquipment->addStep(0x352, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqDateTimeSetCmdStep* pStep = new CEqDateTimeSetCmdStep();
         pStep->setName(STEP_DATETIME_SET_CMD);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x53);
         pStep->setDateTimeDev(0x16);
         if (pEquipment->addStep(0x353, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqVCREnableStep* pStep = new CEqVCREnableStep();
         pStep->setName(STEP_EQ_VCR_ENABLE);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x54);
         pStep->setEqVCRModeDev(0x1F);
         if (pEquipment->addStep(0x354, pStep) != 0) {
            delete pStep;
         }
      }
      {
         CEqModeChangeStep* pStep = new CEqModeChangeStep();
         pStep->setName(STEP_EQ_MODE_CHANGE);
         pStep->setListener(listener);
         pStep->setWriteSignalDev(0x55);
         pStep->setEqModeDev(0x1E);
         if (pEquipment->addStep(0x355, pStep) != 0) {
            delete pStep;
         }
      }
      pEquipment->init();
      LOGE("已添加“EFEM(ROBOT)”.");
      return 0;
   }
@@ -104,7 +307,7 @@
      }
      // 以下为测试代码
      // 按一定频率扫描LB数据
      static int i = 0;
      i++;
      if (i % (4 * 1) == 0) {
@@ -113,14 +316,11 @@
            const StationIdentifier& station = item->getStation();
            MemoryBlock& block = item->getReadBitBlock();
            char szBuffer[1024];
            int nRet = m_cclink.ReadData2(station, (short)block.type,
               block.start, block.size, szBuffer);
            for (unsigned int i = 0; i < block.size; i++) {
               if(szBuffer[i] != 0)
                  TRACE("%d[%x]\n", i, szBuffer[i]);
            int nRet = m_cclink.ReadData2(station, (DeviceType)block.type,
               block.start, block.size, block.buffer);
            if (0 == nRet) {
               item->onReceiveLBData(block.buffer, block.size);
            }
            TRACE("nRet=%d\n", nRet);
         }
      }
   }