Darker
2025-02-25 3ec43c0d199587138cdbb601e3db2e93a87bc329
Merge branch 'clh'

# Conflicts:
# SourceCode/Bond/Servo/Servo.vcxproj.filters
已添加6个文件
已修改8个文件
533 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CCLinkPerformance/PerformanceMelsec.h 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqAlarmStep.cpp 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqAlarmStep.h 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqModeStep.cpp 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqModeStep.h 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqStatusStep.cpp 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqStatusStep.h 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.cpp 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.h 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CStep.cpp 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CStep.h 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.vcxproj 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.vcxproj.filters 8 ●●●● 补丁 | 查看 | 原始文档 | 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/CEqAlarmStep.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
#include "stdafx.h"
#include "CEqAlarmStep.h"
#include "Log.h"
#include "ToolUnits.h"
namespace SERVO {
    CEqAlarmStep::CEqAlarmStep() : CStep()
    {
        m_nAlarmDev = 0;
        m_nAlarmState = 0;
        m_nUnitId = 0;
        m_nAlarmLevel = 0;
        m_nAlarmCode = 0;
        m_nAlarmId = 0;
    }
    CEqAlarmStep::~CEqAlarmStep()
    {
    }
    int CEqAlarmStep::onReadData()
    {
        CStep::onReadData();
        char szBuffer[64];
        int nRet = m_pCclink->ReadData2(m_station, DeviceType::W,
            m_nAlarmDev, 64, szBuffer);
        if (0 == nRet) {
            m_nAlarmState = (unsigned int)CToolUnits::toInt16(&szBuffer[0]);
            m_nUnitId = (unsigned int)CToolUnits::toInt16(&szBuffer[2]);
            m_nAlarmId = (unsigned int)CToolUnits::toInt16(&szBuffer[4]);
            m_nAlarmCode = (unsigned int)CToolUnits::toInt16(&szBuffer[6]);
            m_nAlarmLevel = (unsigned int)CToolUnits::toInt16(&szBuffer[8]);
            LOGI("<CEqAlarmStep> Equipment Alarm state Changed<State:%d, Unit:%d, Level:%d, Code:%d, ID:%d>\n",
                m_nAlarmState, m_nUnitId, m_nAlarmLevel, m_nAlarmCode, m_nAlarmId,
                m_strText.c_str(), m_strDescription.c_str());
        }
        return 0;
    }
    int CEqAlarmStep::onComplete()
    {
        CStep::onComplete();
        LOGI("<CEqAlarmStep> onComplete.");
        return 0;
    }
    int CEqAlarmStep::onTimeout()
    {
        CStep::onTimeout();
        LOGI("<CEqAlarmStep> onTimeout.");
        return 0;
    }
    void CEqAlarmStep::setAlarmDev(int nDev)
    {
        m_nAlarmDev = nDev;
    }
}
SourceCode/Bond/Servo/CEqAlarmStep.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
#pragma once
#include "CStep.h"
namespace SERVO {
    class CEqAlarmStep : public CStep
    {
    public:
        CEqAlarmStep();
        ~CEqAlarmStep();
    public:
        virtual int onReadData();
        virtual int onComplete();
        virtual int onTimeout();
        void setAlarmDev(int nDev);
    private:
        int m_nAlarmDev;
        int m_nAlarmState;
        int m_nUnitId;
        int m_nAlarmLevel;
        int m_nAlarmCode;
        int m_nAlarmId;
        std::string m_strText;
        std::string m_strDescription;
    };
}
SourceCode/Bond/Servo/CEqModeStep.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
#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;
        if (0 == m_pCclink->ReadDWordData(m_station, DeviceType::W, m_nModeDev, 1, dc)
            && dc.size() >= 1) {
            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/CEqStatusStep.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,122 @@
#include "stdafx.h"
#include "CEqStatusStep.h"
#include "Log.h"
#include "ToolUnits.h"
namespace SERVO {
    CEqStatusStep::CEqStatusStep() : CStep()
    {
        m_nStatusDev = 0;
        for (int i = 0; i < STATUS_MAX; i++) {
            m_nStatus[i] = 7;
            m_nReasonCode[i] = 0;
        }
    }
    CEqStatusStep::~CEqStatusStep()
    {
    }
    int CEqStatusStep::onReadData()
    {
        CStep::onReadData();
        char szBuffer[64];
        int nRet = m_pCclink->ReadData2(m_station, DeviceType::W,
            m_nStatusDev, 64, szBuffer);
        if (0 == nRet) {
            unsigned int unitId = (unsigned int)CToolUnits::toInt16(&szBuffer[0]);
            if (unitId < STATUS_MAX) {
                if (unitId == 0) {
                    m_nStatus[unitId] = CToolUnits::toInt16(&szBuffer[2 + unitId * 4]);
                    m_nReasonCode[unitId] = CToolUnits::toInt16(&szBuffer[2 + unitId * 4 + 2]);
                }
                else {
                    m_nStatus[unitId] = CToolUnits::toInt16(&szBuffer[2 + 3 * 2 + unitId * 4]);
                    m_nReasonCode[unitId] = CToolUnits::toInt16(&szBuffer[2 + 3 * 2 + unitId * 4 + 2]);
                }
                for (int i = 0; i < 64; i++) {
                    TRACE("bbb %d, %x\n", i, szBuffer[i]);
                }
                TRACE("cccc %d %d %d\n", unitId, m_nStatus[unitId], m_nReasonCode[unitId]);
                std::string strTemp;
                LOGI("<CEqStatusStep> Equipment Status Changed<Unit:%d, %s, ReasonCode=%d>\n",
                    unitId, getStatusDescription(unitId, strTemp).c_str(), m_nReasonCode[unitId]);
            }
        }
        return 0;
    }
    int CEqStatusStep::onComplete()
    {
        CStep::onComplete();
        LOGI("<CEqStatusStep> onComplete.");
        return 0;
    }
    int CEqStatusStep::onTimeout()
    {
        CStep::onTimeout();
        LOGI("<CEqStatusStep> onTimeout.");
        return 0;
    }
    void CEqStatusStep::setStatusDev(int nDev)
    {
        m_nStatusDev = nDev;
    }
    /*
    Lower (1byte, 0~7) : Status
    1 : PM
    2 : Down(BM)
    3 : Pause
    4 : Idle
    5: Run
    6: Job Change
    7 : ETC
    */
    std::string& CEqStatusStep::getStatusDescription(unsigned int unid, std::string& strDescription)
    {
        if (unid < STATUS_MAX) {
            switch (m_nStatus[unid]) {
            case 1:
                strDescription = _T("PM");
                break;
            case 2:
                strDescription = _T("Down(BM)");
                break;
            case 3:
                strDescription = _T("Pause");
                break;
            case 4:
                strDescription = _T("Idle");
                break;
            case 5:
                strDescription = _T("Run");
                break;
            case 6:
                strDescription = _T("Job Change");
                break;
            case 7:
                strDescription = _T("ETC");
                break;
            default:
                strDescription = _T("");
                break;
            }
        }
        return strDescription;
    }
}
SourceCode/Bond/Servo/CEqStatusStep.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
#pragma once
#include "CStep.h"
namespace SERVO {
#define UNIT_MAX        6
#define STATUS_MAX        (UNIT_MAX + 1)
    class CEqStatusStep : public CStep
    {
    public:
        CEqStatusStep();
        ~CEqStatusStep();
    public:
        virtual int onReadData();
        virtual int onComplete();
        virtual int onTimeout();
        void setStatusDev(int nDev);
        std::string& getStatusDescription(unsigned int unid, std::string& strDescription);
    private:
        int m_nStatusDev;
        int m_nStatus[STATUS_MAX];
        int m_nReasonCode[STATUS_MAX];
    };
}
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();
        }
    }
@@ -244,13 +240,18 @@
        // ä»¥ä¸‹æ ¹æ®ä¿¡å·åšæµç¨‹å¤„理
        CStep* pStep;
        // Equipment Mode Change Report
        index = 0x360;
        bFlag = isBitOn(pszData, size, index);
        CStep* pStep = getStep(0x360);
        if (pStep != nullptr) {
            pStep->onSignal(bFlag);
        // Equipment Mode Change Report(0x360)
        // Equipment Status Change Report(0x361)
        // Equipment Alarm Change Report(0x362 ~ 0x366)
        for (int i = 0; i < 7; i++) {
            index = 0x360 + i;;
            bFlag = isBitOn(pszData, size, index);
            pStep = getStep(index);
            if (pStep != nullptr) {
                pStep->onSignal(bFlag);
            }
        }
    }
SourceCode/Bond/Servo/CEquipment.h
@@ -1,7 +1,9 @@
#pragma once
#include "Log.h"
#include "CCLinkIEControl.h"
#include "CStep.h"
#include "CEqModeStep.h"
#include "CEqStatusStep.h"
#include "CEqAlarmStep.h"
#include <map>
SourceCode/Bond/Servo/CMaster.cpp
@@ -71,6 +71,66 @@
            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;
                }
            }
            {
                CEqStatusStep* pStep = new CEqStatusStep();
                pStep->setWriteSignalDev(0x31);
                pStep->setStatusDev(0x4a68);
                if (pEquipment->addStep(0x361, pStep) != 0) {
                    delete pStep;
                }
            }
            {
                CEqAlarmStep* pStep = new CEqAlarmStep();
                pStep->setWriteSignalDev(0x32);
                pStep->setAlarmDev(0x4c1d);
                if (pEquipment->addStep(0x362, pStep) != 0) {
                    delete pStep;
                }
            }
            {
                CEqAlarmStep* pStep = new CEqAlarmStep();
                pStep->setWriteSignalDev(0x33);
                pStep->setAlarmDev(0x4c4a);
                if (pEquipment->addStep(0x363, pStep) != 0) {
                    delete pStep;
                }
            }
            {
                CEqAlarmStep* pStep = new CEqAlarmStep();
                pStep->setWriteSignalDev(0x34);
                pStep->setAlarmDev(0x4c77);
                if (pEquipment->addStep(0x364, pStep) != 0) {
                    delete pStep;
                }
            }
            {
                CEqAlarmStep* pStep = new CEqAlarmStep();
                pStep->setWriteSignalDev(0x35);
                pStep->setAlarmDev(0x4ca4);
                if (pEquipment->addStep(0x365, pStep) != 0) {
                    delete pStep;
                }
            }
            {
                CEqAlarmStep* pStep = new CEqAlarmStep();
                pStep->setWriteSignalDev(0x36);
                pStep->setAlarmDev(0x4cd1);
                if (pEquipment->addStep(0x366, 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
@@ -201,6 +201,9 @@
    <ClInclude Include="CBonder.h" />
    <ClInclude Include="CCLinkPerformance\CCLinkIEControl.h" />
    <ClInclude Include="CCLinkPerformance\PerformanceMelsec.h" />
    <ClInclude Include="CEqAlarmStep.h" />
    <ClInclude Include="CEqModeStep.h" />
    <ClInclude Include="CEqStatusStep.h" />
    <ClInclude Include="CStep.h" />
    <ClInclude Include="DevicePropertyDlg.h" />
    <ClInclude Include="CEFEM.h" />
@@ -233,6 +236,9 @@
    <ClCompile Include="CBonder.cpp" />
    <ClCompile Include="CCLinkPerformance\CCLinkIEControl.cpp" />
    <ClCompile Include="CCLinkPerformance\PerformanceMelsec.cpp" />
    <ClCompile Include="CEqAlarmStep.cpp" />
    <ClCompile Include="CEqModeStep.cpp" />
    <ClCompile Include="CEqStatusStep.cpp" />
    <ClCompile Include="CStep.cpp" />
    <ClCompile Include="DevicePropertyDlg.cpp" />
    <ClCompile Include="CEFEM.cpp" />
SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -37,7 +37,9 @@
    <ClCompile Include="ToolUnits.cpp" />
    <ClCompile Include="DevicePropertyDlg.cpp" />
    <ClCompile Include="CStep.cpp" />
    <ClCompile Include="AlarmDlg.cpp" />
    <ClCompile Include="CEqModeStep.cpp" />
    <ClCompile Include="CEqStatusStep.cpp" />
    <ClCompile Include="CEqAlarmStep.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="AlarmManager.h" />
@@ -73,7 +75,9 @@
    <ClInclude Include="ToolUnits.h" />
    <ClInclude Include="DevicePropertyDlg.h" />
    <ClInclude Include="CStep.h" />
    <ClInclude Include="AlarmDlg.h" />
    <ClInclude Include="CEqModeStep.h" />
    <ClInclude Include="CEqStatusStep.h" />
    <ClInclude Include="CEqAlarmStep.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="Servo.rc" />