LAPTOP-SNT8I5JK\Boounion
2025-02-25 4acd7cfd96f2099772497713e17ca8bfaf5cf4ec
1.CStep完善;
已修改10个文件
319 ■■■■■ 文件已修改
.gitignore 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqAlarmStep.cpp 21 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqModeStep.cpp 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqStatusStep.cpp 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 173 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.h 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CStep.cpp 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CStep.h 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -48,3 +48,4 @@
*.iom
SourceCode/Bond/BoounionPLC/BoounionPLC.vcxproj.user
SourceCode/Bond/x64/Debug/ServoConfiguration.ini
*.iobj
SourceCode/Bond/Servo/CEqAlarmStep.cpp
@@ -26,18 +26,19 @@
        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());
        if (0 != nRet) {
            return -1;
        }
        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;
    }
SourceCode/Bond/Servo/CEqModeStep.cpp
@@ -20,14 +20,17 @@
        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());
        if (0 != m_pCclink->ReadDWordData(m_station, DeviceType::W, m_nModeDev, 1, dc)) {
            return -2;
        }
        if (dc.size() < 1) {
            return -2;
        }
        m_nMode = dc.at(0);
        std::string strTemp;
        LOGI("<CEqModeStep> Equipment Mode Changed<%s>\n",
                getModeDescription(strTemp).c_str());
        return 0;
    }
SourceCode/Bond/Servo/CEqStatusStep.cpp
@@ -28,28 +28,28 @@
        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]);
            }
        if (0 != nRet) {
            return -1;
        }
        unsigned int unitId = (unsigned int)CToolUnits::toInt16(&szBuffer[0]);
        if (unitId >= STATUS_MAX) {
            return -2;
        }
        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]);
        }
        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;
    }
SourceCode/Bond/Servo/CEquipment.cpp
@@ -60,6 +60,7 @@
    {
        auto iter = m_mapStep.find(addr);
        if (iter != m_mapStep.end()) return -1;
        pStep->setEquipment(this);
        pStep->setCcLink(m_pCclink);
        m_mapStep[addr] = pStep;
        return 0;
SourceCode/Bond/Servo/CMaster.cpp
@@ -13,7 +13,7 @@
    CMaster::CMaster()
    {
        m_listener = {nullptr, nullptr};
        m_listener = {nullptr, nullptr, nullptr};
    }
    CMaster::~CMaster()
@@ -28,11 +28,21 @@
    {
        m_listener.onEqAlive = listener.onEqAlive;
        m_listener.onEqCimStateChanged = listener.onEqCimStateChanged;
        m_listener.onEqStepEvent = listener.onEqStepEvent;
    }
    int CMaster::init()
    {
        LOGI("<Master>正在初始化...");
        StepListener listener;
        listener.onEvent = [&](void* pStep, int code, void* pData) -> void {
            TRACE("<CEquipment>onEvent<%d, 0x%x>.\n", code, pData);
            if (m_listener.onEqStepEvent != nullptr) {
                m_listener.onEqStepEvent(this, (CStep*)pStep, code, pData);
            }
        };
        //     cclink
@@ -62,78 +72,8 @@
        // 初始化添加各子设备
        {
            CEFEM* pEquipment = new CEFEM();
            pEquipment->setID(EQ_ID_EFEM);
            pEquipment->setName("EFEM(ROBOT)");
            pEquipment->setDescription("EFEM(ROBOT).");
            pEquipment->setReadBitBlock(0x4000, 0x45ff);
            pEquipment->setStation(0, 255);
            addEquipment(pEquipment);
        addEFEM(listener);
            // 添加 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)”.");
        }
        /*
        {
            CBonder* pBonder = new CBonder();
@@ -196,6 +136,95 @@
        return nullptr;
    }
    int CMaster::addEFEM(StepListener& listener)
    {
        CEFEM* pEquipment = new CEFEM();
        pEquipment->setID(EQ_ID_EFEM);
        pEquipment->setName("EFEM(ROBOT)");
        pEquipment->setDescription("EFEM(ROBOT).");
        pEquipment->setReadBitBlock(0x4000, 0x45ff);
        pEquipment->setStation(0, 255);
        addEquipment(pEquipment);
        // 添加 step
        {
            CEqModeStep* pStep = new CEqModeStep();
            pStep->setName("EQMode");
            pStep->setListener(listener);
            pStep->setWriteSignalDev(0x30);
            pStep->setModeDev(0x4a8c);
            if (pEquipment->addStep(0x360, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqStatusStep* pStep = new CEqStatusStep();
            pStep->setName("EQStatus");
            pStep->setListener(listener);
            pStep->setWriteSignalDev(0x31);
            pStep->setStatusDev(0x4a68);
            if (pEquipment->addStep(0x361, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqAlarmStep* pStep = new CEqAlarmStep();
            pStep->setName("EQAlarm1");
            pStep->setListener(listener);
            pStep->setWriteSignalDev(0x32);
            pStep->setAlarmDev(0x4c1d);
            if (pEquipment->addStep(0x362, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqAlarmStep* pStep = new CEqAlarmStep();
            pStep->setName("EQAlarm2");
            pStep->setListener(listener);
            pStep->setWriteSignalDev(0x33);
            pStep->setAlarmDev(0x4c4a);
            if (pEquipment->addStep(0x363, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqAlarmStep* pStep = new CEqAlarmStep();
            pStep->setName("EQAlarm3");
            pStep->setListener(listener);
            pStep->setWriteSignalDev(0x34);
            pStep->setAlarmDev(0x4c77);
            if (pEquipment->addStep(0x364, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqAlarmStep* pStep = new CEqAlarmStep();
            pStep->setName("EQAlarm4");
            pStep->setListener(listener);
            pStep->setWriteSignalDev(0x35);
            pStep->setAlarmDev(0x4ca4);
            if (pEquipment->addStep(0x365, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqAlarmStep* pStep = new CEqAlarmStep();
            pStep->setName("EQAlarm5");
            pStep->setListener(listener);
            pStep->setWriteSignalDev(0x36);
            pStep->setAlarmDev(0x4cd1);
            if (pEquipment->addStep(0x366, pStep) != 0) {
                delete pStep;
            }
        }
        pEquipment->init();
        LOGE("已添加“EFEM(ROBOT)”.");
        return 0;
    }
    void CMaster::onTimer(UINT nTimerid)
    {
        for (auto item : m_listEquipment) {
SourceCode/Bond/Servo/CMaster.h
@@ -8,10 +8,12 @@
namespace SERVO {
    typedef std::function<void(void* pMaster, CEquipment* pEiuipment, BOOL bAlive)> ONEQALIVE;
    typedef std::function<void(void* pEiuipment, CStep* pStep, int code, void* pData)> ONEQSTEPEVENT;
    typedef struct _MasterListener
    {
        ONEQALIVE                onEqAlive;
        ONEQALIVE                onEqCimStateChanged;
        ONEQSTEPEVENT            onEqStepEvent;
    } MasterListener;
    class CMaster
@@ -30,6 +32,7 @@
    private:
        int addEquipment(CEquipment* pEquipment);
        int addEFEM(StepListener& listener);
    private:
        MasterListener m_listener;
SourceCode/Bond/Servo/CStep.cpp
@@ -13,6 +13,7 @@
    CStep::CStep()
    {
        m_listener = {nullptr};
        m_nWordThreadAddr = 0;
        m_hWorkStop = nullptr;
        m_hWorkThreadHandle = nullptr;
@@ -37,9 +38,34 @@
        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)
@@ -92,8 +118,11 @@
                // 1.读取数据
                nextStep();
                ASSERT(m_pCclink);
                onReadData();
                if (0 == onReadData()) {
                    if (m_listener.onEvent != nullptr) {
                        m_listener.onEvent(this, STEP_EVENT_READDATA, nullptr);
                    }
                }
                // 2.给对方写ON
                nextStep();
@@ -118,7 +147,11 @@
                // 6.完成
                nextStep();
                onComplete();
                if (0 == onComplete()) {
                    if (m_listener.onEvent != nullptr) {
                        m_listener.onEvent(this, STEP_EVENT_COMPLETE, nullptr);
                    }
                }
            }
        }
SourceCode/Bond/Servo/CStep.h
@@ -3,6 +3,16 @@
namespace SERVO {
#define STEP_EVENT_READDATA            0x01
#define STEP_EVENT_COMPLETE            0x02
    typedef std::function<void(void* pStep, int code, void* pData)> ONSTEPEVENT;
    typedef struct _StepListener
    {
        ONSTEPEVENT            onEvent;
    } StepListener;
    class CEquipment;
    class CStep
    {
    public:
@@ -11,7 +21,12 @@
    public:
        unsigned WorkingProc();
        void setListener(StepListener listener);
        void setCcLink(CCCLinkIEControl* pCcLink);
        void setEquipment(CEquipment* pEquipment);
        CEquipment* getEquipment();
        void setName(const char* pszName);
        std::string& getName();
        virtual void setWriteSignalDev(int dev);
        virtual void init();
        virtual void CStep::term();
@@ -27,7 +42,10 @@
        inline void resetStep();
    protected:
        StepListener m_listener;
        StationIdentifier m_station;
        std::string m_strName;
        CEquipment* m_pEquipment;
        CCCLinkIEControl* m_pCclink;
        CRITICAL_SECTION m_criticalSection;
        std::string strName;
SourceCode/Bond/Servo/Model.cpp
@@ -101,6 +101,14 @@
            bOn ? _T("ON") : _T("OFF"));
    };
    masterListener.onEqStepEvent = [&](void* pEquipment, SERVO::CStep* pStep, int code, void* pData) -> void {
        SERVO::CEquipment* p = (SERVO::CEquipment*)pEquipment;
        if (code == STEP_EVENT_READDATA) {
            LOGI("<CModel>onEqStepEvent,数据变化:%s(%s, 0x%x).\n", pStep->getEquipment()->getName().c_str(),
                pStep->getName().c_str(), pData);
        }
    };
    m_master.setListener(masterListener);
    return 0;