chenluhua1980
6 天以前 dd4d7532a85ae70e303117a80dd65b3bc803d457
SourceCode/Bond/Servo/CAligner.cpp
@@ -32,7 +32,7 @@
   void CAligner::initPins()
   {
      // 加入Pin初始化代码
      LOGI("<CAligner>initPins");
      LOGD("<CAligner>initPins");
      addPin(SERVO::PinType::INPUT, _T("In1"));
      addPin(SERVO::PinType::INPUT, _T("In2"));
      addPin(SERVO::PinType::OUTPUT, _T("Out1"));
@@ -46,6 +46,53 @@
      m_slot[0].setPosition(m_nID);
      m_slot[0].setNo(1);
      m_slot[0].setName("Slot 1");
   }
   void CAligner::initSteps()
   {
      CEquipment::initSteps();
      {
         // Panel Data Report
         CEqReadStep* pStep = new CEqReadStep(0x617f, 386 * 2,
            [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
               if (code == ROK && pszData != nullptr && size > 0) {
                  decodePanelDataReport((CStep*)pFrom, pszData, size);
               }
               return -1;
            });
         pStep->setName(STEP_EQ_PANEL_DATA_REPORT);
         pStep->setProp("Port", (void*)1);
         pStep->setWriteSignalDev(0x15e);
         if (addStep(STEP_ID_PANEL_DATA_REPORT, pStep) != 0) {
            delete pStep;
         }
      }
      // VCR Event Report
      // 机器上报扫码结果,扫码器预计安装在巡边检机器上
      {
         CEqReadStep* pStep = new CEqReadStep(0x5fef, 15 * 2,
            [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
               if (code == ROK && pszData != nullptr && size > 0) {
                  decodeVCREventReport((CStep*)pFrom, pszData, size);
               }
               return -1;
            });
         pStep->setName(STEP_EQ_VCR1_EVENT_REPORT);
         pStep->setProp("Port", (void*)1);
         pStep->setWriteSignalDev(0x4a);
         pStep->setReturnDev(0x91e);
         if (addStep(STEP_ID_VCR1_EVENT_REPORT, pStep) != 0) {
            delete pStep;
         }
      }
   }
   void CAligner::onReceiveLBData(const char* pszData, size_t size)
   {
      __super::onReceiveLBData(pszData, size);
      CHECK_READ_STEP_SIGNAL(STEP_ID_PANEL_DATA_REPORT, pszData, size);
   }
   void CAligner::onTimer(UINT nTimerid)
@@ -66,35 +113,5 @@
   int CAligner::recvIntent(CPin* pPin, CIntent* pIntent)
   {
      return __super::recvIntent(pPin, pIntent);
   }
   BOOL CAligner::glassWillArrive(CGlass* pGlass)
   {
      BOOL bRet = __super::glassWillArrive(pGlass);
      if (!bRet) {
         return FALSE;
      }
      return m_glassList.empty();
   }
   BOOL CAligner::onPreStoredJob(int port, CJobDataB* pJobDataB)
   {
      CJobDataS* pJobDataS = getJobDataS(pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo());
      if (pJobDataS == nullptr) {
         LOGE("<CAligner-%s>onPreFetchedOutJob,找不到对应的JobDataS(CassetteSequenceNo:%d, JobSequenceNo:%d), 注意排查风险!", m_strName.c_str(),
            pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo());
         return FALSE;
      }
      // 只能一片一片的对位
      Lock();
      if (!m_glassList.empty()) {
         Unlock();
         LOGE("<CEquipment-%s>onPreFetchedOutJob,当前机器或单元存在玻璃片,不能进料,请注意风险!", m_strName.c_str());
         return FALSE;
      }
      return TRUE;
   }
}