1.增加下载的map和efem扫描的map的比较,如果不一致,则Cassette Process Cancel 并抛出到应用层。一致则Cassette Process Start。
已修改4个文件
36 ■■■■■ 文件已修改
SourceCode/Bond/Servo/CEquipment.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CLoadPort.cpp 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CLoadPort.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.h
@@ -54,6 +54,7 @@
    typedef std::function<BOOL(void* pEiuipment, int port, CJobDataB* pJobDataB)> ONPREFETCHEDOUTJOB;
    typedef std::function<BOOL(void* pEiuipment, int port, CJobDataB* pJobDataB, short& putSlot)> ONPRESTOREDJOB;
    typedef std::function<void(void* pEiuipment, PROCESS_STATE state)> ONPROCESSSTATE;
    typedef std::function<void(void* pEiuipment, short scanMap, short downMap)> ONMAPMISMATCH;
    typedef struct _EquipmentListener
    {
        ONALIVE                onAlive;
@@ -64,6 +65,7 @@
        ONPREFETCHEDOUTJOB    onPreFethedOutJob;
        ONPRESTOREDJOB        onPreStoredJob;
        ONPROCESSSTATE        onProcessStateChanged;
        ONMAPMISMATCH        onMapMismatch;
    } EquipmentListener;
SourceCode/Bond/Servo/CLoadPort.cpp
@@ -884,8 +884,22 @@
        if (nRet < 0) return nRet;
        m_portStatusReport.copyEx(portStatusReport);
        // 当port状态为InUse, 比较map
        if (m_portStatusReport.getPortStatus() == PORT_INUSE) {
            short scanMap = m_portStatusReport.getJobExistenceSlot();
            short downMap = getCassetteMap();
            if (scanMap == downMap) {
            this->sendCassetteCtrlCmd(5, nullptr, 0, 0, 0, nullptr, nullptr);
            }
            else {
                this->sendCassetteCtrlCmd(10, nullptr, 0, 0, 0, nullptr, nullptr);
                // 抛出到应用层做提示
                if (m_listener.onMapMismatch != nullptr) {
                    m_listener.onMapMismatch(this, scanMap, downMap);
                }
            }
        }
@@ -1112,6 +1126,18 @@
        m_bAutoChangeEnable = bEnable;
    }
    short CLoadPort::getCassetteMap()
    {
        short map = 0;
        for (int i = 0; i < SLOT_MAX; i++) {
            if (!m_slot[i].isEnable()) continue;
            if (m_slot[i].getContext() == nullptr) continue;
            map |= (1 << i);
        }
        return map;
    }
    /*
     * 生成测试用的玻璃列表
     */
@@ -1127,14 +1153,13 @@
        char szBuffer[64];
        for (int i = 0; i < 1; i++) {
        for (int i = 0; i < SLOT_MAX; i++) {
            if (!m_slot[i].isEnable()) continue;
            CJobDataS js;
            js.setCassetteSequenceNo(getNextCassetteSequenceNo());
            js.setJobSequenceNo(m_slot[i].getNo());
            sprintf_s(szBuffer, 64, "%05d%05d", js.getCassetteSequenceNo(), js.getJobSequenceNo());
            //js.setGlass1Id(szBuffer);
            js.setJobType(1);
            js.setMaterialsType((int)type);
SourceCode/Bond/Servo/CLoadPort.h
@@ -37,6 +37,7 @@
        void localSetCessetteType(CassetteType type);
        void localSetTransferMode(TransferMode mode);
        void localAutoChangeEnable(BOOL bEnable);
        short getCassetteMap();
    public:
        short getNextCassetteSequenceNo();
SourceCode/Bond/Servo/CMaster.cpp
@@ -1012,6 +1012,10 @@
        listener.onProcessStateChanged = [&](void* pEquipment, PROCESS_STATE state) -> void {
            LOGI("<Master>onProcessStateChanged<%d>", (int)state);
        };
        listener.onMapMismatch = [&](void* pEquipment, short scanMap, short downMap) {
            LOGE("<Master-%s>Port InUse, map(%d!=%d)不一致,请检查。",
                ((CEquipment*)pEquipment)->getName().c_str(), scanMap, downMap);
        };
        pEquipment->setListener(listener);
        pEquipment->setCcLink(&m_cclink);
        m_listEquipment.push_back(pEquipment);