| Document/Panel Bonder八零联合 SecsTest CheckList_v3.0.xlsx | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEquipment.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CEquipment.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CMaster.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CMaster.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Servo.rc | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/ServoDlg.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/TopToolbar.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/TopToolbar.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/resource.h | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/x64/Debug/Res/RunCt_Gray_32.ico | 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/x64/Debug/Res/RunCt_High_32.ico | 补丁 | 查看 | 原始文档 | blame | 历史 |
Document/Panel Bonder°ËÁãÁªºÏ SecsTest CheckList_v3.0.xlsxBinary files differ
SourceCode/Bond/Servo/CEquipment.cpp
@@ -1292,6 +1292,21 @@ return nullptr; } CSlot* CEquipment::isSlotAvailable(unsigned int slot) { if (slot >= 8) return nullptr; if (!m_slot[slot].isEnable()) return nullptr; if (m_slot[slot].isLock()) return nullptr; if (!m_slot[slot].isEmpty()) return nullptr; int lsPath = m_slot[slot].getLinkSignalPath(); if (!m_bLinkSignalToDownstream[lsPath][SIGNAL_UPSTREAM_INLINE] || m_bLinkSignalToDownstream[lsPath][SIGNAL_UPSTREAM_TROUBLE] || !m_bLinkSignalToDownstream[lsPath][SIGNAL_INTERLOCK] || !m_bLinkSignalToDownstream[lsPath][SIGNAL_RECEIVE_ABLE]) return nullptr; return &m_slot[slot]; } CSlot* CEquipment::getNonEmptySlot(MaterialsType putSlotType) { for (int i = 0; i < SLOT_MAX; i++) { @@ -1364,6 +1379,22 @@ return nullptr; } CSlot* CEquipment::getProcessedSlotCt(unsigned int slot) { if (slot >= 8) return nullptr; if (!m_slot[slot].isEnable()) return nullptr; if (m_slot[slot].isLock()) return nullptr; CGlass* pGlass = (CGlass*)m_slot[slot].getContext(); if (pGlass == nullptr) return nullptr; int lsPath = m_slot[slot].getLinkSignalPath(); if (!m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_INLINE] || m_bLinkSignalToUpstream[lsPath][SIGNAL_UPSTREAM_TROUBLE] || !m_bLinkSignalToUpstream[lsPath][SIGNAL_INTERLOCK] || !m_bLinkSignalToUpstream[lsPath][SIGNAL_SEND_ABLE]) return nullptr; return &m_slot[slot]; } CSlot* CEquipment::getInspFailSlot() { for (int i = 0; i < SLOT_MAX; i++) { SourceCode/Bond/Servo/CEquipment.h
@@ -176,6 +176,7 @@ // è·åä¸ä¸ªæå®ç©æç±»å(G1,G2,G1&G2)çç©ºæ§½ä½ CSlot* getAvailableSlotForGlass(MaterialsType type); CSlot* getAvailableSlotForGlassExcludeSignal(MaterialsType type); CSlot* isSlotAvailable(unsigned int slot); // 卿å®çæ§½å表ä¸ï¼è·åä¸ä¸ªæå®ç©æç±»å(G1,G2,G1&G2)çç©ºæ§½ä½ CSlot* getAvailableSlotForGlass2(MaterialsType type, const std::vector<int>& candidates); @@ -187,6 +188,7 @@ CSlot* getProcessedSlot(MaterialsType putSlotType); CSlot* getProcessedSlot2(MaterialsType putSlotType, const std::vector<int>& candidates); CSlot* getInspFailSlot(); CSlot* getProcessedSlotCt(unsigned int slot); // è·åç»çç©æ CGlass* getGlassFromSlot(int slotNo); SourceCode/Bond/Servo/CMaster.cpp
@@ -54,6 +54,7 @@ m_isCompareMapsBeforeProceeding = FALSE; m_bEnableEventReport = true; m_bEnableAlarmReport = true; m_bContinuousTransfer = false; InitializeCriticalSection(&m_criticalSection); } @@ -251,6 +252,20 @@ return -1; } m_bContinuousTransfer = false; setState(MASTERSTATE::STARTING); m_ullStartTime = GetTickCount64(); return 0; } int CMaster::startContinuousTransfer() { if (m_state != MASTERSTATE::READY) { return -1; } m_bContinuousTransfer = true; setState(MASTERSTATE::STARTING); m_ullStartTime = GetTickCount64(); @@ -260,7 +275,7 @@ int CMaster::stop() { // è¿è¡æ¶é´ä¸ºç´¯å ç»æï¼æ¬æ¬¡åæ¢æ¶å·æ°ï¼ if (m_state != MASTERSTATE::RUNNING) { if (m_state != MASTERSTATE::RUNNING && m_state != MASTERSTATE::RUNNING_CONTINUOUS_TRANSFER) { return -1; } @@ -447,7 +462,11 @@ unlock(); setState(MASTERSTATE::RUNNING); if(!m_bContinuousTransfer) setState(MASTERSTATE::RUNNING); else setState(MASTERSTATE::RUNNING_CONTINUOUS_TRANSFER); continue; } @@ -664,6 +683,132 @@ unlock(); continue; } // åä¼ æ¨¡å¼è°åº¦é»è¾ else if (m_state == MASTERSTATE::RUNNING_CONTINUOUS_TRANSFER) { // æ£æµå¤ærobotç¶æ RMDATA& rmd = pEFEM->getRobotMonitoringData(); if (rmd.status != ROBOT_STATUS::Idle && rmd.status != ROBOT_STATUS::Run) { unlock(); continue; } if (m_pActiveRobotTask != nullptr) { if (m_pActiveRobotTask->isPicked()) { m_pActiveRobotTask->place(); } unlock(); // æ£æµå°å½åææ£å¨ä¸åçä»»å¡ï¼ç¡®ä¿å½åä»»å¡å®ææä¸æ¢åç»§ç» // LOGI("æ£æµå°å½åææ£å¨ä¸åçä»»å¡ï¼ç¡®ä¿å½åä»»å¡å®ææä¸æ¢åç»§ç»..."); continue; } // Measurement -> LoadPort for (int s = 0; s < 4; s++) { PortType pt = pLoadPorts[s]->getPortType(); if (!rmd.armState[0] && pLoadPorts[s]->isEnable() && (pt == PortType::Unloading || pt == PortType::Both) && pLoadPorts[s]->getPortStatus() == PORT_INUSE) { for (int slot = 0; slot < SLOT_MAX; slot++) { m_pActiveRobotTask = createTransferTask_continuous_transfer(pMeasurement, 0, pLoadPorts[s], slot); if (m_pActiveRobotTask != nullptr) { goto CT_PORT_PUT; } } } } CT_PORT_PUT: CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask); // BakeCooling ->Measurement if (!rmd.armState[0]) { m_pActiveRobotTask = createTransferTask_continuous_transfer(pBakeCooling, 3, pMeasurement, 0); CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask); } // BakeCoolingå é¨ if (!rmd.armState[0]) { m_pActiveRobotTask = createTransferTask_continuous_transfer(pBakeCooling, 2, pBakeCooling, 3); CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask); } if (!rmd.armState[0]) { m_pActiveRobotTask = createTransferTask_continuous_transfer(pBakeCooling, 1, pBakeCooling, 2); CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask); } if (!rmd.armState[0]) { m_pActiveRobotTask = createTransferTask_continuous_transfer(pBakeCooling, 0, pBakeCooling, 1); CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask); } // Bonder2 -> BakeCooling if (!rmd.armState[0]) { m_pActiveRobotTask = createTransferTask_continuous_transfer(pBonder2, 0, pBakeCooling, 0); CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask); } // Bonder1 -> Bonder2 if (!rmd.armState[0] && !pBonder2->hasBondClass()) { m_pActiveRobotTask = createTransferTask_continuous_transfer(pBonder1, 0, pBonder2, 0); CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask); } // VacuumBake(G1) -> Bonder1 if (!rmd.armState[0] && !pBonder1->hasBondClass()) { m_pActiveRobotTask = createTransferTask_continuous_transfer(pVacuumBake, 0, pBonder1, 0); CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask); } // Fliper(G2) -> VacuumBake(G1) if (!rmd.armState[0]) { m_pActiveRobotTask = createTransferTask_continuous_transfer(pFliper, 0, pVacuumBake, 0); CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask); } // Aligner -> Fliper(G2) if (!rmd.armState[1]) { m_pActiveRobotTask = createTransferTask_continuous_transfer(pAligner, 0, pFliper, 0); CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask); } // LoadPort -> Aligner for (int s = 0; s < 4; s++) { PortType pt = pLoadPorts[s]->getPortType(); if (!rmd.armState[0] && pLoadPorts[s]->isEnable() && (pt == PortType::Loading || pt == PortType::Both) && pLoadPorts[s]->getPortStatus() == PORT_INUSE) { for (int slot = 0; slot < SLOT_MAX; slot++) { m_pActiveRobotTask = createTransferTask_continuous_transfer(pLoadPorts[s], slot, pAligner, 0); if (m_pActiveRobotTask != nullptr) { pEFEM->setContext(m_pActiveRobotTask->getContext()); goto CT_PORT_GET; } } } } CT_PORT_GET: CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask); unlock(); continue; } unlock(); } @@ -1426,6 +1571,31 @@ return pTask; } CRobotTask* CMaster::createTransferTask_continuous_transfer(CEquipment* pSrcEq, int nSrcSlot, CEquipment* pTarEq, int nTarSlot, int armNo/* = 1*/) { if (!pSrcEq->IsEnabled()) { return nullptr; } if (!pTarEq->IsEnabled()) { return nullptr; } CRobotTask* pTask = nullptr; CSlot* pTarSlot = pTarEq->isSlotAvailable(nTarSlot); CSlot* pSrcSlot = pSrcEq->getProcessedSlotCt(nSrcSlot); if (pSrcSlot != nullptr && nullptr != pTarSlot) { pTask = new CRobotTask(); pTask->setContext(pSrcSlot->getContext()); pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM)); taskSeqNo = pTask->setRobotTransferParam(taskSeqNo, armNo, pSrcSlot->getPosition(), pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo()); } return pTask; } int CMaster::abortCurrentTask() { lock(); SourceCode/Bond/Servo/CMaster.h
@@ -20,6 +20,7 @@ READY = 0, STARTING, RUNNING, RUNNING_CONTINUOUS_TRANSFER, STOPPING, MSERROR }; @@ -57,6 +58,7 @@ int init(); int term(); int start(); int startContinuousTransfer(); int stop(); void clearError(); ULONGLONG getRunTime(); @@ -107,6 +109,8 @@ CRobotTask* createTransferTask_bake_to_cooling(CEquipment* pSrcEq); CRobotTask* createTransferTask_bakecooling_to_measurement(CEquipment* pSrcEq, CEquipment* pTarEq); CRobotTask* createTransferTask_restore(CEquipment* pEqSrc, CLoadPort** pPorts); CRobotTask* createTransferTask_continuous_transfer(CEquipment* pSrcEq, int nSrcSlot, CEquipment* pTarEq, int nTarSlot, int armNo = 1); private: CRITICAL_SECTION m_criticalSection; @@ -115,6 +119,7 @@ std::list<CEquipment*> m_listEquipment; std::string m_strFilepath; BOOL m_bDataModify; bool m_bContinuousTransfer; private: /* çæ§æ¯ç¹ä½ç线ç¨*/ SourceCode/Bond/Servo/Servo.rcBinary files differ
SourceCode/Bond/Servo/ServoDlg.cpp
@@ -189,6 +189,7 @@ SERVO::MASTERSTATE state = theApp.m_model.getMaster().getState(); if (state == SERVO::MASTERSTATE::READY) { m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(TRUE); m_pTopToolbar->GetBtn(IDC_BUTTON_RUN_CT)->EnableWindow(TRUE); m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(FALSE); m_pMyStatusbar->setBackgroundColor(STATUSBAR_BK_NORMAL); m_pMyStatusbar->setForegroundColor(RGB(0, 0, 0)); @@ -204,13 +205,15 @@ } else if (state == SERVO::MASTERSTATE::MSERROR) { m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(TRUE); m_pTopToolbar->GetBtn(IDC_BUTTON_RUN_CT)->EnableWindow(TRUE); m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(FALSE); m_pMyStatusbar->setBackgroundColor(STATUSBAR_BK_ALARM); m_pMyStatusbar->setForegroundColor(RGB(0, 0, 0)); m_pMyStatusbar->setRunTimeText("å¯å¨å¤±è´¥."); } else if (state == SERVO::MASTERSTATE::RUNNING) { else if (state == SERVO::MASTERSTATE::RUNNING || state == SERVO::MASTERSTATE::RUNNING_CONTINUOUS_TRANSFER) { m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(FALSE); m_pTopToolbar->GetBtn(IDC_BUTTON_RUN_CT)->EnableWindow(FALSE); m_pTopToolbar->GetBtn(IDC_BUTTON_STOP)->EnableWindow(TRUE); m_pMyStatusbar->setBackgroundColor(STATUSBAR_BK_RUNNING); m_pMyStatusbar->setForegroundColor(RGB(255, 255, 255)); @@ -937,6 +940,18 @@ else { if (theApp.m_model.getMaster().start() == 0) { m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(FALSE); m_pTopToolbar->GetBtn(IDC_BUTTON_RUN_CT)->EnableWindow(FALSE); } } } else if (id == IDC_BUTTON_RUN_CT) { if (theApp.m_model.getMaster().getState() == SERVO::MASTERSTATE::MSERROR) { AfxMessageBox("å½åææºå°åçé误ï¼ä¸è½å¯å¨ï¼è¯·ç¡®è®¤è§£å³é®é¢ååå°è¯éæ°å¯å¨ï¼"); } else { if (theApp.m_model.getMaster().startContinuousTransfer() == 0) { m_pTopToolbar->GetBtn(IDC_BUTTON_RUN)->EnableWindow(FALSE); m_pTopToolbar->GetBtn(IDC_BUTTON_RUN_CT)->EnableWindow(FALSE); } } } @@ -1057,6 +1072,9 @@ if (state == SERVO::MASTERSTATE::RUNNING) { strText.Format(_T("æ£å¨è¿è¡ï¼%02d:%02d:%02d %s"), h, m, s, pszSuffix); } else if (state == SERVO::MASTERSTATE::RUNNING_CONTINUOUS_TRANSFER) { strText.Format(_T("åä¼ æ¨¡å¼ï¼%02d:%02d:%02d %s"), h, m, s, pszSuffix); } else { strText.Format(_T("å·²è¿è¡ï¼%02d:%02d:%02d %s"), h, m, s, pszSuffix); } SourceCode/Bond/Servo/TopToolbar.cpp
@@ -27,6 +27,7 @@ { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_BUTTON_RUN, m_btnRun); DDX_Control(pDX, IDC_BUTTON_RUN_CT, m_btnRunCt); DDX_Control(pDX, IDC_BUTTON_STOP, m_btnStop); DDX_Control(pDX, IDC_BUTTON_ALARM, m_btnAlarm); DDX_Control(pDX, IDC_BUTTON_SETTINGS, m_btnSettings); @@ -52,6 +53,7 @@ CDialogEx::OnInitDialog(); InitBtn(m_btnRun, "Run_High_32.ico", "Run_Gray_32.ico"); InitBtn(m_btnRunCt, "RunCt_High_32.ico", "RunCt_Gray_32.ico"); InitBtn(m_btnStop, "Stop_High_32.ico", "Stop_Gray_32.ico"); InitBtn(m_btnAlarm, "Alarm_o_32.ico", "Alarm_gray_32.ico"); InitBtn(m_btnSettings, "Settings_High_32.ico", "Settings_Gray_32.ico"); @@ -112,6 +114,11 @@ int x = 2, y = 3; pItem = GetDlgItem(IDC_BUTTON_RUN); pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); x += BTN_WIDTH; x += 2; pItem = GetDlgItem(IDC_BUTTON_RUN_CT); pItem->MoveWindow(x, y, BTN_WIDTH, nBthHeight); x += BTN_WIDTH; x += 2; @@ -190,6 +197,7 @@ { switch (LOWORD(wParam)) { case IDC_BUTTON_RUN: case IDC_BUTTON_RUN_CT: case IDC_BUTTON_STOP: case IDC_BUTTON_ALARM: case IDC_BUTTON_SETTINGS: SourceCode/Bond/Servo/TopToolbar.h
@@ -31,6 +31,7 @@ private: CBlButton m_btnRun; CBlButton m_btnRunCt; CBlButton m_btnStop; CBlButton m_btnAlarm; CBlButton m_btnSettings; SourceCode/Bond/Servo/resource.hBinary files differ
SourceCode/Bond/x64/Debug/Res/RunCt_Gray_32.ico
SourceCode/Bond/x64/Debug/Res/RunCt_High_32.ico