mrDarker
2025-09-13 b7d98aad7e8728c5a41c6fab5a21b6c633042527
Merge branch 'master' into liuyang

# Conflicts:
# SourceCode/Bond/x64/Debug/AlarmList.csv
已添加4个文件
已修改24个文件
444 ■■■■■ 文件已修改
Document/AlarmList.csv 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Document/ParamInfo.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.cpp 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipment.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipmentPage2.cpp 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CEquipmentPage2.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.cpp 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CMaster.h 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPageGlassList.cpp 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CPageGlassList.h 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CProcessDataListDlg.cpp 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/CProcessDataListDlg.h 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ListCtrlEx.cpp 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Model.cpp 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PageAlarm.cpp 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PageAlarm.h 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PageLog.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PageLog.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PageRecipe.cpp 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PageRecipe.h 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PageTransferLog.cpp 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/PageTransferLog.h 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.rc 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.vcxproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/Servo.vcxproj.filters 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/ServoDlg.cpp 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/resource.h 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/AlarmList.csv 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Document/AlarmList.csv
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
No,UNIT ID,UNIT NO,Alarm Level,Alarm Code,AlarmID,Alarm Text,Description 1,EFEM,100,0,0,1000,机器人CCLink链接异常,"请检查接线,断电重启" 2,EFEM,101,0,0,1001,相机CCLink链接异常,"请检查接线,断电重启" 3,EFEM,102,0,0,1002,静电测试CCLink链接异常,"请检查接线,断电重启" 4,EFEM,103,0,0,1003,, 5,EFEM,104,0,0,1004,, 6,EFEM,105,0,0,1005,, 7,EFEM,106,0,0,1006,, 8,EFEM,107,0,0,1007,, 9,EFEM,108,0,0,1008,, 10,EFEM,109,0,0,1009,, 11,EFEM,110,0,0,1010,总进气气压异常,请检测进气 12,EFEM,111,0,0,1011,总真空气压异常,请检测真空 13,EFEM,112,0,0,1012,LP真空异常,检测真空 14,EFEM,113,0,0,1013,离子风棒压空异常,请检测进气 15,EFEM,114,0,0,1014,机器人真空异常,请检测真空 16,EFEM,115,0,0,1015,急停被按下,请检查急停按钮 17,EFEM,116,0,0,1016,, 18,EFEM,117,0,0,1017,, 19,EFEM,118,0,0,1018,, 20,EFEM,119,0,0,1019,, 21,EFEM,120,0,0,1020,安全门打开,请检查安全门 22,EFEM,121,0,0,1021,正面左门打开中,请检查安全门 23,EFEM,122,0,0,1022,正面右门打开中,请检查安全门 24,EFEM,123,0,0,1023,侧面左门打开中,请检查安全门 25,EFEM,124,0,0,1024,侧面右门打开中,请检查安全门 26,EFEM,125,0,0,1025,背面左门打开中,请检查安全门 27,EFEM,126,0,0,1026,背面右门打开中,请检查安全门 28,EFEM,127,0,0,1027,, 29,EFEM,128,0,0,1028,, 30,EFEM,129,0,0,1029,, 31,EFEM,130,0,0,1030,, 32,EFEM,131,0,0,1031,"Port1_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 33,EFEM,132,0,0,1032,"Port1_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 34,EFEM,133,0,0,1033,"Port1_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 35,EFEM,134,0,0,1034,, 36,EFEM,135,0,0,1035,, 37,EFEM,136,0,0,1036,, 38,EFEM,137,0,0,1037,, 39,EFEM,138,0,0,1038,, 40,EFEM,139,0,0,1039,, 41,EFEM,140,1,0,1040,"Port1_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 42,EFEM,141,1,0,1041,"Port1_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 43,EFEM,142,1,0,1042,"Port1_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 44,EFEM,143,1,0,1043,"Port1_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 45,EFEM,144,0,0,1044,, 46,EFEM,145,0,0,1045,, 47,EFEM,146,0,0,1046,, 48,EFEM,147,0,0,1047,, 49,EFEM,148,0,0,1048,, 50,EFEM,149,0,0,1049,, 51,EFEM,150,0,0,1050,"Port2_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 52,EFEM,151,0,0,1051,"Port2_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 53,EFEM,152,0,0,1052,"Port2_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 54,EFEM,153,0,0,1053,, 55,EFEM,154,0,0,1054,, 56,EFEM,155,0,0,1055,, 57,EFEM,156,0,0,1056,, 58,EFEM,157,0,0,1057,, 59,EFEM,158,0,0,1058,, 60,EFEM,159,0,0,1059,, 61,EFEM,160,0,0,1060,"Port2_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 62,EFEM,161,0,0,1061,"Port2_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 63,EFEM,162,0,0,1062,"Port2_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 64,EFEM,163,0,0,1063,"Port2_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 65,EFEM,164,0,0,1064,, 66,EFEM,165,0,0,1065,, 67,EFEM,166,0,0,1066,, 68,EFEM,167,0,0,1067,, 69,EFEM,168,0,0,1068,, 70,EFEM,169,0,0,1069,, 71,EFEM,170,1,0,1070,, 72,EFEM,171,1,0,1071,"Port3_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 73,EFEM,172,1,0,1072,"Port3_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 74,EFEM,173,1,0,1073,"Port3_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 75,EFEM,174,1,0,1074,"Port3_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 76,EFEM,175,1,0,1075,, 77,EFEM,176,1,0,1076,, 78,EFEM,177,1,0,1077,, 79,EFEM,178,1,0,1078,, 80,EFEM,179,1,0,1079,, 81,EFEM,180,1,0,1080,"Port3_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 82,EFEM,181,1,0,1081,"Port3_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 83,EFEM,182,1,0,1082,"Port3_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 84,EFEM,183,1,0,1083,, 85,EFEM,184,1,0,1084,, 86,EFEM,185,1,0,1085,, 87,EFEM,186,1,0,1086,, 88,EFEM,187,1,0,1087,, 89,EFEM,188,1,0,1088,, 90,EFEM,189,1,0,1089,, 91,EFEM,190,1,0,1090,, 92,EFEM,191,1,0,1091,"Port4_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 93,EFEM,192,1,0,1092,"Port4_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 94,EFEM,193,1,0,1093,"Port4_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 95,EFEM,194,1,0,1094,"Port4_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 96,EFEM,195,1,0,1095,, 97,EFEM,196,1,0,1096,, 98,EFEM,197,1,0,1097,, 99,EFEM,198,1,0,1098,, 100,EFEM,199,1,0,1099,, 101,EFEM,200,1,0,1100,"Port4_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 102,EFEM,201,1,0,1101,"Port4_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 103,EFEM,202,1,0,1102,"Port4_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 104,EFEM,203,1,0,1103,, 105,EFEM,204,1,0,1104,, 106,EFEM,205,1,0,1105,, 107,EFEM,206,1,0,1106,, 108,EFEM,207,1,0,1107,, 109,EFEM,208,1,0,1108,, 110,EFEM,209,1,0,1109,, 111,EFEM,210,0,0,1110,回原点失败/超时,请检查设备状态以及轴位置是否有干涉,请重新执行回原操作 112,EFEM,211,0,0,1111,Flip工位,真空打开时在荷异常,请检查玻璃位置 113,EFEM,212,1,0,1112,, 114,EFEM,213,1,0,1113,, 115,EFEM,214,1,0,1114,, 116,EFEM,215,1,0,1115,, 117,EFEM,216,1,0,1116,, 118,EFEM,217,1,0,1117,, 119,EFEM,218,1,0,1118,, 120,EFEM,219,1,0,1119,, 121,EFEM,220,1,0,1120,任务取消失败,当前取消任务条件不满足 122,EFEM,221,1,0,1121,任务重试失败,当前重试任务条件不满足
Document/ParamInfo.xlsx
Binary files differ
SourceCode/Bond/Servo/CEquipment.cpp
@@ -1497,6 +1497,19 @@
        return &m_slot[index];
    }
    CSlot* CEquipment::getSlotWithNo(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;
        }
        return pSlot;
    }
    CGlass* CEquipment::getAnyGlass()
    {
        CSlot* pSlot = nullptr;
@@ -1581,8 +1594,10 @@
        }
        auto rawData = processData.getParamsRawData();
        std::vector<CParam> params;
        this->parsingParams((const char*)rawData.data(), rawData.size(), params);
        std::vector<CParam> tempParams;
        this->parsingParams((const char*)rawData.data(), rawData.size(), tempParams);
        int n = processData.getTotalParameter();
        std::vector<CParam> params(tempParams.begin(), tempParams.begin() + min(n, (int)tempParams.size()));
        pGlass->addParams(params);
        
        // å…³è”çš„Glass也要更新
SourceCode/Bond/Servo/CEquipment.h
@@ -181,6 +181,7 @@
        // èŽ·å–æŒ‡å®šçš„Slot
        CSlot* getSlot(int index);
        CSlot* getSlotWithNo(int slotNo);
        // èŽ·å–ä¸€ä¸ªå¯ç”¨çš„æ§½ä½
        CSlot* getAvailableSlot();
SourceCode/Bond/Servo/CEquipmentPage2.cpp
@@ -34,6 +34,7 @@
    ON_WM_SIZE()
    ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, &CEquipmentPage2::OnLvnItemchangedList1)
    ON_BN_CLICKED(IDC_BUTTON_REMOVE, &CEquipmentPage2::OnBnClickedButtonRemove)
    ON_BN_CLICKED(IDC_BUTTON_PUT, &CEquipmentPage2::OnBnClickedButtonPut)
END_MESSAGE_MAP()
@@ -125,10 +126,17 @@
    GetClientRect(&rcClient);
    int x = 12;
    int x1 = x;
    int y2 = rcClient.bottom - 12;
    pItem = GetDlgItem(IDC_BUTTON_REMOVE);
    pItem->GetWindowRect(&rcItem);
    pItem->MoveWindow(x, y2 - rcItem.Height(), rcItem.Width(), rcItem.Height());
    x1 += rcItem.Width();
    x1 += 12;
    pItem = GetDlgItem(IDC_BUTTON_PUT);
    pItem->GetWindowRect(&rcItem);
    pItem->MoveWindow(x1, y2 - rcItem.Height(), rcItem.Width(), rcItem.Height());
    y2 -= rcItem.Height();
    y2 -= 8;
@@ -160,9 +168,24 @@
    if (index >= 0) {
        SERVO::CSlot* pSlot = (SERVO::CSlot*)m_listCtrl.GetItemData(index);
        ASSERT(pSlot);
        int bRet = m_pEquipment->removeGlass(pSlot->getNo());
        if (bRet == 0) {
        if (theApp.m_model.getMaster().moveGlassToBuf(m_pEquipment->getID(),
            pSlot->getNo())) {
            UpdateSlots();
            AfxMessageBox("物料已取出到Buffer中!");
        }
    }
}
void CEquipmentPage2::OnBnClickedButtonPut()
{
    int index = GetSelectedItemIndex();
    if (index >= 0) {
        SERVO::CSlot* pSlot = (SERVO::CSlot*)m_listCtrl.GetItemData(index);
        ASSERT(pSlot);
        if (theApp.m_model.getMaster().moveGlassToSlot(m_pEquipment->getID(),
            pSlot->getNo())) {
            UpdateSlots();
            AfxMessageBox("物料已放入指定位置!");
        }
    }
}
@@ -199,4 +222,3 @@
        }
    }
}
SourceCode/Bond/Servo/CEquipmentPage2.h
@@ -41,4 +41,5 @@
    afx_msg void OnSize(UINT nType, int cx, int cy);
    afx_msg void OnLvnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg void OnBnClickedButtonRemove();
    afx_msg void OnBnClickedButtonPut();
};
SourceCode/Bond/Servo/CMaster.cpp
@@ -2076,7 +2076,7 @@
        pTarSlot = pTarEq->getAvailableSlotForGlass(primaryType);
        pSrcSlot = pSrcEq->getProcessedSlot(primaryType, bJobMode);
        if (m_nTestFlag == 1) LOGD("createTransferTask 003 %x, %x", pTarSlot, pSrcSlot);
        if (pSrcSlot == nullptr || nullptr == pTarSlot && secondaryType != SERVO::MaterialsType::G0) {
        if ((pSrcSlot == nullptr || nullptr == pTarSlot) && secondaryType != SERVO::MaterialsType::G0) {
            pTarSlot = pTarEq->getAvailableSlotForGlass(secondaryType);
            pSrcSlot = pSrcEq->getProcessedSlot(secondaryType, bJobMode);
        }
@@ -2782,4 +2782,48 @@
            m_strLastError = "AOI检测未通过.";
        }
    }
    bool CMaster::moveGlassToBuf(int eqid, int slotNo)
    {
        CEquipment* pEquipment = getEquipment(eqid);
        if (pEquipment == nullptr) return false;
        CSlot* pSlot = pEquipment->getSlotWithNo(slotNo);
        if (pSlot == nullptr) return false;
        CGlass* pGlass = (CGlass*)pSlot->getContext();
        m_bufGlass.push_back(pGlass);
        pGlass->addRef();
        pSlot->setContext(nullptr);
        m_bDataModify = TRUE;
        if (m_listener.onEqDataChanged != nullptr) {
            m_listener.onEqDataChanged(this, pEquipment, 0);
        }
        return true;
    }
    bool CMaster::moveGlassToSlot(int eqid, int slotNo)
    {
        CEquipment* pEquipment = getEquipment(eqid);
        if (pEquipment == nullptr) return false;
        CSlot* pSlot = pEquipment->getSlotWithNo(slotNo);
        if (pSlot == nullptr) return false;
        if (m_bufGlass.empty()) return false;
        CGlass* pGlass = m_bufGlass.front();
        m_bufGlass.pop_front();
        if (pGlass == nullptr) return false;
        pSlot->setContext(pGlass);
        pGlass->release();
        m_bDataModify = TRUE;
        if (m_listener.onEqDataChanged != nullptr) {
            m_listener.onEqDataChanged(this, pEquipment, 0);
        }
        return true;
    }
}
SourceCode/Bond/Servo/CMaster.h
@@ -131,6 +131,8 @@
        bool loadState(const std::string& path);
        int getWipGlasses(std::vector<CGlass*>& glasses);
        void test();
        bool moveGlassToBuf(int eqid, int slotNo);
        bool moveGlassToSlot(int eqid, int slotNo);
        int getPortCassetteSnSeed(int port);
        void setPortCassetteSnSeed(int port, int seed);
@@ -249,6 +251,7 @@
        std::string m_strStatePath;
        int m_nTestFlag;
        std::list<CGlass*> m_bufGlass;
    };
}
SourceCode/Bond/Servo/CPageGlassList.cpp
@@ -8,12 +8,12 @@
#include "GlassJson.h"
#include "CServoUtilsTool.h"
#include "ToolUnits.h"
#include <optional>
#include <unordered_set>
#include <unordered_map>
#include <vector>
#include <string>
#include "CProcessDataListDlg.h"
#define PAGE_SIZE                       50
#define PAGE_BACKGROUND_COLOR           RGB(252, 252, 255)
@@ -436,7 +436,7 @@
}
// ===== CPageGlassList æ¶ˆæ¯å¤„理程序 =====
void CPageGlassList::InitRxWindow()
void CPageGlassList::InitRxWindows()
{
    // è®¢é˜…数据
    IRxWindows* pRxWindows = RX_GetRxWindows();
@@ -946,7 +946,7 @@
{
    if (nIDEvent == 1) {
        KillTimer(1);
        InitRxWindow();
        InitRxWindows();
    }
    else if (nIDEvent == 2) {
        UpdateWipData();  // åªåšå¢žé‡ï¼Œä¸é‡å»º
@@ -1065,10 +1065,11 @@
{
    auto* p = reinterpret_cast<NMC_ELC_SHOWFULLTEXT*>(pNMHDR);
    // è¿™é‡Œæš‚时用消息框显示;后续可换成你的详情页
    CString strNewMsg = p->text;
    strNewMsg.Replace(_T(","), _T("\n"));
    MessageBox(strNewMsg, _T("详细信息"), MB_OK | MB_ICONINFORMATION);
    // å¯¹è¯æ¡†æ˜¾ç¤ºå·¥è‰ºå‚æ•°
    CProcessDataListDlg dlg;
    dlg.setRawText(p->text);
    dlg.DoModal();
    *pResult = 0;
}
@@ -1395,3 +1396,12 @@
    return true;
}
BOOL CPageGlassList::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) {
        return TRUE;
    }
    return CDialogEx::PreTranslateMessage(pMsg);
}
SourceCode/Bond/Servo/CPageGlassList.h
@@ -40,7 +40,7 @@
    bool m_rebuilding = false;
private:
    void InitRxWindow();
    void InitRxWindows();
    void Resize();
    void InitStatusCombo();
    void InitTimeRangeCombo();
@@ -75,5 +75,6 @@
    afx_msg void OnBnClickedButtonPrevPage();
    afx_msg void OnBnClickedButtonNextPage();
    afx_msg void OnShowFullText(NMHDR* pNMHDR, LRESULT* pResult);
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    DECLARE_MESSAGE_MAP()
};
SourceCode/Bond/Servo/CProcessDataListDlg.cpp
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,201 @@
// CProcessDataListDlg.cpp: å®žçŽ°æ–‡ä»¶
//
#include "stdafx.h"
#include "Servo.h"
#include "CProcessDataListDlg.h"
#include "afxdialogex.h"
// CProcessDataListDlg å¯¹è¯æ¡†
IMPLEMENT_DYNAMIC(CProcessDataListDlg, CDialogEx)
CProcessDataListDlg::CProcessDataListDlg(CWnd* pParent /*=nullptr*/)
    : CDialogEx(IDD_DIALOG_PROCESS_DATA_LIST, pParent)
{
}
CProcessDataListDlg::~CProcessDataListDlg()
{
}
void CProcessDataListDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Control(pDX, IDC_LIST_RECIPE_PARAM, m_listCtrl);
}
BEGIN_MESSAGE_MAP(CProcessDataListDlg, CDialogEx)
    ON_BN_CLICKED(IDC_BUTTON1, &CProcessDataListDlg::OnBnClickedButton1)
END_MESSAGE_MAP()
// CProcessDataListDlg æ¶ˆæ¯å¤„理程序
BOOL CProcessDataListDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    DWORD dwStyle = m_listCtrl.GetExtendedStyle();
    dwStyle |= LVS_EX_FULLROWSELECT;
    dwStyle |= LVS_EX_GRIDLINES;
    dwStyle |= LVS_EX_DOUBLEBUFFER;
    m_listCtrl.SetExtendedStyle(dwStyle);
    HIMAGELIST imageList = ImageList_Create(24, 24, ILC_COLOR24, 1, 1);
    ListView_SetImageList(m_listCtrl.GetSafeHwnd(), imageList, LVSIL_SMALL);
    m_listCtrl.InsertColumn(0, _T("名称"), LVCFMT_RIGHT, 188);
    m_listCtrl.InsertColumn(1, _T("值"), LVCFMT_LEFT, 128);
    InsertParamsToListCtrl(m_listCtrl, m_strRawText);
    return TRUE;  // return TRUE unless you set the focus to a control
                  // å¼‚常: OCX å±žæ€§é¡µåº”返回 FALSE
}
void CProcessDataListDlg::setRawText(CString& strRawText)
{
    m_strRawText = strRawText;
}
void CProcessDataListDlg::InsertParamsToListCtrl(CListCtrl& listCtrl, const CString& data)
{
    // æ¸…空现有内容
    listCtrl.DeleteAllItems();
    int row = 0;
    int start = 0;
    CString item;
    // æŒ‰é€—号分割
    while (AfxExtractSubString(item, data, row, ','))  // row ä»Ž 0 å¼€å§‹ï¼Œé€ä¸ªå–子串
    {
        int pos = item.Find(_T(':'));
        if (pos == -1) {
            row++;
            continue;
        }
        CString name = item.Left(pos);
        CString value = item.Mid(pos + 1);
        name.Trim();   // åŽ»æŽ‰å‰åŽç©ºæ ¼
        value.Trim();
        int nItem = listCtrl.InsertItem(row, name);   // ç¬¬ä¸€åˆ—:参数名
        listCtrl.SetItemText(nItem, 1, value);        // ç¬¬äºŒåˆ—:参数值
        row++;
    }
}
bool CProcessDataListDlg::CopyListCtrlToClipboard(CListCtrl& listCtrl, bool includeHeader/* = false*/)
{
    CString strCSV;
    int nCount = listCtrl.GetItemCount();
    int nColCount = listCtrl.GetHeaderCtrl()->GetItemCount();
    if (nCount == 0 || nColCount == 0)
        return false;
    // å¦‚果需要导出表头
    if (includeHeader)
    {
        CString headerLine;
        for (int j = 0; j < nColCount; j++)
        {
            CString text;
            LVCOLUMN col;
            TCHAR buf[256] = { 0 };
            col.mask = LVCF_TEXT;
            col.pszText = buf;
            col.cchTextMax = 255;
            if (listCtrl.GetColumn(j, &col))
                text = col.pszText;
            if (text.Find(_T(',')) != -1 || text.Find(_T('"')) != -1)
            {
                text.Replace(_T("\""), _T("\"\""));
                text = _T("\"") + text + _T("\"");
            }
            headerLine += text;
            if (j < nColCount - 1)
                headerLine += _T(",");
        }
        strCSV += headerLine + _T("\n");
    }
    // éåŽ†è¡Œ
    for (int i = 0; i < nCount; i++)
    {
        CString line;
        for (int j = 0; j < nColCount; j++)
        {
            CString text = listCtrl.GetItemText(i, j);
            // å¦‚果包含逗号或双引号,加上引号并转义
            if (text.Find(_T(',')) != -1 || text.Find(_T('"')) != -1)
            {
                text.Replace(_T("\""), _T("\"\""));
                text = _T("\"") + text + _T("\"");
            }
            line += text;
            if (j < nColCount - 1)
                line += _T(",");
        }
        strCSV += line + _T("\n");
    }
    if (!OpenClipboard())
        return false;
    EmptyClipboard();
    // è½¬ä¸ºå…¨å±€å†…å­˜
    HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, (strCSV.GetLength() + 1) * sizeof(TCHAR));
    if (!hMem)
    {
        CloseClipboard();
        return false;
    }
    LPTSTR pMem = (LPTSTR)GlobalLock(hMem);
    if (!pMem)
    {
        GlobalFree(hMem);
        CloseClipboard();
        return false;
    }
    _tcscpy_s(pMem, strCSV.GetLength() + 1, strCSV);
    GlobalUnlock(hMem);
#ifdef UNICODE
    SetClipboardData(CF_UNICODETEXT, hMem);
#else
    SetClipboardData(CF_TEXT, hMem);
#endif
    CloseClipboard();
    return true;
}
void CProcessDataListDlg::OnBnClickedButton1()
{
    if (CopyListCtrlToClipboard(m_listCtrl, true))
    {
        AfxMessageBox(_T("复制成功!"));
    }
    else
    {
        AfxMessageBox(_T("复制失败!"));
    }
}
SourceCode/Bond/Servo/CProcessDataListDlg.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
#pragma once
#include "ListCtrlEx.h"
// CProcessDataListDlg å¯¹è¯æ¡†
class CProcessDataListDlg : public CDialogEx
{
    DECLARE_DYNAMIC(CProcessDataListDlg)
public:
    CProcessDataListDlg(CWnd* pParent = nullptr);   // æ ‡å‡†æž„造函数
    virtual ~CProcessDataListDlg();
public:
    void setRawText(CString& strRawText);
    void InsertParamsToListCtrl(CListCtrl& listCtrl, const CString& data);
    bool CopyListCtrlToClipboard(CListCtrl& listCtrl, bool includeHeader = false);
private:
    CString m_strRawText;
    CListCtrlEx m_listCtrl;
// å¯¹è¯æ¡†æ•°æ®
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_DIALOG_PROCESS_DATA_LIST };
#endif
protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV æ”¯æŒ
    DECLARE_MESSAGE_MAP()
public:
    virtual BOOL OnInitDialog();
    afx_msg void OnBnClickedButton1();
};
SourceCode/Bond/Servo/ListCtrlEx.cpp
@@ -34,12 +34,13 @@
    {
        // æ ¹æ®åœ¨ SetItemColor(DWORD iItem, COLORREF color) è®¾ç½®çš„   
        // ITEM号和COLORREF åœ¨æ‘¸æ¿ä¸­æŸ¥æ‰¾ï¼Œç„¶åŽè¿›è¡Œé¢œè‰²èµ‹å€¼ã€‚
        /*
        LISTITEMEX_9& itemex = m_listItemColor.GetAt(m_listItemColor.FindIndex(nmcd.dwItemSpec));
        lplvdr->clrText = itemex.colText;
        lplvdr->clrTextBk = itemex.colTextBk;
        *pResult = CDRF_DODEFAULT;
        /*
        */
        if (nmcd.dwItemSpec % 2 == 0) {
            lplvdr->clrText = RGB(0, 0, 0);
            lplvdr->clrTextBk = RGB(235, 235, 235);
@@ -50,7 +51,7 @@
            lplvdr->clrTextBk = RGB(255, 255, 255);
            *pResult = CDRF_DODEFAULT;
        }
        */
        break;
    }
SourceCode/Bond/Servo/Model.cpp
@@ -250,9 +250,18 @@
            alarmData.strUnitName = alarmManager.getUnitNameById(alarmData.nDeviceId, alarmData.nUnitId);
            alarmData.strStartTime = CToolUnits::timeToString2(CToolUnits::getTimestamp());
            alarmData.strEndTime = "";
            alarmData.strDescription = "";
            const AlarmInfo* alarmInfo = alarmManager.getAlarmInfoByID(alarmData.nId);
            alarmData.strDescription = alarmInfo != nullptr ? alarmInfo->strAlarmText : "";
            if (alarmInfo != nullptr) {
                if (alarmInfo->strDescription.empty()) {
                    alarmData.strDescription = alarmInfo->strAlarmText;
                }
                else {
                    alarmData.strDescription = alarmInfo->strAlarmText + "," + alarmInfo->strDescription + ".";
                }
            }
            int nAlarmEventId = 0;
            bool result = alarmManager.addAlarm(alarmData, nAlarmEventId);
@@ -482,6 +491,10 @@
int CModel::term()
{
    m_configuration.setPortCassetteSnSeed(1, m_master.getPortCassetteSnSeed(1));
    m_configuration.setPortCassetteSnSeed(2, m_master.getPortCassetteSnSeed(2));
    m_configuration.setPortCassetteSnSeed(3, m_master.getPortCassetteSnSeed(3));
    m_configuration.setPortCassetteSnSeed(4, m_master.getPortCassetteSnSeed(4));
    m_hsmsPassive.saveCache();
    m_hsmsPassive.term();
    CLog::GetLog()->SetOnLogCallback(nullptr);
SourceCode/Bond/Servo/PageAlarm.cpp
@@ -48,7 +48,7 @@
    }
}
void CPageAlarm::InitRxWindow()
void CPageAlarm::InitRxWindows()
{
    /* code */
    // è®¢é˜…数据
@@ -249,6 +249,7 @@
BOOL CPageAlarm::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    InitRxWindows();
    SetTimer(1, 3000, nullptr);
    // ä¸‹æ‹‰æ¡†æŽ§ä»¶
@@ -506,3 +507,12 @@
    m_nCurPage++;
    UpdatePageData();  // è°ƒç”¨åˆ†é¡µæ›´æ–°å‡½æ•°
}
BOOL CPageAlarm::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) {
        return TRUE;
    }
    return CDialogEx::PreTranslateMessage(pMsg);
}
SourceCode/Bond/Servo/PageAlarm.h
@@ -17,7 +17,7 @@
    virtual ~CPageAlarm();
private:
    void InitRxWindow();
    void InitRxWindows();
    void Resize();
    void LoadAlarms();
    void UpdatePageData();
@@ -63,11 +63,11 @@
    afx_msg void OnDestroy();
    afx_msg void OnClose();
    afx_msg void OnSize(UINT nType, int cx, int cy);
    afx_msg void OnTimer(UINT_PTR nIDEvent);
    afx_msg void OnCbnSelchangeComboDatetime();
    afx_msg void OnBnClickedButtonSearch();
    afx_msg void OnBnClickedButtonExport();
    afx_msg void OnBnClickedButtonPrevPage();
    afx_msg void OnBnClickedButtonNextPage();
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    DECLARE_MESSAGE_MAP()
};
SourceCode/Bond/Servo/PageLog.cpp
@@ -53,7 +53,7 @@
// CLogDlg æ¶ˆæ¯å¤„理程序
void CPageLog::InitRxWindow()
void CPageLog::InitRxWindows()
{
    /* code */
    // è®¢é˜…数据
@@ -116,7 +116,7 @@
BOOL CPageLog::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    InitRxWindow();
    InitRxWindows();
    // ç¼“å­˜
SourceCode/Bond/Servo/PageLog.h
@@ -25,7 +25,7 @@
private:
    void InitRxWindow();
    void InitRxWindows();
    void AppendLog(int level, const char* pszText);
    void Resize();
SourceCode/Bond/Servo/PageRecipe.cpp
@@ -778,4 +778,13 @@
        }
    }
    return result;
}
BOOL CPageRecipe::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) {
        return TRUE;
    }
    return CDialogEx::PreTranslateMessage(pMsg);
}
SourceCode/Bond/Servo/PageRecipe.h
@@ -46,6 +46,7 @@
    afx_msg void OnClickListPPID(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg void OnDblclkListPPID(NMHDR* pNMHDR, LRESULT* pResult);
    afx_msg void OnCbnSelchangeComboEquipment();
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    DECLARE_MESSAGE_MAP()
private:
SourceCode/Bond/Servo/PageTransferLog.cpp
@@ -51,7 +51,7 @@
    CDialogEx::DoDataExchange(pDX);
}
void CPageTransferLog::InitRxWindow()
void CPageTransferLog::InitRxWindows()
{
    /* code */
    // è®¢é˜…数据
@@ -408,7 +408,7 @@
{
    if (nIDEvent == 1) {
        KillTimer(1);
        InitRxWindow();
        InitRxWindows();
    }
    CDialogEx::OnTimer(nIDEvent);
}
@@ -497,4 +497,13 @@
        m_nCurPage++;
        UpdatePageData();
    }
}
BOOL CPageTransferLog::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) {
        return TRUE;
    }
    return CDialogEx::PreTranslateMessage(pMsg);
}
SourceCode/Bond/Servo/PageTransferLog.h
@@ -36,7 +36,7 @@
    CDateTimeCtrl m_dateTimeEnd;
    CListCtrlEx m_listCtrl;
    void InitRxWindow();
    void InitRxWindows();
    void Resize();
    void InitStatusCombo();
    void InitTimeRangeCombo();
@@ -66,5 +66,6 @@
    afx_msg void OnBnClickedButtonExport();
    afx_msg void OnBnClickedButtonPrevPage();
    afx_msg void OnBnClickedButtonNextPage();
    virtual BOOL PreTranslateMessage(MSG* pMsg);
    DECLARE_MESSAGE_MAP()
};
SourceCode/Bond/Servo/Servo.rc
Binary files differ
SourceCode/Bond/Servo/Servo.vcxproj
@@ -225,6 +225,7 @@
    <ClInclude Include="CPageReport.h" />
    <ClInclude Include="CPageVarialbles.h" />
    <ClInclude Include="CParam.h" />
    <ClInclude Include="CProcessDataListDlg.h" />
    <ClInclude Include="CReport.h" />
    <ClInclude Include="CRobotCmdContainerDlg.h" />
    <ClInclude Include="CRobotCmdTestDlg.h" />
@@ -400,6 +401,7 @@
    <ClCompile Include="CPageReport.cpp" />
    <ClCompile Include="CPageVarialbles.cpp" />
    <ClCompile Include="CParam.cpp" />
    <ClCompile Include="CProcessDataListDlg.cpp" />
    <ClCompile Include="CReport.cpp" />
    <ClCompile Include="CRobotCmdContainerDlg.cpp" />
    <ClCompile Include="CRobotCmdTestDlg.cpp" />
SourceCode/Bond/Servo/Servo.vcxproj.filters
@@ -197,6 +197,7 @@
    <ClCompile Include="CServoUtilsTool.cpp" />
    <ClCompile Include="GlassLogDb.cpp" />
    <ClCompile Include="sqlite3.c" />
    <ClCompile Include="CProcessDataListDlg.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="AlarmManager.h" />
@@ -419,6 +420,7 @@
    <ClInclude Include="GlassLogDb.h" />
    <ClInclude Include="sqlite3.h" />
    <ClInclude Include="sqlite3ext.h" />
    <ClInclude Include="CProcessDataListDlg.h" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="Servo.rc" />
SourceCode/Bond/Servo/ServoDlg.cpp
@@ -218,6 +218,7 @@
                    m_pMyStatusbar->setForegroundColor(RGB(0, 0, 0));
                    m_pMyStatusbar->setRunTimeText("启动失败.");
                    m_pTopToolbar->GetBtn(IDC_BUTTON_ALARM)->EnableWindow(TRUE);
                    KillTimer(TIMER_ID_UPDATE_RUMTIME);
                }
                else if (state == SERVO::MASTERSTATE::ATHERERROR) {
                    m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(TRUE);
@@ -231,6 +232,7 @@
                        AfxMessageBox(_T("AOI检测失败,请操作员介入解决问题!"));
                    }
                    m_pTopToolbar->GetBtn(IDC_BUTTON_ALARM)->EnableWindow(TRUE);
                    KillTimer(TIMER_ID_UPDATE_RUMTIME);
                }
                else if (state == SERVO::MASTERSTATE::RUNNING || state == SERVO::MASTERSTATE::RUNNING_CONTINUOUS_TRANSFER
                    || state == SERVO::MASTERSTATE::RUNNING_BATCH) {
SourceCode/Bond/Servo/resource.h
Binary files differ
SourceCode/Bond/x64/Debug/AlarmList.csv
@@ -1 +1 @@
No,UNIT ID,UNIT NO,Alarm Level,Alarm Code,AlarmID,Alarm Text,Description 1,EFEM,100,0,0,1000,机器人CCLink链接异常,"请检查接线,断电重启" 2,EFEM,101,0,0,1001,相机CCLink链接异常,"请检查接线,断电重启" 3,EFEM,102,0,0,1002,静电测试CCLink链接异常,"请检查接线,断电重启" 4,EFEM,103,0,0,1003,, 5,EFEM,104,0,0,1004,, 6,EFEM,105,0,0,1005,, 7,EFEM,106,0,0,1006,, 8,EFEM,107,0,0,1007,, 9,EFEM,108,0,0,1008,, 10,EFEM,109,0,0,1009,, 11,EFEM,110,0,0,1010,总进气气压异常,检测进气 12,EFEM,111,0,0,1011,总真空气压异常,检测真空 13,EFEM,112,0,0,1012,LP真空异常,检测真空 14,EFEM,113,0,0,1013,离子风棒压空异常,检测进气 15,EFEM,114,0,0,1014,机器人真空异常,检测真空 16,EFEM,115,0,0,1015,急停被按下,请检查急停按钮 17,EFEM,116,0,0,1016,, 18,EFEM,117,0,0,1017,, 19,EFEM,118,0,0,1018,, 20,EFEM,119,0,0,1019,, 21,EFEM,120,0,0,1020,安全门打开,检查安全门 22,EFEM,121,0,0,1021,正面左门打开中,检查安全门 23,EFEM,122,0,0,1022,正面右门打开中,检查安全门 24,EFEM,123,0,0,1023,侧面左门打开中,检查安全门 25,EFEM,124,0,0,1024,侧面右门打开中,检查安全门 26,EFEM,125,0,0,1025,背面左门打开中,检查安全门 27,EFEM,126,0,0,1026,背面右门打开中,检查安全门 28,EFEM,127,0,0,1027,, 29,EFEM,128,0,0,1028,, 30,EFEM,129,0,0,1029,, 31,EFEM,130,0,0,1030,, 32,EFEM,131,0,0,1031,"Port1_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 33,EFEM,132,0,0,1032,"Port1_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 34,EFEM,133,0,0,1033,"Port1_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 35,EFEM,134,0,0,1034,, 36,EFEM,135,0,0,1035,, 37,EFEM,136,0,0,1036,, 38,EFEM,137,0,0,1037,, 39,EFEM,138,0,0,1038,, 40,EFEM,139,0,0,1039,, 41,EFEM,140,1,0,1040,"Port1_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 42,EFEM,141,1,0,1041,"Port1_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 43,EFEM,142,1,0,1042,"Port1_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 44,EFEM,143,1,0,1043,"Port1_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 45,EFEM,144,0,0,1044,, 46,EFEM,145,0,0,1045,, 47,EFEM,146,0,0,1046,, 48,EFEM,147,0,0,1047,, 49,EFEM,148,0,0,1048,, 50,EFEM,149,0,0,1049,, 51,EFEM,150,0,0,1050,"Port2_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 52,EFEM,151,0,0,1051,"Port2_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 53,EFEM,152,0,0,1052,"Port2_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 54,EFEM,153,0,0,1053,, 55,EFEM,154,0,0,1054,, 56,EFEM,155,0,0,1055,, 57,EFEM,156,0,0,1056,, 58,EFEM,157,0,0,1057,, 59,EFEM,158,0,0,1058,, 60,EFEM,159,0,0,1059,, 61,EFEM,160,0,0,1060,"Port2_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 62,EFEM,161,0,0,1061,"Port2_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 63,EFEM,162,0,0,1062,"Port2_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 64,EFEM,163,0,0,1063,"Port2_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 65,EFEM,164,0,0,1064,, 66,EFEM,165,0,0,1065,, 67,EFEM,166,0,0,1066,, 68,EFEM,167,0,0,1067,, 69,EFEM,168,0,0,1068,, 70,EFEM,169,0,0,1069,, 71,EFEM,170,1,0,1070,, 72,EFEM,171,1,0,1071,"Port3_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 73,EFEM,172,1,0,1072,"Port3_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 74,EFEM,173,1,0,1073,"Port3_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 75,EFEM,174,1,0,1074,"Port3_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 76,EFEM,175,1,0,1075,, 77,EFEM,176,1,0,1076,, 78,EFEM,177,1,0,1077,, 79,EFEM,178,1,0,1078,, 80,EFEM,179,1,0,1079,, 81,EFEM,180,1,0,1080,"Port3_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 82,EFEM,181,1,0,1081,"Port3_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 83,EFEM,182,1,0,1082,"Port3_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 84,EFEM,183,1,0,1083,, 85,EFEM,184,1,0,1084,, 86,EFEM,185,1,0,1085,, 87,EFEM,186,1,0,1086,, 88,EFEM,187,1,0,1087,, 89,EFEM,188,1,0,1088,, 90,EFEM,189,1,0,1089,, 91,EFEM,190,1,0,1090,, 92,EFEM,191,1,0,1091,"Port4_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 93,EFEM,192,1,0,1092,"Port4_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 94,EFEM,193,1,0,1093,"Port4_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 95,EFEM,194,1,0,1094,"Port4_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 96,EFEM,195,1,0,1095,, 97,EFEM,196,1,0,1096,, 98,EFEM,197,1,0,1097,, 99,EFEM,198,1,0,1098,, 100,EFEM,199,1,0,1099,, 101,EFEM,200,1,0,1100,"Port4_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 102,EFEM,201,1,0,1101,"Port4_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 103,EFEM,202,1,0,1102,"Port4_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 104,EFEM,203,1,0,1103,, 105,EFEM,204,1,0,1104,, 106,EFEM,205,1,0,1105,, 107,EFEM,206,1,0,1106,, 108,EFEM,207,1,0,1107,, 109,EFEM,208,1,0,1108,, 110,EFEM,209,1,0,1109,, 111,EFEM,210,0,0,1110,回原点失败/超时,请检查设备状态以及轴位置是否有干涉,重新执行回原操作 112,EFEM,211,0,0,1111,Flip工位,真空打开时在荷异常,请检查玻璃位置 113,EFEM,212,1,0,1112,, 114,EFEM,213,1,0,1113,, 115,EFEM,214,1,0,1114,, 116,EFEM,215,1,0,1115,, 117,EFEM,216,1,0,1116,, 118,EFEM,217,1,0,1117,, 119,EFEM,218,1,0,1118,, 120,EFEM,219,1,0,1119,, 121,EFEM,220,1,0,1120,任务取消失败,当前取消任务条件不满足 122,EFEM,221,1,0,1121,任务重试失败,当前重试任务条件不满足
No,UNIT ID,UNIT NO,Alarm Level,Alarm Code,AlarmID,Alarm Text,Description 1,EFEM,100,0,0,1000,机器人CCLink链接异常,"请检查接线,断电重启" 2,EFEM,101,0,0,1001,相机CCLink链接异常,"请检查接线,断电重启" 3,EFEM,102,0,0,1002,静电测试CCLink链接异常,"请检查接线,断电重启" 4,EFEM,103,0,0,1003,, 5,EFEM,104,0,0,1004,, 6,EFEM,105,0,0,1005,, 7,EFEM,106,0,0,1006,, 8,EFEM,107,0,0,1007,, 9,EFEM,108,0,0,1008,, 10,EFEM,109,0,0,1009,, 11,EFEM,110,0,0,1010,总进气气压异常,请检测进气 12,EFEM,111,0,0,1011,总真空气压异常,请检测真空 13,EFEM,112,0,0,1012,LP真空异常,检测真空 14,EFEM,113,0,0,1013,离子风棒压空异常,请检测进气 15,EFEM,114,0,0,1014,机器人真空异常,请检测真空 16,EFEM,115,0,0,1015,急停被按下,请检查急停按钮 17,EFEM,116,0,0,1016,, 18,EFEM,117,0,0,1017,, 19,EFEM,118,0,0,1018,, 20,EFEM,119,0,0,1019,, 21,EFEM,120,0,0,1020,安全门打开,请检查安全门 22,EFEM,121,0,0,1021,正面左门打开中,请检查安全门 23,EFEM,122,0,0,1022,正面右门打开中,请检查安全门 24,EFEM,123,0,0,1023,侧面左门打开中,请检查安全门 25,EFEM,124,0,0,1024,侧面右门打开中,请检查安全门 26,EFEM,125,0,0,1025,背面左门打开中,请检查安全门 27,EFEM,126,0,0,1026,背面右门打开中,请检查安全门 28,EFEM,127,0,0,1027,, 29,EFEM,128,0,0,1028,, 30,EFEM,129,0,0,1029,, 31,EFEM,130,0,0,1030,, 32,EFEM,131,0,0,1031,"Port1_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 33,EFEM,132,0,0,1032,"Port1_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 34,EFEM,133,0,0,1033,"Port1_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 35,EFEM,134,0,0,1034,, 36,EFEM,135,0,0,1035,, 37,EFEM,136,0,0,1036,, 38,EFEM,137,0,0,1037,, 39,EFEM,138,0,0,1038,, 40,EFEM,139,0,0,1039,, 41,EFEM,140,1,0,1040,"Port1_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 42,EFEM,141,1,0,1041,"Port1_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 43,EFEM,142,1,0,1042,"Port1_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 44,EFEM,143,1,0,1043,"Port1_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 45,EFEM,144,0,0,1044,, 46,EFEM,145,0,0,1045,, 47,EFEM,146,0,0,1046,, 48,EFEM,147,0,0,1047,, 49,EFEM,148,0,0,1048,, 50,EFEM,149,0,0,1049,, 51,EFEM,150,0,0,1050,"Port2_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 52,EFEM,151,0,0,1051,"Port2_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 53,EFEM,152,0,0,1052,"Port2_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 54,EFEM,153,0,0,1053,, 55,EFEM,154,0,0,1054,, 56,EFEM,155,0,0,1055,, 57,EFEM,156,0,0,1056,, 58,EFEM,157,0,0,1057,, 59,EFEM,158,0,0,1058,, 60,EFEM,159,0,0,1059,, 61,EFEM,160,0,0,1060,"Port2_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 62,EFEM,161,0,0,1061,"Port2_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 63,EFEM,162,0,0,1062,"Port2_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 64,EFEM,163,0,0,1063,"Port2_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 65,EFEM,164,0,0,1064,, 66,EFEM,165,0,0,1065,, 67,EFEM,166,0,0,1066,, 68,EFEM,167,0,0,1067,, 69,EFEM,168,0,0,1068,, 70,EFEM,169,0,0,1069,, 71,EFEM,170,1,0,1070,, 72,EFEM,171,1,0,1071,"Port3_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 73,EFEM,172,1,0,1072,"Port3_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 74,EFEM,173,1,0,1073,"Port3_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 75,EFEM,174,1,0,1074,"Port3_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 76,EFEM,175,1,0,1075,, 77,EFEM,176,1,0,1076,, 78,EFEM,177,1,0,1077,, 79,EFEM,178,1,0,1078,, 80,EFEM,179,1,0,1079,, 81,EFEM,180,1,0,1080,"Port3_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 82,EFEM,181,1,0,1081,"Port3_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 83,EFEM,182,1,0,1082,"Port3_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 84,EFEM,183,1,0,1083,, 85,EFEM,184,1,0,1084,, 86,EFEM,185,1,0,1085,, 87,EFEM,186,1,0,1086,, 88,EFEM,187,1,0,1087,, 89,EFEM,188,1,0,1088,, 90,EFEM,189,1,0,1089,, 91,EFEM,190,1,0,1090,, 92,EFEM,191,1,0,1091,"Port4_E84流程停止,OHT_VALID信号异常",请检查OHT信号或者E84线缆 93,EFEM,192,1,0,1092,"Port4_E84流程停止,光栅被遮挡或者急停被拍",请检查光栅信号急停 94,EFEM,193,1,0,1093,"Port4_E84流程停止,OHT_取或放FOUP超时","OHT_BUSY后未在规定时间内取走FOUP,请检查OHT或者核对LP状态" 95,EFEM,194,1,0,1094,"Port4_E84流程停止,OHT_BUSY_OFF或者TR_REQ_OFF信号超时",请检查OHT信号或者E84线缆 96,EFEM,195,1,0,1095,, 97,EFEM,196,1,0,1096,, 98,EFEM,197,1,0,1097,, 99,EFEM,198,1,0,1098,, 100,EFEM,199,1,0,1099,, 101,EFEM,200,1,0,1100,"Port4_E84流程异常,OHT_TR_REQ_ON信号超时",请检查OHT或者E84线缆 102,EFEM,201,1,0,1101,"Port4_E84流程异常,OHT_BUSY_ON信号超时",请检查OHT或者E84线缆 103,EFEM,202,1,0,1102,"Port4_E84流程异常,OHT_COMPT_OFF信号超时",请检查OHT信号或者E84线缆 104,EFEM,203,1,0,1103,, 105,EFEM,204,1,0,1104,, 106,EFEM,205,1,0,1105,, 107,EFEM,206,1,0,1106,, 108,EFEM,207,1,0,1107,, 109,EFEM,208,1,0,1108,, 110,EFEM,209,1,0,1109,, 111,EFEM,210,0,0,1110,回原点失败/超时,请检查设备状态以及轴位置是否有干涉,请重新执行回原操作 112,EFEM,211,0,0,1111,Flip工位,真空打开时在荷异常,请检查玻璃位置 113,EFEM,212,1,0,1112,, 114,EFEM,213,1,0,1113,, 115,EFEM,214,1,0,1114,, 116,EFEM,215,1,0,1115,, 117,EFEM,216,1,0,1116,, 118,EFEM,217,1,0,1117,, 119,EFEM,218,1,0,1118,, 120,EFEM,219,1,0,1119,, 121,EFEM,220,1,0,1120,任务取消失败,当前取消任务条件不满足 122,EFEM,221,1,0,1121,任务重试失败,当前重试任务条件不满足