LAPTOP-SNT8I5JK\Boounion
2025-05-12 9fbd7479ce17f76f72cc0e5a675336261ec76472
1.使用CEqReadStep替换CEqJobEventStep, 实现ReceivedJob
2.实现SentOutJob
已修改12个文件
399 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CBonder.cpp 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEFEM.cpp 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEFEM.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqJobEventStep.cpp 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.cpp 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CJobDataS.cpp 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CJobDataS.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPageGraph2.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CStep.cpp 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CStep.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Common.h 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CBonder.cpp
@@ -235,6 +235,55 @@
            }
        }
        // 使用CEqReadStep替换CEqJobEventStep
        {
            // Received Job Report Upstream #1~9
            char szBuffer[256];
            for (int i = 0; i < 9; i++) {
                CEqReadStep* pStep = new CEqReadStep((m_nIndex == 0 ? 0x8c90 : 0xcc90) + 320 * i, 320 * 2,
                    [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                        if (code == ROK && pszData != nullptr && size > 0) {
                            int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
                            if (port > 0) {
                                decodeReceivedJobReport((CStep*)pFrom, port, pszData, size);
                            }
                        }
                        return -1;
                    });
                sprintf_s(szBuffer, "%s%d", STEP_EQ_RECEIVED_JOB_UPSn, i + 1);
                pStep->setName(szBuffer);
                pStep->setProp("Port", (void*)(__int64)(i + 1));
                pStep->setWriteSignalDev((m_nIndex == 0 ? 0x300 : 0x600) + i);
                if (addStep(STEP_ID_RECIVE_JOB_UPS1 + i, pStep) != 0) {
                    delete pStep;
                }
            }
        }
        {
            // Sent Out Job Report Downstream #1~9
            char szBuffer[256];
            for (int i = 0; i < 9; i++) {
                CEqReadStep* pStep = new CEqReadStep((m_nIndex == 0 ? 0x8000 : 0xc000) + 320 * i, 320 * 2,
                    [&](void* pFrom, int code, const char* pszData, size_t size) -> int {
                        if (code == ROK && pszData != nullptr && size > 0) {
                            int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
                            if (port > 0) {
                                decodeReceivedJobReport((CStep*)pFrom, port, pszData, size);
                            }
                        }
                        return -1;
                    });
                sprintf_s(szBuffer, "%s%d", STEP_EQ_SENT_OUT_JOB_DOWNSn, i + 1);
                pStep->setName(szBuffer);
                pStep->setProp("Port", (void*)(__int64)(i + 1));
                pStep->setWriteSignalDev((m_nIndex == 0 ? 0x30a : 0x60a) + i);
                if (addStep(STEP_ID_SENT_OUT_JOB_DOWNS1 + i, pStep) != 0) {
                    delete pStep;
                }
            }
        }
        /*
        {
            CEqJobEventStep* pStep = new CEqJobEventStep();
            pStep->setName(STEP_EQ_RECEIVED_JOB_UPS1);
@@ -271,6 +320,7 @@
                delete pStep;
            }
        }
        */
        {
            // Fetched Out Job Report #1~15
SourceCode/Bond/Servo/CEFEM.cpp
@@ -426,37 +426,37 @@
        }
    }
    int CEFEM::onFetchedOut(int port, const char* pszGlassId)
    int CEFEM::onFetchedOutJob(int port, const char* pszGlassId)
    {
        if (port == 1) {
            return m_pPort[0]->fetchedOut(pszGlassId);
            return m_pPort[0]->fetchedOutJob(pszGlassId);
        }
        if (port == 2) {
            return m_pPort[1]->fetchedOut(pszGlassId);
            return m_pPort[1]->fetchedOutJob(pszGlassId);
        }
        if (port == 3) {
            return m_pPort[2]->fetchedOut(pszGlassId);
            return m_pPort[2]->fetchedOutJob(pszGlassId);
        }
        if (port == 4) {
            return m_pPort[3]->fetchedOut(pszGlassId);
            return m_pPort[3]->fetchedOutJob(pszGlassId);
        }
        if (port == 5) {
            return m_pArmTray[0]->fetchedOut(pszGlassId);
            return m_pArmTray[0]->fetchedOutJob(pszGlassId);
        }
        if (port == 6) {
            return m_pArmTray[1]->fetchedOut(pszGlassId);
            return m_pArmTray[1]->fetchedOutJob(pszGlassId);
        }
        if (port == 7) {
            return m_pAligner->fetchedOut(pszGlassId);
            return m_pAligner->fetchedOutJob(pszGlassId);
        }
        if (port == 8) {
            return m_pFliper->fetchedOut(pszGlassId);
            return m_pFliper->fetchedOutJob(pszGlassId);
        }
        return -1;
    }
    int CEFEM::onStore(int port, const char* pszGlassId)
    int CEFEM::onStoreJob(int port, const char* pszGlassId)
    {
        if (port == 1) {
            return m_pPort[0]->storedJob(pszGlassId);
SourceCode/Bond/Servo/CEFEM.h
@@ -27,8 +27,8 @@
        virtual int recvIntent(CPin* pPin, CIntent* pIntent);
        virtual BOOL glassWillArrive(CGlass* pGlass);
        virtual void onReceiveLBData(const char* pszData, size_t size);
        virtual int onFetchedOut(int port, const char* pszGlassId);
        virtual int onStore(int port, const char* pszGlassId);
        virtual int onFetchedOutJob(int port, const char* pszGlassId);
        virtual int onStoreJob(int port, const char* pszGlassId);
    public:
        void setPort(unsigned int index, CLoadPort* pPort);
SourceCode/Bond/Servo/CEqJobEventStep.cpp
@@ -21,102 +21,11 @@
    void CEqJobEventStep::getAttributeVector(CAttributeVector& attrubutes)
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Dev",
            ("W" + CToolUnits::toHexString(m_nJobDataADev, strTemp)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("CassetteSequenceNo",
            std::to_string(m_jobDataS.getCassetteSequenceNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("JobSequenceNo",
            std::to_string(m_jobDataS.getJobSequenceNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("LotId",
            m_jobDataS.getLotId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProductId",
            m_jobDataS.getProductId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("OperationId",
            m_jobDataS.getOperationId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Glass1Id",
            m_jobDataS.getGlass1Id().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Glass2Id",
            m_jobDataS.getGlass2Id().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("JobType",
            std::to_string(m_jobDataS.getJobType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("MaterialsType",
            std::to_string(m_jobDataS.getMaterialsType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProductType",
            std::to_string(m_jobDataS.getProductType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("DummyType",
            std::to_string(m_jobDataS.getDummyType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SkipFlag",
            std::to_string(m_jobDataS.getSkipFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProcessFlag",
            std::to_string(m_jobDataS.getProcessFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProcessResonCode",
            std::to_string(m_jobDataS.getProcessResonCode()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("LastGlassFlag",
            std::to_string(m_jobDataS.getLastGlassFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("FirstGlassFlag",
            std::to_string(m_jobDataS.getFirstGlassFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTime1",
            std::to_string(m_jobDataS.getQTime(0)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTime2",
            std::to_string(m_jobDataS.getQTime(1)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTime3",
            std::to_string(m_jobDataS.getQTime(2)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTimeOverFlag",
            std::to_string(m_jobDataS.getQTimeOverFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("MasterRecipe",
            std::to_string(m_jobDataS.getMasterRecipe()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProductRecipeId",
            m_jobDataS.getProductRecipeId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("PCode",
            m_jobDataS.getPCode().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("UseType",
            m_jobDataS.getUseType().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("PanelMeasure",
            m_jobDataS.getPanelMeasure().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SlotUnitSelectFlag",
            std::to_string(m_jobDataS.getSlotUnitSelectFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SourcePortNo",
            std::to_string(m_jobDataS.getSourcePortNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SourceSlotNo",
            std::to_string(m_jobDataS.getSourceSlotNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("TargetPortNo",
            std::to_string(m_jobDataS.getTargetPortNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("TargetSlotNo",
            std::to_string(m_jobDataS.getTargetSlotNo()).c_str(), "", weight++));
        m_jobDataS.getAttributeVector(attrubutes, weight);
    }
    int CEqJobEventStep::onReadData()
SourceCode/Bond/Servo/CEquipment.cpp
@@ -822,7 +822,7 @@
        return pGlass;
    }
    int CEquipment::fetchedOut(const char* pszGlassId)
    int CEquipment::fetchedOutJob(const char* pszGlassId)
    {
        if (m_pArm == nullptr) {
            return -1;
@@ -1061,6 +1061,56 @@
        return m_recipesManager.decodeRecipeParameterReport(pszData, size);
    }
    int CEquipment::decodeReceivedJobReport(CStep* pStep, int port, const char* pszData, size_t size)
    {
        CJobDataS jobDataS;
        int nRet = jobDataS.unserialize(&pszData[0], (int)size);
        if (nRet < 0) return nRet;
        // 缓存Attribute,用于调试时显示信息
        unsigned int weight = 201;
        CAttributeVector attrubutes;
        jobDataS.getAttributeVector(attrubutes, weight);
        pStep->addAttributeVector(attrubutes);
        onReceivedJob(port, &jobDataS);
        return nRet;
    }
    int CEquipment::onReceivedJob(int port, CJobDataS* pJobDataS)
    {
        LOGI("<CEquipment-%s>onReceivedJob.", m_strName.c_str());
        // return fetchedOutJob(pszGlassId);
        return 0;
    }
    int CEquipment::decodeSentOutJobReport(CStep* pStep, int port, const char* pszData, size_t size)
    {
        CJobDataS jobDataS;
        int nRet = jobDataS.unserialize(&pszData[0], (int)size);
        if (nRet < 0) return nRet;
        // 缓存Attribute,用于调试时显示信息
        unsigned int weight = 201;
        CAttributeVector attrubutes;
        jobDataS.getAttributeVector(attrubutes, weight);
        pStep->addAttributeVector(attrubutes);
        onReceivedJob(port, &jobDataS);
        return nRet;
    }
    int CEquipment::onSentOutJob(int port, CJobDataS* pJobDataS)
    {
        LOGI("<CEquipment-%s>onSentOutJob.", m_strName.c_str());
        // return fetchedOutJob(pszGlassId);
        return 0;
    }
    int CEquipment::decodeFetchedOutJobReport(CStep* pStep, int port, const char* pszData, size_t size)
    {
        int index = 0;
@@ -1098,16 +1148,16 @@
            jobDataB.getGlassId().c_str(), "", weight++));
        onFetchedOut(port, jobDataB.getGlassId().c_str());
        onFetchedOutJob(port, jobDataB.getGlassId().c_str());
        return index;
    }
    int CEquipment::onFetchedOut(int port, const char* pszGlassId)
    int CEquipment::onFetchedOutJob(int port, const char* pszGlassId)
    {
        LOGI("<CEquipment-%s>onFetchedOut:port:%d|GlassId:%s",
        LOGI("<CEquipment-%s>onFetchedOutJob:port:%d|GlassId:%s",
            m_strName.c_str(), port, pszGlassId);
        return fetchedOut(pszGlassId);
        return fetchedOutJob(pszGlassId);
    }
    int CEquipment::decodeStoredJobReport(CStep* pStep, int port, const char* pszData, size_t size)
@@ -1147,12 +1197,12 @@
            jobDataB.getGlassId().c_str(), "", weight++));
        onStore(port, jobDataB.getGlassId().c_str());
        onStoreJob(port, jobDataB.getGlassId().c_str());
        return index;
    }
    int CEquipment::onStore(int port, const char* pszGlassId)
    int CEquipment::onStoreJob(int port, const char* pszGlassId)
    {
        LOGI("<CEquipment-%s>onStore:port:%d|GlassId:%s",
            m_strName.c_str(), port, pszGlassId);
SourceCode/Bond/Servo/CEquipment.h
@@ -116,8 +116,10 @@
        virtual BOOL glassWillArrive(CGlass* pGlass);
        virtual int outputGlass(int port);
        virtual int glassArrived(CGlass* pGlass);
        virtual int onFetchedOut(int port, const char* pszGlassId);
        virtual int onStore(int port, const char* pszGlassId);
        virtual int onReceivedJob(int port, CJobDataS* pJobDataS);
        virtual int onSentOutJob(int port, CJobDataS* pJobDataS);
        virtual int onFetchedOutJob(int port, const char* pszGlassId);
        virtual int onStoreJob(int port, const char* pszGlassId);
        void getGlassList(std::list<CGlass*>& list);
        CGlass* getFrontGlass();
        BOOL removeClass(CGlass* pGlass);
@@ -148,7 +150,7 @@
        int recipeParameterRequest(short masterRecipeId, short localRecipeId, short unitNo);
    public:
        int fetchedOut(const char* pszGlassId);
        int fetchedOutJob(const char* pszGlassId);
        int storedJob(const char* pszGlassId);
        BOOL isGlassListEmpty();
@@ -171,6 +173,8 @@
        void addGlassToList(CGlass* pGlass);
        short decodeRecipeListReport(const char* pszData, size_t size);
        short decodeRecipeParameterReport(const char* pszData, size_t size);
        int decodeReceivedJobReport(CStep* pStep, int port, const char* pszData, size_t size);
        int decodeSentOutJobReport(CStep* pStep, int port, const char* pszData, size_t size);
        int decodeFetchedOutJobReport(CStep* pStep, int port, const char* pszData, size_t size);
        int decodeStoredJobReport(CStep* pStep, int port, const char* pszData, size_t size);
SourceCode/Bond/Servo/CJobDataS.cpp
@@ -340,23 +340,23 @@
        memcpy(&pszBuffer[index], &m_nJobSequenceNo, sizeof(short));
        index += sizeof(short);
        int strLen = min(40, m_strLotId.size());
        int strLen = min(40, (int)m_strLotId.size());
        memcpy(&pszBuffer[index], m_strLotId.c_str(), strLen);
        index += 40;
        strLen = min(20, m_strProductId.size());
        strLen = min(20, (int)m_strProductId.size());
        memcpy(&pszBuffer[index], m_strProductId.c_str(), strLen);
        index += 20;
        strLen = min(20, m_strOperationId.size());
        strLen = min(20, (int)m_strOperationId.size());
        memcpy(&pszBuffer[index], m_strOperationId.c_str(), strLen);
        index += 20;
        strLen = min(20, m_strGlass1Id.size());
        strLen = min(20, (int)m_strGlass1Id.size());
        memcpy(&pszBuffer[index], m_strGlass1Id.c_str(), strLen);
        index += 20;
        strLen = min(20, m_strGlass2Id.size());
        strLen = min(20, (int)m_strGlass2Id.size());
        memcpy(&pszBuffer[index], m_strGlass2Id.c_str(), strLen);
        index += 20;
@@ -405,19 +405,19 @@
        memcpy(&pszBuffer[index], &m_nMasterRecipe, sizeof(short));
        index += sizeof(short);
        strLen = min(10, m_strProductRecipeId.size());
        strLen = min(10, (int)m_strProductRecipeId.size());
        memcpy(&pszBuffer[index], m_strProductRecipeId.c_str(), strLen);
        index += 10;
        strLen = min(10, m_strPCode.size());
        strLen = min(10, (int)m_strPCode.size());
        memcpy(&pszBuffer[index], m_strPCode.c_str(), strLen);
        index += 10;
        strLen = min(10, m_strUseType.size());
        strLen = min(10, (int)m_strUseType.size());
        memcpy(&pszBuffer[index], m_strUseType.c_str(), strLen);
        index += 10;
        strLen = min(80, m_strPanelMeasure.size());
        strLen = min(80, (int)m_strPanelMeasure.size());
        memcpy(&pszBuffer[index], m_strPanelMeasure.c_str(), strLen);
        index += 80;
@@ -543,4 +543,100 @@
        return 256 * 2;
    }
    void CJobDataS::getAttributeVector(CAttributeVector& attrubutes, int beginWeight)
    {
        unsigned int weight = beginWeight;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("CassetteSequenceNo",
            std::to_string(getCassetteSequenceNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("JobSequenceNo",
            std::to_string(getJobSequenceNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("LotId",
            getLotId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProductId",
            getProductId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("OperationId",
            getOperationId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Glass1Id",
            getGlass1Id().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Glass2Id",
            getGlass2Id().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("JobType",
            std::to_string(getJobType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("MaterialsType",
            std::to_string(getMaterialsType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProductType",
            std::to_string(getProductType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("DummyType",
            std::to_string(getDummyType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SkipFlag",
            std::to_string(getSkipFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProcessFlag",
            std::to_string(getProcessFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProcessResonCode",
            std::to_string(getProcessResonCode()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("LastGlassFlag",
            std::to_string(getLastGlassFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("FirstGlassFlag",
            std::to_string(getFirstGlassFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTime1",
            std::to_string(getQTime(0)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTime2",
            std::to_string(getQTime(1)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTime3",
            std::to_string(getQTime(2)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTimeOverFlag",
            std::to_string(getQTimeOverFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("MasterRecipe",
            std::to_string(getMasterRecipe()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProductRecipeId",
            getProductRecipeId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("PCode",
            getPCode().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("UseType",
            getUseType().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("PanelMeasure",
            getPanelMeasure().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SlotUnitSelectFlag",
            std::to_string(getSlotUnitSelectFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SourcePortNo",
            std::to_string(getSourcePortNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SourceSlotNo",
            std::to_string(getSourceSlotNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("TargetPortNo",
            std::to_string(getTargetPortNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("TargetSlotNo",
            std::to_string(getTargetSlotNo()).c_str(), "", weight++));
    }
}
SourceCode/Bond/Servo/CJobDataS.h
@@ -1,4 +1,5 @@
#pragma once
#include "CAttributeVector.h"
namespace SERVO {
@@ -69,6 +70,7 @@
        void setTargetSlotNo(int no);
        int serialize(char* pszBuffer, int nBufferSize);
        int unserialize(const char* pszBuffer, int nBufferSize);
        void getAttributeVector(CAttributeVector& attrubutes, int beginWeight);
    private:
SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -193,7 +193,7 @@
            if (pEquipment->getID() == EQ_ID_LOADPORT1) {
                pEquipment->outputGlass(1);
            }
            pEquipment->fetchedOut("P20250320A1A2");
            pEquipment->fetchedOutJob("P20250320A1A2");
        }
        else if (nCmd == ID_EQSGRAPHITEM_TEST2) {
            SERVO::CEquipment* pEquipment = (SERVO::CEquipment*)pItem->pData;
SourceCode/Bond/Servo/CStep.cpp
@@ -91,6 +91,15 @@
        m_attributeVector.addAttribute(pAttribute, TRUE);
    }
    void CStep::addAttributeVector(CAttributeVector& attributeVector)
    {
        // 添加attribute时,要前删除存在的同名的attribute
        unsigned int size = attributeVector.size();
        for (unsigned int i = 0; i < size; i++) {
            m_attributeVector.addAttribute(attributeVector.getAttribute(i), TRUE);
        }
    }
    void CStep::convertString(const char* pszBuffer, int size, std::string& strOut)
    {
        strOut.clear();
SourceCode/Bond/Servo/CStep.h
@@ -30,6 +30,7 @@
        void setProp(const char* pszKey, void* pValue);
        void* getProp(const char* pszKey);
        void addAttribute(CAttribute* pAttribute);
        void addAttributeVector(CAttributeVector& attributeVector);
    protected:
        inline void Lock() { EnterCriticalSection(&m_criticalSection); }
SourceCode/Bond/Servo/Common.h
@@ -137,10 +137,26 @@
#define STEP_EQ_P3_CASSETTE_CTRL_CMD    _T("EQPort3CassetteCtrlCmd")
#define STEP_EQ_P4_CASSETTE_CTRL_CMD    _T("EQPort4CassetteCtrlCmd")
#define STEP_EQ_CIM_MESSAGE_CONFIRM        _T("EQCimMessageConfirm")
#define STEP_EQ_RECEIVED_JOB_UPSn        _T("EQJEReceivedJobUps")
#define STEP_EQ_RECEIVED_JOB_UPS1        _T("EQJEReceivedJobUps1")
#define STEP_EQ_RECEIVED_JOB_UPS2        _T("EQJEReceivedJobUps2")
#define STEP_EQ_RECEIVED_JOB_UPS3        _T("EQJEReceivedJobUps3")
#define STEP_EQ_RECEIVED_JOB_UPS4        _T("EQJEReceivedJobUps4")
#define STEP_EQ_RECEIVED_JOB_UPS5        _T("EQJEReceivedJobUps5")
#define STEP_EQ_RECEIVED_JOB_UPS6        _T("EQJEReceivedJobUps6")
#define STEP_EQ_RECEIVED_JOB_UPS7        _T("EQJEReceivedJobUps7")
#define STEP_EQ_RECEIVED_JOB_UPS8        _T("EQJEReceivedJobUps8")
#define STEP_EQ_RECEIVED_JOB_UPS9        _T("EQJEReceivedJobUps9")
#define STEP_EQ_SENT_OUT_JOB_DOWNSn        _T("EQJESentOutJobDowns")
#define STEP_EQ_SENT_OUT_JOB_DOWNS1        _T("EQJESentOutJobDowns1")
#define STEP_EQ_SENT_OUT_JOB_DOWNS2        _T("EQJESentOutJobDowns2")
#define STEP_EQ_SENT_OUT_JOB_DOWNS3        _T("EQJESentOutJobDowns3")
#define STEP_EQ_SENT_OUT_JOB_DOWNS4        _T("EQJESentOutJobDowns4")
#define STEP_EQ_SENT_OUT_JOB_DOWNS5        _T("EQJESentOutJobDowns5")
#define STEP_EQ_SENT_OUT_JOB_DOWNS6        _T("EQJESentOutJobDowns6")
#define STEP_EQ_SENT_OUT_JOB_DOWNS7        _T("EQJESentOutJobDowns7")
#define STEP_EQ_SENT_OUT_JOB_DOWNS8        _T("EQJESentOutJobDowns8")
#define STEP_EQ_SENT_OUT_JOB_DOWNS9        _T("EQJESentOutJobDowns9")
#define STEP_EQ_VCR1_EVENT_REPORT        _T("EQVcr1EventReport")
#define STEP_EQ_RURRENT_RECIPE_CHANGE    _T("EQCurrentRecipeChange")
#define STEP_EQ_MASTER_RECIPE_LIST_REQ    _T("EQMasterRecipeListReq")
@@ -216,8 +232,22 @@
#define STEP_ID_RECIPE_PARAMETER_REPORT            0x56C
#define STEP_ID_RECIVE_JOB_UPS1                    0x580
#define STEP_ID_RECIVE_JOB_UPS2                    0x581
#define STEP_ID_RECIVE_JOB_UPS3                    0x582
#define STEP_ID_RECIVE_JOB_UPS4                    0x583
#define STEP_ID_RECIVE_JOB_UPS5                    0x584
#define STEP_ID_RECIVE_JOB_UPS6                    0x585
#define STEP_ID_RECIVE_JOB_UPS7                    0x586
#define STEP_ID_RECIVE_JOB_UPS8                    0x587
#define STEP_ID_RECIVE_JOB_UPS9                    0x588
#define STEP_ID_SENT_OUT_JOB_DOWNS1                0x590
#define STEP_ID_SENT_OUT_JOB_DOWNS2                0x591
#define STEP_ID_SENT_OUT_JOB_DOWNS3                0x592
#define STEP_ID_SENT_OUT_JOB_DOWNS4                0x593
#define STEP_ID_SENT_OUT_JOB_DOWNS5                0x594
#define STEP_ID_SENT_OUT_JOB_DOWNS6                0x595
#define STEP_ID_SENT_OUT_JOB_DOWNS7                0x596
#define STEP_ID_SENT_OUT_JOB_DOWNS8                0x597
#define STEP_ID_SENT_OUT_JOB_DOWNS9                0x598
#define STEP_ID_STORE_JOB_REPORT1                0x5A0
#define STEP_ID_STORE_JOB_REPORT2                0x5A1
#define STEP_ID_STORE_JOB_REPORT3                0x5A2