LAPTOP-SNT8I5JK\Boounion
2025-05-12 d68541dce155a682f65b7c3fbfbfbeef17ea5b8f
1.StoredJob, Fetched out Job实现;
2.CStep增加定制的Attribute, 以便通过的Step不使用getAttributeVector也能添加不一样的Attribute;
已修改34个文件
408 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CAttribute.cpp 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CAttribute.h 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CAttributeVector.cpp 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CAttributeVector.h 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CBonder.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEFEM.cpp 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqAlarmStep.cpp 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqCassetteCtrlCmdStep.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqCassetteTransferStateStep.cpp 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqCimMessageClearStep.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqCimMessageCmdStep.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqCimModeChangeStep.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqCurrentRecipeChangeStep.cpp 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqDateTimeSetCmdStep.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqJobEventStep.cpp 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqModeChangeStep.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqModeStep.cpp 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqPortChangeStep.cpp 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqProcessStep.cpp 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqReadIntStep.cpp 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqReadStep.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqStatusStep.cpp 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqVCREnableStep.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqVcrEventStep.cpp 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqWriteStep.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.cpp 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CLoadPort.cpp 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPanelAttributes.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CReadStep.cpp 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CStep.cpp 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CStep.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CWriteStep.cpp 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Common.h 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CAttribute.cpp
@@ -4,14 +4,15 @@
namespace SERVO {
    CAttribute::CAttribute()
    {
        m_nWeight = 0;
    }
    CAttribute::CAttribute(const char* pszName, const char* pszValue, const char* pszDescription)
    CAttribute::CAttribute(const char* pszName, const char* pszValue, const char* pszDescription, unsigned int weight)
    {
        m_strName = pszName;
        m_strValue = pszValue;
        m_strDescription = pszDescription;
        m_nWeight = weight;
    }
    CAttribute::~CAttribute()
@@ -33,4 +34,9 @@
    {
        return m_strDescription;
    }
    unsigned int CAttribute::getWeight()
    {
        return m_nWeight;
    }
}
SourceCode/Bond/Servo/CAttribute.h
@@ -6,18 +6,20 @@
    {
    public:
        CAttribute();
        CAttribute(const char* pszName, const char* pszValue, const char* pszDescription);
        CAttribute(const char* pszName, const char* pszValue, const char* pszDescription, unsigned int weight);
        ~CAttribute();
    public:
        std::string& getName();
        std::string& getValue();
        std::string& getDescription();
        unsigned int getWeight();
    private:
        std::string m_strName;
        std::string m_strValue;
        std::string m_strDescription;
        unsigned int m_nWeight;                // 权重,用于排序
    };
}
SourceCode/Bond/Servo/CAttributeVector.cpp
@@ -1,5 +1,6 @@
#include "stdafx.h"
#include "CAttributeVector.h"
#include <algorithm>
namespace SERVO {
@@ -16,14 +17,33 @@
        m_attributes.clear();
    }
    void CAttributeVector::addAttribute(CAttribute* pAttribute)
    void CAttributeVector::addAttribute(CAttribute* pAttribute, BOOL bReplace/* = FALSE*/)
    {
        if (bReplace) {
            for (auto it = m_attributes.begin(); it != m_attributes.end(); ) {
                if ((*it)->getName().compare(pAttribute->getName()) == 0) {
                    delete (*it);
                    it = m_attributes.erase(it);
                }
                else {
                    ++it;
                }
            }
        }
        m_attributes.push_back(pAttribute);
    }
    void CAttributeVector::addAttributeVector(CAttributeVector& av)
    {
        for (auto item : av.m_attributes) {
            m_attributes.push_back(item);
        }
    }
    unsigned int CAttributeVector::size()
    {
        return m_attributes.size();
        return (unsigned int)m_attributes.size();
    }
    void CAttributeVector::clear()
@@ -34,6 +54,13 @@
        m_attributes.clear();
    }
    void CAttributeVector::sortWithWeight()
    {
        std::sort(m_attributes.begin(), m_attributes.end(), [](CAttribute* pAttribute1, CAttribute* pAttribut2) {
            return pAttribute1->getWeight() < pAttribut2->getWeight();
        });
    }
    bool CAttributeVector::empty()
    {
        return m_attributes.empty();
SourceCode/Bond/Servo/CAttributeVector.h
@@ -11,8 +11,10 @@
        ~CAttributeVector();
    public:
        void addAttribute(CAttribute* pAttribute);
        void addAttribute(CAttribute* pAttribute, BOOL bReplace = FALSE);
        void addAttributeVector(CAttributeVector& av);
        void clear();
        void sortWithWeight();
        unsigned int size();
        bool empty();
        CAttribute* getAttribute(unsigned int index);
SourceCode/Bond/Servo/CBonder.cpp
@@ -281,7 +281,7 @@
                        if (code == ROK && pszData != nullptr && size > 0) {
                            int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
                            if (port > 0) {
                                decodeFetchedOutJobReport(port, pszData, size);
                                decodeFetchedOutJobReport((CStep*)pFrom, port, pszData, size);
                            }
                        }
                        return -1;
@@ -305,7 +305,7 @@
                        if (code == ROK && pszData != nullptr && size > 0) {
                            int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
                            if (port > 0) {
                                decodeStoredJobReport(port, pszData, size);
                                decodeStoredJobReport((CStep*)pFrom, port, pszData, size);
                            }
                        }
                        return -1;
SourceCode/Bond/Servo/CEFEM.cpp
@@ -294,6 +294,30 @@
            STEP_ID_PORT4_CASSETTIE_BLOCKED, 0x60b0);
        {
            // Received Job Report Upstream#1~9
            char szBuffer[256];
            for (int i = 0; i < 9; i++) {
                CEqReadStep* pStep = new CEqReadStep(0x4c90 + 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) {
                                decodeFetchedOutJobReport((CStep*)pFrom, port, pszData, size);
                            }
                        }
                        return -1;
                    });
                sprintf_s(szBuffer, "%s%d", STEP_EQ_RECEIVED_JOBn, i + 1);
                pStep->setName(szBuffer);
                pStep->setProp("Upstream", (void*)(__int64)(i + 1));
                pStep->setWriteSignalDev(0x0 + i);
                if (addStep(STEP_ID_FETCHED_OUT_JOB_REPORT1 + i, pStep) != 0) {
                    delete pStep;
                }
            }
        }
        {
            // Fetched Out Job Report #1~15
            char szBuffer[256];
            for (int i = 0; i < 15; i++) {
@@ -302,7 +326,7 @@
                        if (code == ROK && pszData != nullptr && size > 0) {
                            int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
                            if (port > 0) {
                                decodeFetchedOutJobReport(port, pszData, size);
                                decodeFetchedOutJobReport((CStep*)pFrom, port, pszData, size);
                            }
                        }
                        return -1;
@@ -326,7 +350,7 @@
                        if (code == ROK && pszData != nullptr && size > 0) {
                            int port = (int)(__int64)((CEqReadStep*)pFrom)->getProp("Port");
                            if (port > 0) {
                                decodeStoredJobReport(port, pszData, size);
                                decodeStoredJobReport((CStep*)pFrom, port, pszData, size);
                            }
                        }
                        return -1;
SourceCode/Bond/Servo/CEqAlarmStep.cpp
@@ -24,20 +24,21 @@
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        attrubutes.addAttribute(new CAttribute("Alarm State",
            std::to_string(m_nAlarmState).c_str(), ""));
            std::to_string(m_nAlarmState).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Unit ID",
            std::to_string(m_nUnitId).c_str(), ""));
            std::to_string(m_nUnitId).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Alarm Level",
            std::to_string(m_nAlarmLevel).c_str(), ""));
            std::to_string(m_nAlarmLevel).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Alarm Code",
            std::to_string(m_nAlarmCode).c_str(), ""));
            std::to_string(m_nAlarmCode).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Alarm ID",
            std::to_string(m_nAlarmId).c_str(), ""));
            std::to_string(m_nAlarmId).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Text",
            m_strText.c_str(), ""));
            m_strText.c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Description",
            m_strDescription.c_str(), ""));
            m_strDescription.c_str(), "", weight++));
    }
    int CEqAlarmStep::onReadData()
SourceCode/Bond/Servo/CEqCassetteCtrlCmdStep.cpp
@@ -41,9 +41,10 @@
    {
        CWriteStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Control Command Dev",
            ("W" + CToolUnits::toHexString(m_nCtrlCmdDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nCtrlCmdDev, strTemp)).c_str(), "", weight++));
    }
}
SourceCode/Bond/Servo/CEqCassetteTransferStateStep.cpp
@@ -25,23 +25,24 @@
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Dev",
            ("W" + CToolUnits::toHexString(m_nPortStatusDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nPortStatusDev, strTemp)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Port Status",
            getPortStatusDescription(strTemp).c_str(), ""));
            getPortStatusDescription(strTemp).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("CassetteSequenceNo",
            std::to_string(m_nCassetteSequenceNo).c_str(), ""));
            std::to_string(m_nCassetteSequenceNo).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("CassetteID",
            m_strCassetteID.c_str(), ""));
            m_strCassetteID.c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("LoadingCassetteType",
            getLoadingCassetteTypeDescription(strTemp).c_str(), ""));
            getLoadingCassetteTypeDescription(strTemp).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Q-Time Flag",
            getQTimeFlagDescription(strTemp).c_str(), ""));
            getQTimeFlagDescription(strTemp).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("CassetteMappingState",
            getCassetteMappingStateDescription(strTemp).c_str(), ""));
            getCassetteMappingStateDescription(strTemp).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("CassetteStatus",
            getCassetteStatusDescription(strTemp).c_str(), ""));
            getCassetteStatusDescription(strTemp).c_str(), "", weight++));
    }
    int CEqCassetteTransferStateStep::onReadData()
SourceCode/Bond/Servo/CEqCimMessageClearStep.cpp
@@ -30,8 +30,9 @@
    {
        CWriteStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Clear Cim Message Dev",
            ("W" + CToolUnits::toHexString(m_nClearCimMessageDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nClearCimMessageDev, strTemp)).c_str(), "", weight++));
    }
}
SourceCode/Bond/Servo/CEqCimMessageCmdStep.cpp
@@ -31,8 +31,9 @@
    {
        CWriteStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Cim Message Dev",
            ("W" + CToolUnits::toHexString(m_nCimMessageDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nCimMessageDev, strTemp)).c_str(), "", weight++));
    }
}
SourceCode/Bond/Servo/CEqCimModeChangeStep.cpp
@@ -39,8 +39,9 @@
    {
        CWriteStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Cim Mode Dev",
            ("W" + CToolUnits::toHexString(m_nCimModeDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nCimModeDev, strTemp)).c_str(), "", weight++));
    }
}
SourceCode/Bond/Servo/CEqCurrentRecipeChangeStep.cpp
@@ -24,12 +24,13 @@
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        attrubutes.addAttribute(new CAttribute("UnitNo",
            std::to_string(m_nUnitNo).c_str(), ""));
            std::to_string(m_nUnitNo).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("CurrentMasterRecipeId",
            std::to_string(m_nCurrentMasterRecipeId).c_str(), ""));
            std::to_string(m_nCurrentMasterRecipeId).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("LocalRecipeId",
            std::to_string(m_nLocalRecipeId).c_str(), ""));
            std::to_string(m_nLocalRecipeId).c_str(), "", weight++));
    }
    int CEqCurrentRecipeChangeStep::onReadData()
SourceCode/Bond/Servo/CEqDateTimeSetCmdStep.cpp
@@ -29,8 +29,9 @@
    {
        CWriteStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("DateTime Dev",
            ("W" + CToolUnits::toHexString(m_nDateTimeDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nDateTimeDev, strTemp)).c_str(), "", weight++));
    }
}
SourceCode/Bond/Servo/CEqJobEventStep.cpp
@@ -23,99 +23,100 @@
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Dev",
            ("W" + CToolUnits::toHexString(m_nJobDataADev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nJobDataADev, strTemp)).c_str(), "", weight++));
    
        attrubutes.addAttribute(new CAttribute("CassetteSequenceNo",
            std::to_string(m_jobDataS.getCassetteSequenceNo()).c_str(), ""));
            std::to_string(m_jobDataS.getCassetteSequenceNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("JobSequenceNo",
            std::to_string(m_jobDataS.getJobSequenceNo()).c_str(), ""));
            std::to_string(m_jobDataS.getJobSequenceNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("LotId",
            m_jobDataS.getLotId().c_str(), ""));
            m_jobDataS.getLotId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProductId",
            m_jobDataS.getProductId().c_str(), ""));
            m_jobDataS.getProductId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("OperationId",
            m_jobDataS.getOperationId().c_str(), ""));
            m_jobDataS.getOperationId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Glass1Id",
            m_jobDataS.getGlass1Id().c_str(), ""));
            m_jobDataS.getGlass1Id().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Glass2Id",
            m_jobDataS.getGlass2Id().c_str(), ""));
            m_jobDataS.getGlass2Id().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("JobType",
            std::to_string(m_jobDataS.getJobType()).c_str(), ""));
            std::to_string(m_jobDataS.getJobType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("MaterialsType",
            std::to_string(m_jobDataS.getMaterialsType()).c_str(), ""));
            std::to_string(m_jobDataS.getMaterialsType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProductType",
            std::to_string(m_jobDataS.getProductType()).c_str(), ""));
            std::to_string(m_jobDataS.getProductType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("DummyType",
            std::to_string(m_jobDataS.getDummyType()).c_str(), ""));
            std::to_string(m_jobDataS.getDummyType()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SkipFlag",
            std::to_string(m_jobDataS.getSkipFlag()).c_str(), ""));
            std::to_string(m_jobDataS.getSkipFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProcessFlag",
            std::to_string(m_jobDataS.getProcessFlag()).c_str(), ""));
            std::to_string(m_jobDataS.getProcessFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProcessResonCode",
            std::to_string(m_jobDataS.getProcessResonCode()).c_str(), ""));
            std::to_string(m_jobDataS.getProcessResonCode()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("LastGlassFlag",
            std::to_string(m_jobDataS.getLastGlassFlag()).c_str(), ""));
            std::to_string(m_jobDataS.getLastGlassFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("FirstGlassFlag",
            std::to_string(m_jobDataS.getFirstGlassFlag()).c_str(), ""));
            std::to_string(m_jobDataS.getFirstGlassFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTime1",
            std::to_string(m_jobDataS.getQTime(0)).c_str(), ""));
            std::to_string(m_jobDataS.getQTime(0)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTime2",
            std::to_string(m_jobDataS.getQTime(1)).c_str(), ""));
            std::to_string(m_jobDataS.getQTime(1)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTime3",
            std::to_string(m_jobDataS.getQTime(2)).c_str(), ""));
            std::to_string(m_jobDataS.getQTime(2)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("QTimeOverFlag",
            std::to_string(m_jobDataS.getQTimeOverFlag()).c_str(), ""));
            std::to_string(m_jobDataS.getQTimeOverFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("MasterRecipe",
            std::to_string(m_jobDataS.getMasterRecipe()).c_str(), ""));
            std::to_string(m_jobDataS.getMasterRecipe()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ProductRecipeId",
            m_jobDataS.getProductRecipeId().c_str(), ""));
            m_jobDataS.getProductRecipeId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("PCode",
            m_jobDataS.getPCode().c_str(), ""));
            m_jobDataS.getPCode().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("UseType",
            m_jobDataS.getUseType().c_str(), ""));
            m_jobDataS.getUseType().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("PanelMeasure",
            m_jobDataS.getPanelMeasure().c_str(), ""));
            m_jobDataS.getPanelMeasure().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SlotUnitSelectFlag",
            std::to_string(m_jobDataS.getSlotUnitSelectFlag()).c_str(), ""));
            std::to_string(m_jobDataS.getSlotUnitSelectFlag()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SourcePortNo",
            std::to_string(m_jobDataS.getSourcePortNo()).c_str(), ""));
            std::to_string(m_jobDataS.getSourcePortNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("SourceSlotNo",
            std::to_string(m_jobDataS.getSourceSlotNo()).c_str(), ""));
            std::to_string(m_jobDataS.getSourceSlotNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("TargetPortNo",
            std::to_string(m_jobDataS.getTargetPortNo()).c_str(), ""));
            std::to_string(m_jobDataS.getTargetPortNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("TargetSlotNo",
            std::to_string(m_jobDataS.getTargetSlotNo()).c_str(), ""));
            std::to_string(m_jobDataS.getTargetSlotNo()).c_str(), "", weight++));
    }
    int CEqJobEventStep::onReadData()
SourceCode/Bond/Servo/CEqModeChangeStep.cpp
@@ -39,8 +39,9 @@
    {
        CWriteStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Equipment Mode Dev",
            ("W" + CToolUnits::toHexString(m_nEqModeDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nEqModeDev, strTemp)).c_str(), "", weight++));
    }
}
SourceCode/Bond/Servo/CEqModeStep.cpp
@@ -19,11 +19,12 @@
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Mode",
            std::to_string(m_nMode).c_str(), getModeDescription(strTemp).c_str()));
            std::to_string(m_nMode).c_str(), getModeDescription(strTemp).c_str(), weight++));
        attrubutes.addAttribute(new CAttribute("Mode Dev",
            ("W" + CToolUnits::toHexString(m_nModeDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nModeDev, strTemp)).c_str(), "", weight++));
    }
    int CEqModeStep::onReadData()
SourceCode/Bond/Servo/CEqPortChangeStep.cpp
@@ -24,21 +24,22 @@
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Port Dev",
            ("W" + CToolUnits::toHexString(m_nPortDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nPortDev, strTemp)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("PortType",
            std::to_string(m_nPortType).c_str(), getPortTypeDescription(strTemp).c_str()));
            std::to_string(m_nPortType).c_str(), getPortTypeDescription(strTemp).c_str(), weight++));
        attrubutes.addAttribute(new CAttribute("PortMode",
            std::to_string(m_nPortMode).c_str(), getPortModeDescription(strTemp).c_str()));
            std::to_string(m_nPortMode).c_str(), getPortModeDescription(strTemp).c_str(), weight++));
        attrubutes.addAttribute(new CAttribute("PortCassetteType",
            std::to_string(m_nPortCassetteType).c_str(), getPortCassetteTypeDescription(strTemp).c_str()));
            std::to_string(m_nPortCassetteType).c_str(), getPortCassetteTypeDescription(strTemp).c_str(), weight++));
        attrubutes.addAttribute(new CAttribute("PortTransferMode",
            std::to_string(m_nPortTransferMode).c_str(), getPortTransferModeDescription(strTemp).c_str()));
            std::to_string(m_nPortTransferMode).c_str(), getPortTransferModeDescription(strTemp).c_str(), weight++));
        attrubutes.addAttribute(new CAttribute("PortEnableMode",
            std::to_string(m_nPortEanbleMode).c_str(), getPortEnableModeDescription(strTemp).c_str()));
            std::to_string(m_nPortEanbleMode).c_str(), getPortEnableModeDescription(strTemp).c_str(), weight++));
        attrubutes.addAttribute(new CAttribute("PortTypeAutoChangeMode",
            std::to_string(m_nPortTypeAutoChangeMode).c_str(), getPortTypeAutoChangeModeDescription(strTemp).c_str()));
            std::to_string(m_nPortTypeAutoChangeMode).c_str(), getPortTypeAutoChangeModeDescription(strTemp).c_str(), weight++));
    }
    int CEqPortChangeStep::onReadData()
SourceCode/Bond/Servo/CEqProcessStep.cpp
@@ -22,25 +22,26 @@
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        attrubutes.addAttribute(new CAttribute("Glass ID",
            m_strGlassId.c_str(), ""));
            m_strGlassId.c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Start Time",
            m_strStartTime.c_str(), ""));
            m_strStartTime.c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("End Time",
            m_strEndTime.c_str(), ""));
            m_strEndTime.c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Total Parameter",
            std::to_string(m_nTotalParameter).c_str(), ""));
            std::to_string(m_nTotalParameter).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Total Group",
            std::to_string(m_nTotalGroup).c_str(), ""));
            std::to_string(m_nTotalGroup).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Current Group",
            std::to_string(m_nCurrentGroup).c_str(), ""));
            std::to_string(m_nCurrentGroup).c_str(), "", weight++));
        char szName[256];
        int index = 0;
        for (auto item : m_params) {
            sprintf_s(szName, 256, "Parameter %d", ++index);
            attrubutes.addAttribute(new CAttribute(szName,
                item.c_str(), ""));
                item.c_str(), "", weight++));
        }
    }
SourceCode/Bond/Servo/CEqReadIntStep.cpp
@@ -27,11 +27,12 @@
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Dev",
            ("W" + CToolUnits::toHexString(m_nValueDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nValueDev, strTemp)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Value",
            std::to_string(m_nValue).c_str(), ""));
            std::to_string(m_nValue).c_str(), "", weight++));
    }
    int CEqReadIntStep::onReadData()
SourceCode/Bond/Servo/CEqReadStep.cpp
@@ -27,9 +27,10 @@
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Dev",
            ("W" + CToolUnits::toHexString(m_nDataDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nDataDev, strTemp)).c_str(), "", weight++));
    }
    int CEqReadStep::onReadData()
SourceCode/Bond/Servo/CEqStatusStep.cpp
@@ -25,19 +25,20 @@
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        char szName[256];
        for (int i = 0; i < STATUS_MAX; i++) {
            sprintf_s(szName, 256, "Status %d", i + 1);
            attrubutes.addAttribute(new CAttribute(szName,
                std::to_string(m_nStatus[i]).c_str(), ""));
                std::to_string(m_nStatus[i]).c_str(), "", weight++));
            sprintf_s(szName, 256, "Reason Code %d", i + 1);
            attrubutes.addAttribute(new CAttribute(szName,
                std::to_string(m_nReasonCode[i]).c_str(), ""));
                std::to_string(m_nReasonCode[i]).c_str(), "", weight++));
        }
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Status Dev",
            ("W" + CToolUnits::toHexString(m_nStatusDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nStatusDev, strTemp)).c_str(), "", weight++));
    }
    int CEqStatusStep::getStatus(unsigned int uint)
SourceCode/Bond/Servo/CEqVCREnableStep.cpp
@@ -43,6 +43,6 @@
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("VCR Mode Dev",
            ("W" + CToolUnits::toHexString(m_nEqVCRModeDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nEqVCRModeDev, strTemp)).c_str(), "", 31));
    }
}
SourceCode/Bond/Servo/CEqVcrEventStep.cpp
@@ -23,21 +23,22 @@
    {
        CReadStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Dev",
            ("W" + CToolUnits::toHexString(m_nVcrEventReportDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nVcrEventReportDev, strTemp)).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("GlassId",
            m_vcrEventReport.getGlassId().c_str(), ""));
            m_vcrEventReport.getGlassId().c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("CassetteSequenceNo",
            std::to_string(m_vcrEventReport.getCassetteSequenceNo()).c_str(), ""));
            std::to_string(m_vcrEventReport.getCassetteSequenceNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("JobSequenceNo",
            std::to_string(m_vcrEventReport.getJobSequenceNo()).c_str(), ""));
            std::to_string(m_vcrEventReport.getJobSequenceNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("UnitNo",
            std::to_string(m_vcrEventReport.getUnitNo()).c_str(), ""));
            std::to_string(m_vcrEventReport.getUnitNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("VCR No",
            std::to_string(m_vcrEventReport.getVcrNo()).c_str(), ""));
            std::to_string(m_vcrEventReport.getVcrNo()).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("VCR Result",
            m_vcrEventReport.getVcrResultDescription(strTemp).c_str(), ""));
            m_vcrEventReport.getVcrResultDescription(strTemp).c_str(), "", weight++));
    }
    int CEqVcrEventStep::onReadData()
SourceCode/Bond/Servo/CEqWriteStep.cpp
@@ -41,9 +41,10 @@
    {
        CWriteStep::getAttributeVector(attrubutes);
        unsigned int weight = 31;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Data Dev",
            ("W" + CToolUnits::toHexString(m_nDataDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nDataDev, strTemp)).c_str(), "", weight++));
    }
    int CEqWriteStep::onComplete()
SourceCode/Bond/Servo/CEquipment.cpp
@@ -203,48 +203,50 @@
    void CEquipment::getAttributeVector(CAttributeVector& attrubutes)
    {
        attrubutes.clear();
        unsigned int weight = 0;
        attrubutes.addAttribute(new CAttribute("Network",
            std::to_string(m_station.nNetNo).c_str(), ""));
            std::to_string(m_station.nNetNo).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Station",
            std::to_string(m_station.nStNo).c_str(), ""));
            std::to_string(m_station.nStNo).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("ID",
            std::to_string(m_nID).c_str(), ""));
            std::to_string(m_nID).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Name",
            m_strName.c_str(), ""));
            m_strName.c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Description",
            m_strDescription.c_str(), ""));
            m_strDescription.c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Alive",
            this->isAlive() ? _T("TRUE") : _T("FALSE"), ""));
            this->isAlive() ? _T("TRUE") : _T("FALSE"), "", weight++));
        attrubutes.addAttribute(new CAttribute("CIM State",
            m_bCimState ? _T("ON") : _T("OFF"), ""));
            m_bCimState ? _T("ON") : _T("OFF"), "", weight++));
        attrubutes.addAttribute(new CAttribute("Upstream",
            m_bUpstreamInline ? _T("Inline") : _T("Offline"), ""));
            m_bUpstreamInline ? _T("Inline") : _T("Offline"), "", weight++));
        attrubutes.addAttribute(new CAttribute("Downstream",
            m_bDownstreamInline ? _T("Inline") : _T("Offline"), ""));
            m_bDownstreamInline ? _T("Inline") : _T("Offline"), "", weight++));
        attrubutes.addAttribute(new CAttribute("Local Alarm",
            m_bLocalAlarm ? _T("TRUE") : _T("FALSE"), ""));
            m_bLocalAlarm ? _T("TRUE") : _T("FALSE"), "", weight++));
        attrubutes.addAttribute(new CAttribute("Auto Recipe Change",
            m_bAutoRecipeChange ? _T("TRUE") : _T("FALSE"), ""));
            m_bAutoRecipeChange ? _T("TRUE") : _T("FALSE"), "", weight++));
        char szTemp[256];
        for (int i = 0; i < VCR_MAX; i++) {
            sprintf_s(szTemp, 256, "VCR-%d", i + 1);
            attrubutes.addAttribute(new CAttribute(szTemp,
                m_bVCREnable[i] ? _T("Enable") : _T("Disable"), ""));
                m_bVCREnable[i] ? _T("Enable") : _T("Disable"), "", weight++));
        }
        for (auto item : m_inputPins) {
            attrubutes.addAttribute(new CAttribute(item->getName().c_str(),
                std::to_string((int)item->getType()).c_str(), ""));
                std::to_string((int)item->getType()).c_str(), "", weight++));
        }
        for (auto item : m_outputPins) {
            attrubutes.addAttribute(new CAttribute(item->getName().c_str(),
                std::to_string((int)item->getType()).c_str(), ""));
                std::to_string((int)item->getType()).c_str(), "", weight++));
        }
        for (auto item : m_glassList) {
            attrubutes.addAttribute(new CAttribute("Glass",
                item->getID().c_str(), ""));
                item->getID().c_str(), "", weight++));
        }
    }
@@ -1059,12 +1061,12 @@
        return m_recipesManager.decodeRecipeParameterReport(pszData, size);
    }
    int CEquipment::decodeFetchedOutJobReport(int port, const char* pszData, size_t size)
    int CEquipment::decodeFetchedOutJobReport(CStep* pStep, int port, const char* pszData, size_t size)
    {
        int index = 0;
        short unitOrPort, unitOrPortNo, subUnitNo, subSlotNo;
        CJobDataB jobDataB;
        int nRet = jobDataB.unserialize(&pszData[index], size);
        int nRet = jobDataB.unserialize(&pszData[index], (int)size);
        if (nRet < 0) return nRet;
        index += nRet;
@@ -1076,6 +1078,25 @@
        index += sizeof(short);
        memcpy(&subSlotNo, &pszData[index], sizeof(short));
        index += sizeof(short);
        // 缓存Attribute,用于调试时显示信息
        unsigned int weight = 201;
        pStep->addAttribute(new CAttribute("UnitOrPort",
            std::to_string(unitOrPort).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("UnitOrPortNo",
            std::to_string(unitOrPortNo).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("SubUnitNo",
            std::to_string(subUnitNo).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("SubSlotNo",
            std::to_string(subSlotNo).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("CassetteSequenceNo",
            std::to_string(jobDataB.getCassetteSequenceNo()).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("JobSequenceNo",
            std::to_string(jobDataB.getJobSequenceNo()).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("GlassId",
            jobDataB.getGlassId().c_str(), "", weight++));
        onFetchedOut(port, jobDataB.getGlassId().c_str());
@@ -1084,15 +1105,17 @@
    int CEquipment::onFetchedOut(int port, const char* pszGlassId)
    {
        LOGI("<CEquipment-%s>onFetchedOut:port:%d|GlassId:%s",
            m_strName.c_str(), port, pszGlassId);
        return fetchedOut(pszGlassId);
    }
    int CEquipment::decodeStoredJobReport(int port, const char* pszData, size_t size)
    int CEquipment::decodeStoredJobReport(CStep* pStep, int port, const char* pszData, size_t size)
    {
        int index = 0;
        short unitOrPort, unitOrPortNo, subUnitNo, subSlotNo;
        CJobDataB jobDataB;
        int nRet = jobDataB.unserialize(&pszData[index], size);
        int nRet = jobDataB.unserialize(&pszData[index], (int)size);
        if (nRet < 0) return nRet;
        index += nRet;
@@ -1105,6 +1128,25 @@
        memcpy(&subSlotNo, &pszData[index], sizeof(short));
        index += sizeof(short);
        // 缓存Attribute,用于调试时显示信息
        unsigned int weight = 201;
        pStep->addAttribute(new CAttribute("UnitOrPort",
            std::to_string(unitOrPort).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("UnitOrPortNo",
            std::to_string(unitOrPortNo).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("SubUnitNo",
            std::to_string(subUnitNo).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("SubSlotNo",
            std::to_string(subSlotNo).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("CassetteSequenceNo",
            std::to_string(jobDataB.getCassetteSequenceNo()).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("JobSequenceNo",
            std::to_string(jobDataB.getJobSequenceNo()).c_str(), "", weight++));
        pStep->addAttribute(new CAttribute("GlassId",
            jobDataB.getGlassId().c_str(), "", weight++));
        onStore(port, jobDataB.getGlassId().c_str());
        return index;
@@ -1112,6 +1154,8 @@
    int CEquipment::onStore(int port, const char* pszGlassId)
    {
        LOGI("<CEquipment-%s>onStore:port:%d|GlassId:%s",
            m_strName.c_str(), port, pszGlassId);
        return storedJob(pszGlassId);
    }
}
SourceCode/Bond/Servo/CEquipment.h
@@ -171,8 +171,8 @@
        void addGlassToList(CGlass* pGlass);
        short decodeRecipeListReport(const char* pszData, size_t size);
        short decodeRecipeParameterReport(const char* pszData, size_t size);
        int decodeFetchedOutJobReport(int port, const char* pszData, size_t size);
        int decodeStoredJobReport(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);
    protected:
        EquipmentListener m_listener;
SourceCode/Bond/Servo/CLoadPort.cpp
@@ -181,21 +181,22 @@
    {
        __super::getAttributeVector(attrubutes);
        unsigned int weight = 101;
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Index",
            std::to_string(m_nIndex).c_str(), ""));
            std::to_string(m_nIndex).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Type",
            getPortTypeDescription(m_nType, strTemp).c_str(), ""));
            getPortTypeDescription(m_nType, strTemp).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Mode",
            getPortModeDescription(m_nMode, strTemp).c_str(), ""));
            getPortModeDescription(m_nMode, strTemp).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("CassetteType",
            getPortCassetteTypeDescription(m_nCassetteType, strTemp).c_str(), ""));
            getPortCassetteTypeDescription(m_nCassetteType, strTemp).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("TransferMode",
            getPortTransferModeDescription(m_nTransferMode, strTemp).c_str(), ""));
            getPortTransferModeDescription(m_nTransferMode, strTemp).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Enable",
            m_bEnable ? "Eanble" : "Disable", ""));
            m_bEnable ? "Eanble" : "Disable", "", weight++));
        attrubutes.addAttribute(new CAttribute("Auto Change",
            m_bAutoChangeEnable ? "Eanble" : "Disable", ""));
            m_bAutoChangeEnable ? "Eanble" : "Disable", "", weight++));
    }
    int CLoadPort::recvIntent(CPin* pPin, CIntent* pIntent)
SourceCode/Bond/Servo/CPanelAttributes.cpp
@@ -59,6 +59,7 @@
    SetDlgItemText(IDC_LABEL_TITLE, pStep->getName().c_str());
    SERVO::CAttributeVector attrubutes;
    pStep->getAttributeVector(attrubutes);
    attrubutes.sortWithWeight();
    unsigned int nSize = attrubutes.size();
    for (unsigned int i = 0; i < nSize; i++) {
        SERVO::CAttribute* pAttribute = attrubutes.getAttribute(i);
SourceCode/Bond/Servo/CReadStep.cpp
@@ -154,10 +154,11 @@
        CStep::getAttributeVector(attrubutes);
        std::string strTemp;
        unsigned int weight = 21;
        attrubutes.addAttribute(new CAttribute("Current Step",
            std::to_string(m_nCurStep).c_str(), ""));
            std::to_string(m_nCurStep).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Signal Dev",
            ("W" + CToolUnits::toHexString(m_nWriteSignalDev, strTemp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nWriteSignalDev, strTemp)).c_str(), "", weight++));
    }
    void CReadStep::init()
SourceCode/Bond/Servo/CStep.cpp
@@ -53,11 +53,14 @@
    void CStep::getAttributeVector(CAttributeVector& attrubutes)
    {
        unsigned int weight = 1;
        attrubutes.clear();
        attrubutes.addAttribute(new CAttribute("Network", 
            std::to_string(m_station.nNetNo).c_str(), ""));
            std::to_string(m_station.nNetNo).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Station",
            std::to_string(m_station.nStNo).c_str(), ""));
            std::to_string(m_station.nStNo).c_str(), "", weight++));
        attrubutes.addAttributeVector(m_attributeVector);
    }
    void CStep::init()
@@ -82,6 +85,12 @@
        return iter->second;
    }
    void CStep::addAttribute(CAttribute* pAttribute)
    {
        // 添加attribute时,要前删除存在的同名的attribute
        m_attributeVector.addAttribute(pAttribute, TRUE);
    }
    void CStep::convertString(const char* pszBuffer, int size, std::string& strOut)
    {
        strOut.clear();
SourceCode/Bond/Servo/CStep.h
@@ -29,6 +29,7 @@
        virtual void term();
        void setProp(const char* pszKey, void* pValue);
        void* getProp(const char* pszKey);
        void addAttribute(CAttribute* pAttribute);
    protected:
        inline void Lock() { EnterCriticalSection(&m_criticalSection); }
@@ -43,6 +44,7 @@
        CCCLinkIEControl* m_pCclink;
        CRITICAL_SECTION m_criticalSection;
        std::map<std::string, void*> m_mapProp;
        CAttributeVector m_attributeVector;
    };
}
SourceCode/Bond/Servo/CWriteStep.cpp
@@ -141,10 +141,11 @@
        CStep::getAttributeVector(attrubutes);
        std::string temp;
        unsigned int weight = 20;
        attrubutes.addAttribute(new CAttribute("Current Step",
            std::to_string(m_nCurStep).c_str(), ""));
            std::to_string(m_nCurStep).c_str(), "", weight++));
        attrubutes.addAttribute(new CAttribute("Signal Dev",
            ("W" + CToolUnits::toHexString(m_nWriteSignalDev, temp)).c_str(), ""));
            ("W" + CToolUnits::toHexString(m_nWriteSignalDev, temp)).c_str(), "", weight++));
    }
    void CWriteStep::init()
SourceCode/Bond/Servo/Common.h
@@ -147,6 +147,16 @@
#define STEP_EQ_MASTER_RECIPE_LIST        _T("EQMasterRecipeListReport")
#define STEP_EQ_RECIPE_PARAMETER_REQ    _T("EQRecipeParameterReq")
#define STEP_EQ_RECIPE_PARAMETER        _T("EQRecipeParameterReport")
#define STEP_EQ_RECEIVED_JOBn            _T("EQReceivedJobReport")
#define STEP_EQ_RECEIVED_JOB1            _T("EQReceivedJobReport1")
#define STEP_EQ_RECEIVED_JOB2            _T("EQReceivedJobReport2")
#define STEP_EQ_RECEIVED_JOB3            _T("EQReceivedJobReport3")
#define STEP_EQ_RECEIVED_JOB4            _T("EQReceivedJobReport4")
#define STEP_EQ_RECEIVED_JOB5            _T("EQReceivedJobReport5")
#define STEP_EQ_RECEIVED_JOB6            _T("EQReceivedJobReport6")
#define STEP_EQ_RECEIVED_JOB7            _T("EQReceivedJobReport7")
#define STEP_EQ_RECEIVED_JOB8            _T("EQReceivedJobReport8")
#define STEP_EQ_RECEIVED_JOB9            _T("EQReceivedJobReport9")
#define STEP_EQ_FETCHED_OUT_JOBn        _T("EQFetchedOutJobReport")
#define STEP_EQ_FETCHED_OUT_JOB1        _T("EQFetchedOutJobReport1")
#define STEP_EQ_FETCHED_OUT_JOB2        _T("EQFetchedOutJobReport2")