LAPTOP-SNT8I5JK\Boounion
2025-02-20 4cc9fd5bb0c0224e88ca702e6e736e1bc138dce6
SourceCode/Bond/Servo/CStep.cpp
@@ -19,6 +19,7 @@
      m_hSignalOn = ::CreateEvent(NULL, TRUE, FALSE, NULL);
      m_hSignalOff = ::CreateEvent(NULL, TRUE, FALSE, NULL);
      m_nCurStep = 0;
      m_pCclink = nullptr;
      InitializeCriticalSection(&m_criticalSection);
   }
@@ -33,6 +34,11 @@
      m_hSignalOff = nullptr;
      DeleteCriticalSection(&m_criticalSection);
   }
   void CStep::setCcLink(CCCLinkIEControl* pCcLink)
   {
      m_pCclink = pCcLink;
   }
   void CStep::init()
@@ -79,20 +85,24 @@
            // 1.读取数据
            nextStep();
            TRACE("m_nCurStep:%d\n", m_nCurStep);
            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);
            // 2.给对方写ON
            nextStep();
            TRACE("m_nCurStep:%d\n", m_nCurStep);
            m_pCclink->SetBitDevice(station, DeviceType::B, 0x30);
            // 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(station, DeviceType::B, 0x30);
               goto RESET;
            }
            ResetEvent(m_hSignalOff);
@@ -100,6 +110,7 @@
            // 4.给对方写OFF
            nextStep();
            m_pCclink->ResetBitDevice(station, DeviceType::B, 0x30);
            TRACE("m_nCurStep:%d\n", m_nCurStep);
@@ -125,7 +136,6 @@
   void CStep::onSignal(BOOL bSignal)
   {
      TRACE(">>>>>>>>>>>>>>>>>>>> setSignal:%s\n", bSignal ? "ON" : "OFF");
      Lock();
      if (m_nCurStep == 0 && bSignal) {
         SetEvent(m_hSignalOn);