Darker
2025-02-25 2ffaec40444a4add7d8e638e5b20a2f81daa18af
SourceCode/Bond/Servo/CStep.cpp
@@ -7,18 +7,21 @@
   unsigned __stdcall StepWorkThreadFunction(LPVOID lpParam)
   {
      CStep* pScale = (CStep*)lpParam;
      return pScale->WorkingProc();
      CStep* pStep = (CStep*)lpParam;
      return pStep->WorkingProc();
   }
   CStep::CStep()
   {
      m_listener = {nullptr};
      m_nWordThreadAddr = 0;
      m_hWorkStop = nullptr;
      m_hWorkThreadHandle = nullptr;
      m_hSignalOn = ::CreateEvent(NULL, TRUE, FALSE, NULL);
      m_hSignalOff = ::CreateEvent(NULL, TRUE, FALSE, NULL);
      m_nCurStep = 0;
      m_pCclink = nullptr;
      m_nWriteSignalDev = 0;
      InitializeCriticalSection(&m_criticalSection);
   }
@@ -33,6 +36,41 @@
      m_hSignalOff = nullptr;
      DeleteCriticalSection(&m_criticalSection);
   }
   void CStep::setListener(StepListener listener)
   {
      m_listener.onEvent = listener.onEvent;
   }
   void CStep::setCcLink(CCCLinkIEControl* pCcLink)
   {
      m_pCclink = pCcLink;
   }
   void CStep::setEquipment(CEquipment* pEquipment)
   {
      m_pEquipment = pEquipment;
   }
   CEquipment* CStep::getEquipment()
   {
      return m_pEquipment;
   }
   void CStep::setName(const char* pszName)
   {
      m_strName = pszName;
   }
   std::string& CStep::getName()
   {
      return m_strName;
   }
   void CStep::setWriteSignalDev(int dev)
   {
      m_nWriteSignalDev = dev;
   }
   void CStep::init()
@@ -79,20 +117,24 @@
            // 1.读取数据
            nextStep();
            TRACE("m_nCurStep:%d\n", m_nCurStep);
            ASSERT(m_pCclink);
            if (0 == onReadData()) {
               if (m_listener.onEvent != nullptr) {
                  m_listener.onEvent(this, STEP_EVENT_READDATA, nullptr);
               }
            }
            // 2.给对方写ON
            nextStep();
            TRACE("m_nCurStep:%d\n", m_nCurStep);
            m_pCclink->SetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev);
            // 3.等待对方OFF
            nextStep();
            TRACE("m_nCurStep:%d\n", m_nCurStep);
            int nStep3Ret = ::WaitForSingleObject(m_hSignalOff, TIMEOUT * 1000);
            if (nStep3Ret == WAIT_TIMEOUT) {
               timeout();
               m_pCclink->ResetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev);
               onTimeout();
               goto RESET;
            }
            ResetEvent(m_hSignalOff);
@@ -100,17 +142,16 @@
            // 4.给对方写OFF
            nextStep();
            TRACE("m_nCurStep:%d\n", m_nCurStep);
            // 5.对接CIM等
            nextStep();
            TRACE("m_nCurStep:%d\n", m_nCurStep);
            m_pCclink->ResetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev);
            // 6.完成
            nextStep();
            TRACE("m_nCurStep:%d\n", m_nCurStep);
            if (0 == onComplete()) {
               if (m_listener.onEvent != nullptr) {
                  m_listener.onEvent(this, STEP_EVENT_COMPLETE, nullptr);
               }
            }
         }
      }
@@ -125,7 +166,6 @@
   void CStep::onSignal(BOOL bSignal)
   {
      TRACE(">>>>>>>>>>>>>>>>>>>> setSignal:%s\n", bSignal ? "ON" : "OFF");
      Lock();
      if (m_nCurStep == 0 && bSignal) {
         SetEvent(m_hSignalOn);
@@ -135,6 +175,21 @@
      }
      Unlock();
   }
   int CStep::onReadData()
   {
      return 0;
   }
   int CStep::onComplete()
   {
      return 0;
   }
   int CStep::onTimeout()
   {
      return 0;
   }
   void CStep::resetStep()
@@ -149,11 +204,6 @@
      Lock();
      m_nCurStep++;
      Unlock();
   }
   void CStep::timeout()
   {
      TRACE(">>>>>>>>>>>>>>>> timeout:%d\n", m_nCurStep);
   }
}