LAPTOP-SNT8I5JK\Boounion
2025-06-19 7a60f2a3404220dcbc05e2e06fd7f3a6e51d5a4a
1.对Panel Data Request的响应;
已修改3个文件
91 ■■■■ 文件已修改
SourceCode/Bond/Servo/CEFEM.cpp 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.cpp 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.h 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEFEM.cpp
@@ -708,6 +708,7 @@
            pStep->setName(STEP_EFEM_PANEL_DATA_REQUEST);
            pStep->setProp("Port", (void*)1);
            pStep->setWriteSignalDev(0x15d);
            pStep->setReturnDev(0x73a);
            if (addStep(STEP_ID_PANEL_DATA_REQUEST, pStep) != 0) {
                delete pStep;
            }
SourceCode/Bond/Servo/CEquipment.cpp
@@ -875,6 +875,61 @@
        return nullptr;
    }
    CGlass* CEquipment::getGlassFromSlot(int slotNo)
    {
        CSlot* pSlot = nullptr;
        for (int i = 0; i < SLOT_MAX; i++) {
            if (!m_slot[i].isEnable()) continue;
            if (m_slot[i].getNo() != slotNo) continue;
            pSlot = &m_slot[i];
            break;
        }
        if (pSlot != nullptr) {
            return (CGlass*)pSlot->getContext();
        }
        return nullptr;
    }
    CGlass* CEquipment::getGlassWithCassette(int cassetteSequenceNo, int jobSequenceNo)
    {
        CSlot* pSlot = nullptr;
        for (int i = 0; i < SLOT_MAX; i++) {
            if (!m_slot[i].isEnable()) continue;
            CGlass* pGlass = (CGlass*)m_slot[i].getContext();
            if (pGlass == nullptr) continue;
            CJobDataS* pJobDataS = pGlass->getJobDataS();
            ASSERT(pJobDataS);
            if (pJobDataS->getCassetteSequenceNo() == cassetteSequenceNo
                && pJobDataS->getJobSequenceNo() == jobSequenceNo) {
                return pGlass;
            }
        }
        return nullptr;
    }
    CJobDataS* CEquipment::getJobDataSWithCassette(int cassetteSequenceNo, int jobSequenceNo)
    {
        CSlot* pSlot = nullptr;
        for (int i = 0; i < SLOT_MAX; i++) {
            if (!m_slot[i].isEnable()) continue;
            CGlass* pGlass = (CGlass*)m_slot[i].getContext();
            if (pGlass == nullptr) continue;
            CJobDataS* pJobDataS = pGlass->getJobDataS();
            ASSERT(pJobDataS);
            if (pJobDataS->getCassetteSequenceNo() == cassetteSequenceNo
                && pJobDataS->getJobSequenceNo() == jobSequenceNo) {
                return pJobDataS;
            }
        }
        return nullptr;
    }
    bool CEquipment::isAlarmStep(SERVO::CStep* pStep)
    {
        return CToolUnits::startsWith(pStep->getName(), STEP_ALARM_START);
@@ -1219,23 +1274,6 @@
        return &m_slot[index];
    }
    CGlass* CEquipment::getGlassFromSlot(int slotNo)
    {
        CSlot* pSlot = nullptr;
        for (int i = 0; i < SLOT_MAX; i++) {
            if (!m_slot[i].isEnable()) continue;
            if (m_slot[i].getNo() != slotNo) continue;
            pSlot = &m_slot[i];
            break;
        }
        if (pSlot != nullptr) {
            return (CGlass*)pSlot->getContext();
        }
        return nullptr;
    }
    CGlass* CEquipment::getAnyGlass()
    {
        CSlot* pSlot = nullptr;
@@ -1558,8 +1596,18 @@
        // Cassette Sequence No        1W
        // Job Sequence No            1W
        // Job DataS                256W
        char szBuffer[1024];
        index = 0;
        memcpy(&szBuffer[index], &cassetteSequenceNo, sizeof(short));
        index += sizeof(short);
        memcpy(&szBuffer[index], &jobSequenceNo, sizeof(short));
        index += sizeof(short);
        CJobDataS* pJobDataS = getJobDataSWithCassette(cassetteSequenceNo, jobSequenceNo);
        if (pJobDataS != nullptr) {
            index += pJobDataS->serialize(&szBuffer[index], 1024 - sizeof(short) - sizeof(short));
            ((CEqReadStep*)pStep)->setReturnData(szBuffer, index);
        }
        // 缓存Attribute,用于调试时显示信息
SourceCode/Bond/Servo/CEquipment.h
@@ -176,16 +176,16 @@
        // 获取玻璃物料
        CGlass* getGlassFromSlot(int slotNo);
        CGlass* getGlassWithCassette(int cassetteSequenceNo, int jobSequenceNo);
        CGlass* getAnyGlass();
        CGlass* getGlass(const char* pszGlassId);
        CJobDataS* getJobDataSWithCassette(int cassetteSequenceNo, int jobSequenceNo);
        // 验证玻璃和槽是否匹配
        BOOL ValidateGlassSlotMatch();
        // 是否有玻璃
        BOOL hasGlass();
        // 获取指定ID的glass
        CGlass * getGlass(const char* pszGlassId);
        // 指定槽位是否可以放置玻璃
        BOOL canPlaceGlassInSlot(const short slotIndex);