LAPTOP-SNT8I5JK\Boounion
2025-02-21 f2ec2ff2640e8f02507e6fa44cd1ba1487a303ea
1.定义派生于CStep的类CEqModeStep,用于处理设备模式改变的事件。
已添加2个文件
已修改8个文件
208 ■■■■ 文件已修改
SourceCode/Bond/Servo/CCLinkPerformance/PerformanceMelsec.h 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqModeStep.cpp 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqModeStep.h 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.cpp 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CStep.cpp 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CStep.h 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.vcxproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.vcxproj.filters 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCLinkPerformance/PerformanceMelsec.h
@@ -203,6 +203,12 @@
    // è‡ªå®šä¹‰æž„造函数,覆盖默认值
    explicit StationIdentifier(const short net, const short st) : nNetNo(net), nStNo(st) {}
    StationIdentifier()
    {
        nNetNo = 0;
        nStNo = 255;
    }
    // å°†â€œç½‘络号”和“站点号”组合成一个最终编码
    short StationIdentifier::toNetworkStationCode() const {
        return static_cast<short>(nStNo | ((nNetNo << 8) & 0xFF00));
SourceCode/Bond/Servo/CEqModeStep.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,90 @@
#include "stdafx.h"
#include "CEqModeStep.h"
#include "Log.h"
namespace SERVO {
    CEqModeStep::CEqModeStep() : CStep()
    {
        m_nModeDev = 0;
        m_nMode = 0;
    }
    CEqModeStep::~CEqModeStep()
    {
    }
    int CEqModeStep::onReadData()
    {
        CStep::onReadData();
        DWordContainer dc;
        m_pCclink->ReadDWordData(m_station, DeviceType::W, m_nModeDev, 1, dc);
        m_nMode = dc.at(0);
        std::string strTemp;
        LOGI("<CEqModeStep> Equipment Mode Changed<%s>\n",
            getModeDescription(strTemp).c_str());
        return 0;
    }
    int CEqModeStep::onComplete()
    {
        CStep::onComplete();
        LOGI("<CEqModeStep> onComplete.");
        return 0;
    }
    int CEqModeStep::onTimeout()
    {
        CStep::onTimeout();
        LOGI("<CEqModeStep> onTimeout.");
        return 0;
    }
    void CEqModeStep::setModeDev(int nDev)
    {
        m_nModeDev = nDev;
    }
    /*
    0: No Equipment Mode exist
        1: Normal Mode
        2 : Recovery(Force Clean Out)  Mode
        3 : Skip Mode
        4 : Cold Run Mode
        5 : ETC."
    */
    std::string& CEqModeStep::getModeDescription(std::string& strDescription)
    {
        switch (m_nMode) {
        case 0:
            strDescription = _T("No Equipment Mode exist");
            break;
        case 1:
            strDescription = _T("Normal Mode");
            break;
        case 2:
            strDescription = _T("Recovery(Force Clean Out) Mode");
            break;
        case 3:
            strDescription = _T("Skip Mode");
            break;
        case 4:
            strDescription = _T("Cold Run Mode");
            break;
        case 5:
            strDescription = _T("ETC.");
            break;
        default:
            strDescription = _T("");
            break;
        }
        return strDescription;
    }
}
SourceCode/Bond/Servo/CEqModeStep.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
#pragma once
#include "CStep.h"
namespace SERVO {
    class CEqModeStep : public CStep
    {
    public:
        CEqModeStep();
        ~CEqModeStep();
    public:
        virtual int onReadData();
        virtual int onComplete();
        virtual int onTimeout();
        void setModeDev(int nDev);
        std::string& getModeDescription(std::string& strDescription);
    private:
        int m_nModeDev;
        int m_nMode;
    };
}
SourceCode/Bond/Servo/CEquipment.cpp
@@ -67,12 +67,8 @@
    void CEquipment::init()
    {
        CStep* pStep = new CStep();
        if (addStep(0x360, pStep) == 0) {
            pStep->init();
        }
        else {
            delete pStep;
        for (auto item : m_mapStep) {
            item.second->init();
        }
    }
SourceCode/Bond/Servo/CEquipment.h
@@ -1,7 +1,7 @@
#pragma once
#include "Log.h"
#include "CCLinkIEControl.h"
#include "CStep.h"
#include "CEqModeStep.h"
#include <map>
SourceCode/Bond/Servo/CMaster.cpp
@@ -71,6 +71,18 @@
            pEquipment->setStation(0, 255);
            addEquipment(pEquipment);
            // æ·»åŠ  step
            {
                CEqModeStep* pStep = new CEqModeStep();
                pStep->setWriteSignalDev(0x30);
                pStep->setModeDev(0x4a8c);
                if (pEquipment->addStep(0x360, pStep) != 0) {
                    delete pStep;
                }
            }
            pEquipment->init();
            LOGE("已添加“EFEM(ROBOT)”.");
        }
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);
    }
}
SourceCode/Bond/Servo/CStep.h
@@ -12,18 +12,22 @@
    public:
        unsigned WorkingProc();
        void setCcLink(CCCLinkIEControl* pCcLink);
        virtual void setWriteSignalDev(int dev);
        virtual void init();
        virtual void CStep::term();
        virtual void onSignal(BOOL bSignal);
        virtual int onReadData();
        virtual int onComplete();
        virtual int onTimeout();
    protected:
        inline void Lock() { EnterCriticalSection(&m_criticalSection); }
        inline void Unlock() { LeaveCriticalSection(&m_criticalSection); }
        inline void nextStep();
        inline void resetStep();
        void timeout();
    private:
    protected:
        StationIdentifier m_station;
        CCCLinkIEControl* m_pCclink;
        CRITICAL_SECTION m_criticalSection;
        std::string strName;
@@ -33,6 +37,7 @@
        HANDLE m_hSignalOn;
        HANDLE m_hSignalOff;
        int m_nCurStep;
        int m_nWriteSignalDev;            // å¯¹æ–¹BIT地址
    };
}
SourceCode/Bond/Servo/Servo.vcxproj
@@ -200,6 +200,7 @@
    <ClInclude Include="CBonder.h" />
    <ClInclude Include="CCLinkPerformance\CCLinkIEControl.h" />
    <ClInclude Include="CCLinkPerformance\PerformanceMelsec.h" />
    <ClInclude Include="CEqModeStep.h" />
    <ClInclude Include="CStep.h" />
    <ClInclude Include="DevicePropertyDlg.h" />
    <ClInclude Include="CEFEM.h" />
@@ -231,6 +232,7 @@
    <ClCompile Include="CBonder.cpp" />
    <ClCompile Include="CCLinkPerformance\CCLinkIEControl.cpp" />
    <ClCompile Include="CCLinkPerformance\PerformanceMelsec.cpp" />
    <ClCompile Include="CEqModeStep.cpp" />
    <ClCompile Include="CStep.cpp" />
    <ClCompile Include="DevicePropertyDlg.cpp" />
    <ClCompile Include="CEFEM.cpp" />
SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -37,6 +37,7 @@
    <ClCompile Include="ToolUnits.cpp" />
    <ClCompile Include="DevicePropertyDlg.cpp" />
    <ClCompile Include="CStep.cpp" />
    <ClCompile Include="CEqModeStep.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="AlarmManager.h" />
@@ -72,6 +73,7 @@
    <ClInclude Include="ToolUnits.h" />
    <ClInclude Include="DevicePropertyDlg.h" />
    <ClInclude Include="CStep.h" />
    <ClInclude Include="CEqModeStep.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="Servo.rc" />