LAPTOP-SNT8I5JK\Boounion
2025-04-12 016183bc4926c4fd80599dc7e06542c5396e6fd8
1.读取机器的Job Event上报;
2.修复在读取CC-Link数据当单元号超出32767时读取失败的问题。
已添加3个文件
已修改18个文件
349 ■■■■■ 文件已修改
.gitignore 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Document/ESWIN_EAS_Bonder_Inline_Mapping_Address_v1.1.2.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCLinkPerformance/CCLinkIEControl.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCLinkPerformance/CCLinkIEControl.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCLinkPerformance/PerformanceMelsec.cpp 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CCLinkPerformance/PerformanceMelsec.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqJobEventStep.cpp 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEqJobEventStep.h 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.cpp 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CJobDataB.cpp 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CJobDataB.h 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPageGraph2.cpp 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CReadStep.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CWriteStep.cpp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Common.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.vcxproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.vcxproj.filters 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ToolUnits.cpp 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ToolUnits.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -50,3 +50,5 @@
SourceCode/Bond/x64/Debug/ServoConfiguration.ini
*.iobj
SourceCode/Bond/x64/Debug/Backups/
Document/共享文件夹/
Document/共享文件夹.rar
Document/ESWIN_EAS_Bonder_Inline_Mapping_Address_v1.1.2.xlsx
Binary files differ
SourceCode/Bond/Servo/CCLinkPerformance/CCLinkIEControl.cpp
@@ -80,7 +80,7 @@
    return 0; // æ ¡éªŒé€šè¿‡
}
int CCCLinkIEControl::ReadData2(const StationIdentifier& station, DeviceType enDevType, short devNo, short size, void* pData)
int CCCLinkIEControl::ReadData2(const StationIdentifier& station, DeviceType enDevType, long devNo, long size, void* pData)
{
    // éªŒè¯ç«™ç‚¹å‚数和数据有效性
    int nRet = ValidateStationAndSize(station, size);
@@ -93,7 +93,7 @@
    {
        std::lock_guard<std::mutex> lock(m_mtx);
        const short nDevType = CalculateDeviceType(station, enDevType);
        nRet = mdReceive(m_nPath, CombineStation(station), nDevType, devNo, &size, pData);
        nRet = mdReceiveEx(m_nPath, station.nNetNo, station.nStNo, nDevType, devNo, &size, pData);
    }
    if (nRet != 0) {
SourceCode/Bond/Servo/CCLinkPerformance/CCLinkIEControl.h
@@ -59,7 +59,7 @@
    // è¯»å–LED状态
    int ReadLedStatus(LedStatus& outLedStatus);
    int ReadData2(const StationIdentifier& station, DeviceType enDevType, short devNo, short size, void* pData);
    int ReadData2(const StationIdentifier& station, DeviceType enDevType, long devNo, long size, void* pData);
private:
    static CCLinkIEControlMode ConvertToCCLinkIEControlMode(short nMode);
SourceCode/Bond/Servo/CCLinkPerformance/PerformanceMelsec.cpp
@@ -442,7 +442,7 @@
}
// é€šç”¨è¯»æ•°æ®
int CPerformanceMelsec::ReadData(const StationIdentifier& station, const short nDevType, const short nDevNo, short nSize, std::vector<short>& vecData) {
int CPerformanceMelsec::ReadData(const StationIdentifier& station, const long nDevType, const long nDevNo, long nSize, std::vector<short>& vecData) {
    // éªŒè¯ç«™ç‚¹å‚数和数据有效性
    int nRet = ValidateStationAndSize(station, nSize);
    if (nRet != 0) {
@@ -459,7 +459,7 @@
        std::lock_guard<std::mutex> lock(m_mtx);
        short* pData = vecData.data();
        nSize *= sizeof(short);
        nRet = mdReceive(m_nPath, CombineStation(station), nDevType, nDevNo, &nSize, pData);
        nRet = mdReceiveEx(m_nPath, station.nNetNo, station.nStNo, nDevType, (long)(unsigned short)nDevNo, &nSize, pData);
    }
    if (nRet != 0) {
@@ -559,7 +559,7 @@
}
// é€šç”¨å†™æ•°æ®
int CPerformanceMelsec::WriteData(const StationIdentifier& station, const short nDevType, const short nDevNo, short nSize, short* pData) {
int CPerformanceMelsec::WriteData(const StationIdentifier& station, const long nDevType, const long nDevNo, long nSize, short* pData) {
    // éªŒè¯ç«™ç‚¹å‚æ•°
    int nRet = ValidateStation(station);
    if (nRet != 0) {
@@ -577,7 +577,7 @@
    {
        std::lock_guard<std::mutex> lock(m_mtx);
        nSize *= sizeof(short);
        nRet = mdSend(m_nPath, CombineStation(station), nDevType, nDevNo, &nSize, pData);
        nRet = mdSendEx(m_nPath, station.nNetNo, station.nStNo, nDevType, nDevNo, &nSize, pData);
    }
    if (nRet != 0) {
SourceCode/Bond/Servo/CCLinkPerformance/PerformanceMelsec.h
@@ -377,11 +377,11 @@
    int GetBoardStatus(BoardStatus& status);
    // è¯»å†™æ•°æ®
    int ReadData(const StationIdentifier& station, short nDevType, short nDevNo, short nSize, std::vector<short>& vecData);
    int ReadData(const StationIdentifier& station, long nDevType, long nDevNo, long nSize, std::vector<short>& vecData);
    int ReadBitData(const StationIdentifier& station, DeviceType enDevType, short nDevNo, short nBitCount, BitContainer& vecData);
    int ReadWordData(const StationIdentifier& station, DeviceType enDevType, short nDevNo, short nWordCount, WordContainer& vecData);
    int ReadDWordData(const StationIdentifier& station, DeviceType enDevType, short nDevNo, short nDWordCount, DWordContainer& vecData);
    int WriteData(const StationIdentifier& station, short nDevType, short nDevNo, short nSize, short* pData);
    int WriteData(const StationIdentifier& station, long nDevType, long nDevNo, long nSize, short* pData);
    int WriteBitData(const StationIdentifier& station, DeviceType enDevType, short nDevNo, const BitContainer& vecData);
    int WriteWordData(const StationIdentifier& station, DeviceType enDevType, short nDevNo, const WordContainer& vecData);
    int WriteDWordData(const StationIdentifier& station, DeviceType enDevType, short nDevNo, const DWordContainer& vecData);
SourceCode/Bond/Servo/CEqJobEventStep.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
#include "stdafx.h"
#include "CEqJobEventStep.h"
#include "Log.h"
namespace SERVO {
    CEqJobEventStep::CEqJobEventStep() : CReadStep()
    {
        m_nJobDataBDev = 0;
    }
    CEqJobEventStep::~CEqJobEventStep()
    {
    }
    void CEqJobEventStep::setJobDataDev(int nDev)
    {
        m_nJobDataBDev = nDev;
    }
    void CEqJobEventStep::getAttributeVector(CAttributeVector& attrubutes)
    {
        CReadStep::getAttributeVector(attrubutes);
        std::string strTemp;
        attrubutes.addAttribute(new CAttribute("Dev",
            ("W" + CToolUnits::toHexString(m_nJobDataBDev, strTemp)).c_str(), ""));
        attrubutes.addAttribute(new CAttribute("PortNo",
            std::to_string(m_jobDataB.getPortNo()).c_str(), ""));
        attrubutes.addAttribute(new CAttribute("CarrierId",
            m_jobDataB.getCarrierId().c_str(), ""));
        attrubutes.addAttribute(new CAttribute("PruductId",
            m_jobDataB.getPruductId().c_str(), ""));
        attrubutes.addAttribute(new CAttribute("CarrierState",
            m_jobDataB.getCarrierStateDescription(strTemp).c_str(), ""));
        attrubutes.addAttribute(new CAttribute("SlotMapping",
            std::to_string(m_jobDataB.getSlotMapping()).c_str(), ""));
        attrubutes.addAttribute(new CAttribute("SlotSelectedFlag",
            std::to_string(m_jobDataB.getSlotSelectedFlag()).c_str(), ""));
        std::vector<std::string>& ids = m_jobDataB.getGlassIds();
        for (int i = 0; i < ids.size(); i++) {
            attrubutes.addAttribute(new CAttribute((std::string("GlassId") + std::to_string(i+1)).c_str(),
                ids[i].c_str(), ""));
        }
    }
    int CEqJobEventStep::onReadData()
    {
        CReadStep::onReadData();
        char szBuffer[1024];
        int nRet = m_pCclink->ReadData2(m_station, DeviceType::W, m_nJobDataBDev,
            640, szBuffer);
        if (0 != nRet) {
            return -1;
        }
        m_jobDataB.unserialize(szBuffer, 640);
        LOGI("<CEqJobEventStep-%s>Read JobDataB\n", m_strName.c_str());
        return 0;
    }
    int CEqJobEventStep::onComplete()
    {
        CReadStep::onComplete();
        LOGI("<CEqJobEventStep> onComplete.");
        return 0;
    }
    int CEqJobEventStep::onTimeout()
    {
        CReadStep::onTimeout();
        LOGI("<CEqJobEventStep> onTimeout.");
        return 0;
    }
    CJobDataB* CEqJobEventStep::getJobDataB()
    {
        return &m_jobDataB;
    }
}
SourceCode/Bond/Servo/CEqJobEventStep.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
#pragma once
#include "CReadStep.h"
#include "CJobDataB.h"
namespace SERVO {
    class CEqJobEventStep : public CReadStep
    {
    public:
        CEqJobEventStep();
        ~CEqJobEventStep();
    public:
        virtual void getAttributeVector(CAttributeVector& attrubutes);
        virtual int onReadData();
        virtual int onComplete();
        virtual int onTimeout();
        void setJobDataDev(int nDev);
        CJobDataB* getJobDataB();
    private:
        int m_nJobDataBDev;
        CJobDataB m_jobDataB;
    };
}
SourceCode/Bond/Servo/CEquipment.cpp
@@ -370,7 +370,6 @@
        // ä»¥ä¸‹æ ¹æ®ä¿¡å·åšæµç¨‹å¤„理
        CStep* pStep;
        // Equipment Mode Change Report(0x360)
        // Equipment Status Change Report(0x361)
@@ -396,6 +395,12 @@
        // EQ Mode
        CHECK_WRITE_STEP_SIGNAL(0x355, pszData, size);
        // EQ Job Event
        CHECK_READ_STEP_SIGNAL(0x380, pszData, size);
        CHECK_READ_STEP_SIGNAL(0x381, pszData, size);
        CHECK_READ_STEP_SIGNAL(0x386, pszData, size);
        CHECK_READ_STEP_SIGNAL(0x387, pszData, size);
        // Port1 ~ Port4
        CHECK_READ_STEP_SIGNAL(0x3e0, pszData, size);
        CHECK_READ_STEP_SIGNAL(0x3e1, pszData, size);
SourceCode/Bond/Servo/CEquipment.h
@@ -17,6 +17,7 @@
#include "CEqReadIntStep.h"
#include "CEqCassetteTransferStateStep.h"
#include "CEqCassetteCtrlCmdStep.h"
#include "CEqJobEventStep.h"
#include <vector>
#include <map>
#include <list>
SourceCode/Bond/Servo/CJobDataB.cpp
@@ -1,5 +1,6 @@
#include "stdafx.h"
#include "CJobDataB.h"
#include "ToolUnits.h"
namespace SERVO {
@@ -13,19 +14,36 @@
    }
    short CJobDataB::getPortNo()
    {
        return m_nPortNo;
    }
    std::string& CJobDataB::getCarrierId()
    {
        return m_strCarrierId;
    }
    std::string& CJobDataB::getPruductId()
    {
        return m_pruductId;
    }
    int CJobDataB::serialize(char* pszBuffer, int nBufferSize)
    {
        if (nBufferSize < 640) return -1;
        int index = 0;
        memcpy(&pszBuffer[index], &m_nPortNo, sizeof(short));
        index += sizeof(short);
        int strLen = min(20, m_strCarrierId.size());
        memcpy(&pszBuffer[index], m_strCarrierId.c_str(), strLen);
        index += strLen;
        index += 20;
        strLen = min(20, m_pruductId.size());
        memcpy(&pszBuffer[index], m_pruductId.c_str(), strLen);
        index += strLen;
        index += 20;
        memcpy(&pszBuffer[index], &m_nCarrierState, sizeof(short));
        index += sizeof(short);
@@ -40,9 +58,100 @@
            std::string& strGlassId = m_glassIds.at(i);
            strLen = min(20, strGlassId.size());
            memcpy(&pszBuffer[index], strGlassId.c_str(), strLen);
            index += strLen;
            index += 20;
        }
        return 320 * 2;
    }
    int CJobDataB::unserialize(char* pszBuffer, int nBufferSize)
    {
        if (nBufferSize < 640) return -1;
        int index = 0;
        memcpy(&m_nPortNo, &pszBuffer[index], sizeof(short));
        index += sizeof(short);
        CToolUnits::convertString(&pszBuffer[index], 20, m_strCarrierId);
        index += 20;
        CToolUnits::convertString(&pszBuffer[index], 20, m_pruductId);
        index += 20;
        memcpy(&m_nCarrierState, &pszBuffer[index], sizeof(short));
        index += sizeof(short);
        memcpy(&m_nSlotMapping, &pszBuffer[index], sizeof(int));
        index += sizeof(int);
        memcpy(&m_nSlotSelectedFlag, &pszBuffer[index], sizeof(int));
        index += sizeof(int);
        std::string strGlassId;
        m_glassIds.clear();
        for (int i = 0; i < 25; i++) {
            CToolUnits::convertString(&pszBuffer[index], 20, strGlassId);
            index += 20;
            if (!strGlassId.empty()) {
                m_glassIds.push_back(strGlassId);
            }
        }
        return 320 * 2;
    }
    short CJobDataB::getCarrierState()
    {
        return m_nCarrierState;
    }
    std::string& CJobDataB::getCarrierStateDescription(std::string& strDescription)
    {
        static char* pszDescription[20] = {
            "Bind",
            "CancelPod",
            "CancelPodNotification",
            "CancelPodOut",
            "CancelPodAtPort",
            "CancelBind",
            "Clamp",
            "ClosePod",
            "IndexDown",
            "IndexUp",
            "OpenPod",
            "PodComplete",
            "PodIn",
            "PodNotification",
            "PodOut",
            "PodRelease",
            "PodTagReadData",
            "PodTagWriteData",
            "Proceed WithPod",
            "Unclamp"
        };
        if (0 <= m_nCarrierState && m_nCarrierState < 20) {
            strDescription = pszDescription[m_nCarrierState];
        }
        else {
            strDescription = "";
        }
        return strDescription;
    }
    int CJobDataB::getSlotMapping()
    {
        return m_nSlotMapping;
    }
    int CJobDataB::getSlotSelectedFlag()
    {
        return m_nSlotSelectedFlag;
    }
    std::vector<std::string>& CJobDataB::getGlassIds()
    {
        return m_glassIds;
    }
}
SourceCode/Bond/Servo/CJobDataB.h
@@ -11,7 +11,16 @@
        ~CJobDataB();
    public:
        short getPortNo();
        std::string& getCarrierId();
        std::string& getPruductId();
        short getCarrierState();
        std::string& getCarrierStateDescription(std::string& strDescription);
        int getSlotMapping();
        int getSlotSelectedFlag();
        std::vector<std::string>& getGlassIds();
        int serialize(char* pszBuffer, int nBufferSize);
        int unserialize(char* pszBuffer, int nBufferSize);
    private:
        short m_nPortNo;
SourceCode/Bond/Servo/CMaster.cpp
@@ -156,7 +156,8 @@
            }
            for (auto item : m_listEquipment) {
                if (item->getID() == EQ_ID_Bonder1) {
                if (item->getID() == EQ_ID_Bonder1 ||
                    item->getID() == EQ_ID_Bonder2) {
                    const StationIdentifier& station = item->getStation();
                    MemoryBlock& block = item->getReadBitBlock();
@@ -726,7 +727,6 @@
        pEquipment->setID(EQ_ID_Bonder1 + index);
        pEquipment->setName(index == 0 ? "Bonder 1" : "Bonder 2");
        pEquipment->setDescription(index == 0 ? "Bonder 1." : "Bonder 2.");
        // pEquipment->setStation(1, index == 0 ? 3 : 4);
        pEquipment->setStation(0, 255);
        pEquipment->setReadBitBlock(index == 0 ? 0x4600 : 0x4c00,
            index == 0 ? 0x4c00 : 0x5200);
@@ -738,7 +738,7 @@
            CEqModeStep* pStep = new CEqModeStep();
            pStep->setName(STEP_MODE);
            pStep->setWriteSignalDev(index == 0 ? 0x330 : 0x630);
            pStep->setModeDev(index == 0 ? 0x6a8c : 0x848c);
            pStep->setModeDev(index == 0 ? 0x6a8c : 0x8a8c);
            if (pEquipment->addStep(0x360, pStep) != 0) {
                delete pStep;
            }
@@ -860,6 +860,42 @@
                delete pStep;
            }
        }
        {
            CEqJobEventStep* pStep = new CEqJobEventStep();
            pStep->setName(STEP_EQ_RECEIVED_JOB_UPS1);
            pStep->setWriteSignalDev(index == 0 ? 0x300 : 0x600);
            pStep->setJobDataDev(index == 0 ? 0x6388 : 0x8388);
            if (pEquipment->addStep(0x380, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqJobEventStep* pStep = new CEqJobEventStep();
            pStep->setName(STEP_EQ_RECEIVED_JOB_UPS2);
            pStep->setWriteSignalDev(index == 0 ? 0x301 : 0x601);
            pStep->setJobDataDev(index == 0 ? 0x64c8 : 0x84c8);
            if (pEquipment->addStep(0x381, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqJobEventStep* pStep = new CEqJobEventStep();
            pStep->setName(STEP_EQ_SENT_OUT_JOB_UPS1);
            pStep->setWriteSignalDev(index == 0 ? 0x306 : 0x606);
            pStep->setJobDataDev(index == 0 ? 0x6000 : 0x8000);
            if (pEquipment->addStep(0x386, pStep) != 0) {
                delete pStep;
            }
        }
        {
            CEqJobEventStep* pStep = new CEqJobEventStep();
            pStep->setName(STEP_EQ_SENT_OUT_JOB_UPS2);
            pStep->setWriteSignalDev(index == 0 ? 0x307 : 0x607);
            pStep->setJobDataDev(index == 0 ? 0x6140 : 0x8140);
            if (pEquipment->addStep(0x387, pStep) != 0) {
                delete pStep;
            }
        }
        pEquipment->init();
SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -173,7 +173,7 @@
            }
            */
            // æµ‹è¯•清除Cim Message
            /*
            if (pEquipment->getID() == EQ_ID_Bonder1
                || pEquipment->getID() == EQ_ID_Bonder2) {
                static int msgId = 0; msgId++;
@@ -184,9 +184,10 @@
                    pEquipment->clearCimMessage(msgId, 2);
                }
            }
            */
            // æµ‹è¯•设置时间
            /*
            if (pEquipment->getID() == EQ_ID_Bonder1
                || pEquipment->getID() == EQ_ID_Bonder2) {
                CTime time = CTime::GetCurrentTime();
@@ -197,7 +198,7 @@
                    (short)time.GetMinute(),
                    (short)time.GetSecond());
            }
            */
            
            // æµ‹è¯•设置cim mode
@@ -208,8 +209,8 @@
                pEquipment->setCimMode(ii % 2 == 0);
            }
            */
            /*
            SERVO::CEquipment* pEquipment = (SERVO::CEquipment*)pItem->pData;
            if (pEquipment->getID() == EQ_ID_Bonder1
                || pEquipment->getID() == EQ_ID_Bonder2) {
                static int ii = 0; ii++;
SourceCode/Bond/Servo/CReadStep.cpp
@@ -90,14 +90,14 @@
                // 2.给对方写ON
                nextStep();
                m_pCclink->SetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev);
                m_pCclink->SetBitDeviceEx(m_station, (long)DeviceType::B, m_nWriteSignalDev);
                // 3.等待对方OFF
                nextStep();
                int nStep3Ret = ::WaitForSingleObject(m_hReadSignalOff, TIMEOUT * 1000);
                if (nStep3Ret == WAIT_TIMEOUT) {
                    m_pCclink->ResetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev);
                    m_pCclink->ResetBitDeviceEx(m_station, (long)DeviceType::B, m_nWriteSignalDev);
                    onTimeout();
                    goto RESET;
                }
@@ -106,7 +106,7 @@
                // 4.给对方写OFF
                nextStep();
                m_pCclink->ResetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev);
                m_pCclink->ResetBitDeviceEx(m_station, (long)DeviceType::B, m_nWriteSignalDev);
                // 6.完成
SourceCode/Bond/Servo/CWriteStep.cpp
@@ -99,14 +99,14 @@
                // 2.给对方写ON
                nextStep();
                m_pCclink->SetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev);
                m_pCclink->SetBitDeviceEx(m_station, (long)DeviceType::B, m_nWriteSignalDev);
                // 3.等待对方ON
                nextStep();
                int nStep3Ret = ::WaitForSingleObject(m_hRecvSignalOn, TIMEOUT * 1000);
                if (nStep3Ret == WAIT_TIMEOUT) {
                    m_pCclink->ResetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev);
                    m_pCclink->ResetBitDeviceEx(m_station, (long)DeviceType::B, m_nWriteSignalDev);
                    onTimeout();
                    goto RESET;
                }
@@ -115,7 +115,7 @@
                // 4.дOFF
                nextStep();
                m_pCclink->ResetBitDevice(m_station, DeviceType::B, m_nWriteSignalDev);
                m_pCclink->ResetBitDeviceEx(m_station, (long)DeviceType::B, m_nWriteSignalDev);
                // 6.完成
SourceCode/Bond/Servo/Common.h
@@ -133,6 +133,10 @@
#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_UPS1        _T("EQJEReceivedJobUps1")
#define STEP_EQ_RECEIVED_JOB_UPS2        _T("EQJEReceivedJobUps2")
#define STEP_EQ_SENT_OUT_JOB_UPS1        _T("EQJESentOutJobUps1")
#define STEP_EQ_SENT_OUT_JOB_UPS2        _T("EQJESentOutJobUps2")
/* Step ID */
SourceCode/Bond/Servo/Servo.vcxproj
@@ -213,6 +213,7 @@
    <ClInclude Include="CEqCimMessageCmdStep.h" />
    <ClInclude Include="CEqCimModeChangeStep.h" />
    <ClInclude Include="CEqDateTimeSetCmdStep.h" />
    <ClInclude Include="CEqJobEventStep.h" />
    <ClInclude Include="CEqModeChangeStep.h" />
    <ClInclude Include="CEqModeStep.h" />
    <ClInclude Include="CEqPortChangeStep.h" />
@@ -292,6 +293,7 @@
    <ClCompile Include="CEqCimMessageCmdStep.cpp" />
    <ClCompile Include="CEqCimModeChangeStep.cpp" />
    <ClCompile Include="CEqDateTimeSetCmdStep.cpp" />
    <ClCompile Include="CEqJobEventStep.cpp" />
    <ClCompile Include="CEqModeChangeStep.cpp" />
    <ClCompile Include="CEqModeStep.cpp" />
    <ClCompile Include="CEqPortChangeStep.cpp" />
SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -85,6 +85,7 @@
    <ClCompile Include="CEqCassetteCtrlCmdStep.cpp" />
    <ClCompile Include="CJobDataB.cpp" />
    <ClCompile Include="CPageCassetteCtrlCmd.cpp" />
    <ClCompile Include="CEqJobEventStep.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="AlarmManager.h" />
@@ -168,6 +169,7 @@
    <ClInclude Include="CEqCassetteCtrlCmdStep.h" />
    <ClInclude Include="CJobDataB.h" />
    <ClInclude Include="CPageCassetteCtrlCmd.h" />
    <ClInclude Include="CEqJobEventStep.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="Servo.rc" />
SourceCode/Bond/Servo/ToolUnits.cpp
@@ -316,4 +316,17 @@
    strOut = ss.str();
    return strOut;
}
void CToolUnits::convertString(const char* pszBuffer, int size, std::string& strOut)
{
    strOut.clear();
    int nLength = 0;
    for (int i = 0; i < size; i++) {
        if (pszBuffer[i] == '\0') break;
        nLength++;
    }
    if (nLength > 0) {
        strOut = std::string(pszBuffer, nLength);
    }
}
SourceCode/Bond/Servo/ToolUnits.h
@@ -30,5 +30,6 @@
    static std::string getCurrentTimeString();
    static bool startsWith(const std::string& str, const std::string& prefix);
    static std::string& toHexString(int value, std::string& strOut);
    static void convertString(const char* pszBuffer, int size, std::string& strOut);
};