Darker
2025-02-25 3ec43c0d199587138cdbb601e3db2e93a87bc329
SourceCode/Bond/Servo/CStep.cpp
@@ -7,8 +7,8 @@
   unsigned __stdcall StepWorkThreadFunction(LPVOID lpParam)
   {
      CStep* pScale = (CStep*)lpParam;
      return pScale->WorkingProc();
      CStep* pStep = (CStep*)lpParam;
      return pStep->WorkingProc();
   }
   CStep::CStep()
@@ -20,6 +20,7 @@
      m_hSignalOff = ::CreateEvent(NULL, TRUE, FALSE, NULL);
      m_nCurStep = 0;
      m_pCclink = nullptr;
      m_nWriteSignalDev = 0;
      InitializeCriticalSection(&m_criticalSection);
   }
@@ -39,6 +40,11 @@
   void CStep::setCcLink(CCCLinkIEControl* pCcLink)
   {
      m_pCclink = pCcLink;
   }
   void CStep::setWriteSignalDev(int dev)
   {
      m_nWriteSignalDev = dev;
   }
   void CStep::init()
@@ -86,23 +92,20 @@
            // 1.读取数据
            nextStep();
            ASSERT(m_pCclink);
            StationIdentifier station(0, 255);
            DWordContainer dc;
            m_pCclink->ReadDWordData(station, DeviceType::W, 0x4a8c, 1, dc);
            int nState = dc.at(0);
            TRACE(">> nState:%d\n", nState);
            onReadData();
            // 2.给对方写ON
            nextStep();
            m_pCclink->SetBitDevice(station, DeviceType::B, 0x30);
            m_pCclink->SetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev);
            // 3.等待对方OFF
            nextStep();
            int nStep3Ret = ::WaitForSingleObject(m_hSignalOff, TIMEOUT * 1000);
            if (nStep3Ret == WAIT_TIMEOUT) {
               timeout();
               m_pCclink->ResetBitDevice(station, DeviceType::B, 0x30);
               m_pCclink->ResetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev);
               onTimeout();
               goto RESET;
            }
            ResetEvent(m_hSignalOff);
@@ -110,18 +113,12 @@
            // 4.给对方写OFF
            nextStep();
            m_pCclink->ResetBitDevice(station, DeviceType::B, 0x30);
            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);
            onComplete();
         }
      }
@@ -147,6 +144,21 @@
      Unlock();
   }
   int CStep::onReadData()
   {
      return 0;
   }
   int CStep::onComplete()
   {
      return 0;
   }
   int CStep::onTimeout()
   {
      return 0;
   }
   void CStep::resetStep()
   {
      Lock();
@@ -159,11 +171,6 @@
      Lock();
      m_nCurStep++;
      Unlock();
   }
   void CStep::timeout()
   {
      TRACE(">>>>>>>>>>>>>>>> timeout:%d\n", m_nCurStep);
   }
}