1.对话框显示工艺参数,可复制到剪贴板;
2.修复几处因按回车或ESC键导致页面被关闭的问题;
3.修复解释警告数据文本失败的问题;
4.更新警告文本,显示警告详细信息;
5.完善警告描述内容 ;
已添加4个文件
已修改18个文件
372 ■■■■■ 文件已修改
Document/AlarmList.csv 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Document/ParamInfo.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/Servo/AlarmManager.cpp 30 ●●●● 补丁 | 查看 | 原始文档 | 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 13 ●●●● 补丁 | 查看 | 原始文档 | 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/resource.h 补丁 | 查看 | 原始文档 | blame | 历史
SourceCode/Bond/x64/Debug/AlarmList.csv 4 ●●● 补丁 | 查看 | 原始文档 | 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/AlarmManager.cpp
@@ -784,16 +784,33 @@
// è¯»å–报警文件
bool AlarmManager::readAlarmFile(const std::string& filename) {
    std::ifstream file(filename);
    std::string line;
    bool first_line = true;
    std::ifstream file(filename, std::ios::binary);
    if (!file.is_open()) {
        std::cerr << "Error opening file!" << std::endl;
        return false;
    }
    while (std::getline(file, line)) {
    auto getline_cross = [](std::ifstream& f, std::string& out) -> bool {
        out.clear();
        char ch;
        while (f.get(ch)) {
            if (ch == '\r') {
                // å¤„理 \r\n æˆ– å•独 \r
                if (f.peek() == '\n') f.get();
                break;
            }
            else if (ch == '\n') {
                break;
            }
            out.push_back(ch);
        }
        return !out.empty() || !f.eof();
    };
    std::string line;
    bool first_line = true;
    while (getline_cross(file, line)) {
        if (first_line) {
            first_line = false;
            continue;
@@ -804,7 +821,6 @@
        AlarmInfo alarm;
        try {
            // é€å­—段解析并验证
            if (!std::getline(ss, cell, ',')) throw std::runtime_error("Missing field: No");
            if (!std::getline(ss, alarm.strUnitID, ',')) throw std::runtime_error("Missing field: UnitID");
            if (!std::getline(ss, alarm.strUnitNo, ',')) throw std::runtime_error("Missing field: UnitNo");
@@ -817,7 +833,6 @@
            if (!std::getline(ss, alarm.strAlarmText, ',')) throw std::runtime_error("Missing field: AlarmText");
            if (!std::getline(ss, alarm.strDescription, ',')) throw std::runtime_error("Missing field: Description");
            // æ£€æŸ¥æ˜¯å¦é‡å¤
            if (m_mapAlarm.find(alarm.nAlarmID) == m_mapAlarm.end()) {
                m_mapAlarm[alarm.nAlarmID] = alarm;
            }
@@ -826,7 +841,6 @@
            }
        }
        catch (const std::exception& e) {
            // æ•获并记录解析错误
            std::cerr << "Error parsing line: " << line << " - " << e.what() << std::endl;
            continue;
        }
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);
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/resource.h
Binary files differ
SourceCode/Bond/x64/Debug/AlarmList.csv
@@ -1,3 +1 @@
No,UNIT ID,UNIT NO,Alarm Level,Alarm Code,AlarmID,Alarm Text,Description
1,EFEM(ROBOT)-EFEM,,0,2,100,Fatal communication error in the ACLS receive loop. Please reboot MCC., Fatal communication error in the ACLS receive loop. Please reboot MCC.
2,Load Port 1-EFEM,,1,1,101,"Must check substrate location due to the failure of ACLS operation <%s> ; To protect glass, a dummy glass has been created"," Must check substrate location due to the failure of ACLS operation <%s> ; To protect glass, a dummy glass has been created"
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,任务重试失败,当前重试任务条件不满足