1.对话框显示工艺参数,可复制到剪贴板;
2.修复几处因按回车或ESC键导致页面被关闭的问题;
3.修复解释警告数据文本失败的问题;
4.更新警告文本,显示警告详细信息;
5.完善警告描述内容 ;
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | 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,ä»»å¡éè¯å¤±è´¥ï¼å½åéè¯ä»»å¡æ¡ä»¶ä¸æ»¡è¶³ |
| | |
| | | |
| | | // è¯»åæ¥è¦æä»¶ |
| | | 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; |
| | |
| | | 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"); |
| | |
| | | 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; |
| | | } |
| | |
| | | } |
| | | } |
| | | catch (const std::exception& e) { |
| | | // æè·å¹¶è®°å½è§£æé误 |
| | | std::cerr << "Error parsing line: " << line << " - " << e.what() << std::endl; |
| | | continue; |
| | | } |
| | |
| | | #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) |
| | |
| | | } |
| | | |
| | | // ===== CPageGlassList æ¶æ¯å¤çç¨åº ===== |
| | | void CPageGlassList::InitRxWindow() |
| | | void CPageGlassList::InitRxWindows() |
| | | { |
| | | // 订é
æ°æ® |
| | | IRxWindows* pRxWindows = RX_GetRxWindows(); |
| | |
| | | { |
| | | if (nIDEvent == 1) { |
| | | KillTimer(1); |
| | | InitRxWindow(); |
| | | InitRxWindows(); |
| | | } |
| | | else if (nIDEvent == 2) { |
| | | UpdateWipData(); // åªåå¢éï¼ä¸é建 |
| | |
| | | { |
| | | 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; |
| | | } |
| | | |
| | |
| | | |
| | | return true; |
| | | } |
| | | |
| | | BOOL CPageGlassList::PreTranslateMessage(MSG* pMsg) |
| | | { |
| | | if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) { |
| | | return TRUE; |
| | | } |
| | | |
| | | return CDialogEx::PreTranslateMessage(pMsg); |
| | | } |
| | |
| | | bool m_rebuilding = false; |
| | | |
| | | private: |
| | | void InitRxWindow(); |
| | | void InitRxWindows(); |
| | | void Resize(); |
| | | void InitStatusCombo(); |
| | | void InitTimeRangeCombo(); |
| | |
| | | afx_msg void OnBnClickedButtonPrevPage(); |
| | | afx_msg void OnBnClickedButtonNextPage(); |
| | | afx_msg void OnShowFullText(NMHDR* pNMHDR, LRESULT* pResult); |
| | | virtual BOOL PreTranslateMessage(MSG* pMsg); |
| | | DECLARE_MESSAGE_MAP() |
| | | }; |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | // 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("å¤å¶å¤±è´¥ï¼")); |
| | | } |
| | | } |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | #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(); |
| | | }; |
| | |
| | | { |
| | | // æ ¹æ®å¨ 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); |
| | |
| | | lplvdr->clrTextBk = RGB(255, 255, 255); |
| | | *pResult = CDRF_DODEFAULT; |
| | | } |
| | | */ |
| | | |
| | | |
| | | break; |
| | | } |
| | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | void CPageAlarm::InitRxWindow() |
| | | void CPageAlarm::InitRxWindows() |
| | | { |
| | | /* code */ |
| | | // 订é
æ°æ® |
| | |
| | | BOOL CPageAlarm::OnInitDialog() |
| | | { |
| | | CDialogEx::OnInitDialog(); |
| | | InitRxWindows(); |
| | | SetTimer(1, 3000, nullptr); |
| | | |
| | | // ä¸ææ¡æ§ä»¶ |
| | |
| | | m_nCurPage++; |
| | | UpdatePageData(); // è°ç¨åé¡µæ´æ°å½æ° |
| | | } |
| | | |
| | | BOOL CPageAlarm::PreTranslateMessage(MSG* pMsg) |
| | | { |
| | | if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) { |
| | | return TRUE; |
| | | } |
| | | |
| | | return CDialogEx::PreTranslateMessage(pMsg); |
| | | } |
| | |
| | | virtual ~CPageAlarm(); |
| | | |
| | | private: |
| | | void InitRxWindow(); |
| | | void InitRxWindows(); |
| | | void Resize(); |
| | | void LoadAlarms(); |
| | | void UpdatePageData(); |
| | |
| | | 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() |
| | | }; |
| | |
| | | // CLogDlg æ¶æ¯å¤çç¨åº |
| | | |
| | | |
| | | void CPageLog::InitRxWindow() |
| | | void CPageLog::InitRxWindows() |
| | | { |
| | | /* code */ |
| | | // 订é
æ°æ® |
| | |
| | | BOOL CPageLog::OnInitDialog() |
| | | { |
| | | CDialogEx::OnInitDialog(); |
| | | InitRxWindow(); |
| | | InitRxWindows(); |
| | | |
| | | |
| | | // ç¼å |
| | |
| | | |
| | | |
| | | private: |
| | | void InitRxWindow(); |
| | | void InitRxWindows(); |
| | | void AppendLog(int level, const char* pszText); |
| | | void Resize(); |
| | | |
| | |
| | | } |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | BOOL CPageRecipe::PreTranslateMessage(MSG* pMsg) |
| | | { |
| | | if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) { |
| | | return TRUE; |
| | | } |
| | | |
| | | return CDialogEx::PreTranslateMessage(pMsg); |
| | | } |
| | |
| | | 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: |
| | |
| | | CDialogEx::DoDataExchange(pDX); |
| | | } |
| | | |
| | | void CPageTransferLog::InitRxWindow() |
| | | void CPageTransferLog::InitRxWindows() |
| | | { |
| | | /* code */ |
| | | // 订é
æ°æ® |
| | |
| | | { |
| | | if (nIDEvent == 1) { |
| | | KillTimer(1); |
| | | InitRxWindow(); |
| | | InitRxWindows(); |
| | | } |
| | | CDialogEx::OnTimer(nIDEvent); |
| | | } |
| | |
| | | m_nCurPage++; |
| | | UpdatePageData(); |
| | | } |
| | | } |
| | | |
| | | BOOL CPageTransferLog::PreTranslateMessage(MSG* pMsg) |
| | | { |
| | | if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) { |
| | | return TRUE; |
| | | } |
| | | |
| | | return CDialogEx::PreTranslateMessage(pMsg); |
| | | } |
| | |
| | | CDateTimeCtrl m_dateTimeEnd; |
| | | CListCtrlEx m_listCtrl; |
| | | |
| | | void InitRxWindow(); |
| | | void InitRxWindows(); |
| | | void Resize(); |
| | | void InitStatusCombo(); |
| | | void InitTimeRangeCombo(); |
| | |
| | | afx_msg void OnBnClickedButtonExport(); |
| | | afx_msg void OnBnClickedButtonPrevPage(); |
| | | afx_msg void OnBnClickedButtonNextPage(); |
| | | virtual BOOL PreTranslateMessage(MSG* pMsg); |
| | | DECLARE_MESSAGE_MAP() |
| | | }; |
| | |
| | | <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" /> |
| | |
| | | <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" /> |
| | |
| | | <ClCompile Include="CServoUtilsTool.cpp" /> |
| | | <ClCompile Include="GlassLogDb.cpp" /> |
| | | <ClCompile Include="sqlite3.c" /> |
| | | <ClCompile Include="CProcessDataListDlg.cpp" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ClInclude Include="AlarmManager.h" /> |
| | |
| | | <ClInclude Include="GlassLogDb.h" /> |
| | | <ClInclude Include="sqlite3.h" /> |
| | | <ClInclude Include="sqlite3ext.h" /> |
| | | <ClInclude Include="CProcessDataListDlg.h" /> |
| | | </ItemGroup> |
| | | <ItemGroup> |
| | | <ResourceCompile Include="Servo.rc" /> |
| | |
| | | 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,ä»»å¡éè¯å¤±è´¥ï¼å½åéè¯ä»»å¡æ¡ä»¶ä¸æ»¡è¶³ |