| SourceCode/Bond/Servo/CAligner.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CBakeCooling.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CFliper.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CLoadPort.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CMaster.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CMaster.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CPageGraph2.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CPageGraph2.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/CVacuumBake.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/Common.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/EqsGraphWnd.cpp | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| SourceCode/Bond/Servo/EqsGraphWnd.h | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
SourceCode/Bond/Servo/CAligner.cpp
@@ -33,6 +33,10 @@ { // 加入Pin初始化代码 LOGI("<CAligner>initPins"); addPin(SERVO::PinType::INPUT, _T("In1")); addPin(SERVO::PinType::INPUT, _T("In2")); addPin(SERVO::PinType::OUTPUT, _T("Out1")); addPin(SERVO::PinType::OUTPUT, _T("Out2")); } void CAligner::onTimer(UINT nTimerid) SourceCode/Bond/Servo/CBakeCooling.cpp
@@ -33,6 +33,10 @@ { // 加入Pin初始化代码 LOGI("<CBakeCooling>initPins"); addPin(SERVO::PinType::INPUT, _T("In1")); addPin(SERVO::PinType::INPUT, _T("In2")); addPin(SERVO::PinType::OUTPUT, _T("Out1")); addPin(SERVO::PinType::OUTPUT, _T("Out2")); } void CBakeCooling::onTimer(UINT nTimerid) SourceCode/Bond/Servo/CFliper.cpp
@@ -33,6 +33,9 @@ { // 加入Pin初始化代码 LOGI("<CFliper>initPins"); addPin(SERVO::PinType::INPUT, _T("In1")); addPin(SERVO::PinType::INPUT, _T("In2")); addPin(SERVO::PinType::OUTPUT, _T("Out")); } void CFliper::onTimer(UINT nTimerid) SourceCode/Bond/Servo/CLoadPort.cpp
@@ -35,7 +35,8 @@ // 加入Pin初始化代码 LOGI("<CLoadPort>initPins"); addPin(SERVO::PinType::INPUT, _T("In")); addPin(SERVO::PinType::OUTPUT, _T("Out")); addPin(SERVO::PinType::OUTPUT, _T("Out1")); addPin(SERVO::PinType::OUTPUT, _T("Out2")); } void CLoadPort::onTimer(UINT nTimerid) SourceCode/Bond/Servo/CMaster.cpp
@@ -76,9 +76,13 @@ addLoadPort(1, listener); addLoadPort(2, listener); addLoadPort(3, listener); addFliper(listener); addVacuumBake(listener); addAligner(listener); addEFEM(listener); addBonder(0, listener); addBonder(1, listener); addBakeCooling(listener); connectEquipments(); @@ -155,6 +159,57 @@ LOGE("已添加“%s”.", pEquipment->getName().c_str()); return 0; } int CMaster::addFliper(StepListener& listener) { CFliper* pEquipment = new CFliper(); pEquipment->setID(EQ_ID_FLIPER); pEquipment->setBaseAlarmId(BASE_ALARM_EFEM); pEquipment->setName("Fliper"); pEquipment->setDescription("Fliper."); pEquipment->setReadBitBlock(0x4000, 0x45ff); pEquipment->setStation(0, 255); addToEquipmentList(pEquipment); pEquipment->init(); LOGE("已添加“Fliper”."); return 0; } int CMaster::addVacuumBake(StepListener& listener) { CVacuumBake* pEquipment = new CVacuumBake(); pEquipment->setID(EQ_ID_VACUUMBAKE); pEquipment->setBaseAlarmId(BASE_ALARM_EFEM); pEquipment->setName("VacuumBake"); pEquipment->setDescription("VacuumBake."); pEquipment->setReadBitBlock(0x4000, 0x45ff); pEquipment->setStation(0, 255); addToEquipmentList(pEquipment); pEquipment->init(); LOGE("已添加“VacuumBake”."); return 0; } int CMaster::addAligner(StepListener& listener) { CAligner* pEquipment = new CAligner(); pEquipment->setID(EQ_ID_ALIGNER); pEquipment->setBaseAlarmId(BASE_ALARM_EFEM); pEquipment->setName("Aligner"); pEquipment->setDescription("Aligner."); pEquipment->setReadBitBlock(0x4000, 0x45ff); pEquipment->setStation(0, 255); addToEquipmentList(pEquipment); pEquipment->init(); LOGE("已添加“Aligner”."); return 0; } @@ -474,6 +529,23 @@ return 0; } int CMaster::addBakeCooling(StepListener& listener) { CBakeCooling* pEquipment = new CBakeCooling(); pEquipment->setID(EQ_ID_BAKE_COOLING); pEquipment->setBaseAlarmId(BASE_ALARM_EFEM); pEquipment->setName("BakeCooling"); pEquipment->setDescription("BakeCooling."); pEquipment->setReadBitBlock(0x4000, 0x45ff); pEquipment->setStation(0, 255); addToEquipmentList(pEquipment); pEquipment->init(); LOGE("已添加“Aligner”."); return 0; } void CMaster::onTimer(UINT nTimerid) { for (auto item : m_listEquipment) { @@ -501,15 +573,74 @@ void CMaster::connectEquipments() { int nRet; CLoadPort* pLoadPort1 = (CLoadPort*)getEquipment(EQ_ID_LOADPORT1); CLoadPort* pLoadPort2 = (CLoadPort*)getEquipment(EQ_ID_LOADPORT2); CLoadPort* pLoadPort3 = (CLoadPort*)getEquipment(EQ_ID_LOADPORT3); CLoadPort* pLoadPort4 = (CLoadPort*)getEquipment(EQ_ID_LOADPORT4); CFliper* pFliper = (CFliper*)getEquipment(EQ_ID_FLIPER); CVacuumBake* pVacuumBake = (CVacuumBake*)getEquipment(EQ_ID_VACUUMBAKE); CAligner* pAligner = (CAligner*)getEquipment(EQ_ID_ALIGNER); CBonder* pBonder1 = (CBonder*)getEquipment(EQ_ID_Bonder1); CBonder* pBonder2 = (CBonder*)getEquipment(EQ_ID_Bonder2); CBakeCooling* pBakeCooling = (CBakeCooling*)getEquipment(EQ_ID_BAKE_COOLING); int nRet = pLoadPort1->getPin("Out")->connectPin(pBonder1->getPin("In")); nRet = pLoadPort1->getPin("Out1")->connectPin(pFliper->getPin("In1")); if (nRet < 0) { AfxMessageBox("连接失败"); LOGE("连接LoadPort1-Fliper失败"); } else { // AfxMessageBox("连接成功"); nRet = pLoadPort2->getPin("Out1")->connectPin(pFliper->getPin("In2")); if (nRet < 0) { LOGE("连接LoadPort1-Fliper失败"); } nRet = pLoadPort1->getPin("Out2")->connectPin(pVacuumBake->getPin("In1")); if (nRet < 0) { LOGE("连接LoadPort1-VacuumBake失败"); } nRet = pLoadPort2->getPin("Out2")->connectPin(pVacuumBake->getPin("In2")); if (nRet < 0) { LOGE("连接LoadPort1-VacuumBake失败"); } nRet = pFliper->getPin("Out")->connectPin(pAligner->getPin("In1")); if (nRet < 0) { LOGE("连接Fliper-Aligner失败"); } nRet = pVacuumBake->getPin("Out")->connectPin(pAligner->getPin("In2")); if (nRet < 0) { LOGE("连接VacuumBake-Aligner失败"); } nRet = pAligner->getPin("Out1")->connectPin(pBonder1->getPin("In")); if (nRet < 0) { LOGE("连接Aligner-Bondere1失败"); } nRet = pAligner->getPin("Out2")->connectPin(pBonder2->getPin("In")); if (nRet < 0) { LOGE("连接Aligner-Bondere2失败"); } nRet = pBonder1->getPin("Out")->connectPin(pBakeCooling->getPin("In1")); if (nRet < 0) { LOGE("连接Bonder1-BakeCooling失败"); } nRet = pBonder2->getPin("Out")->connectPin(pBakeCooling->getPin("In2")); if (nRet < 0) { LOGE("连接Bonder2-BakeCooling失败"); } nRet = pBakeCooling->getPin("Out1")->connectPin(pLoadPort3->getPin("In")); if (nRet < 0) { LOGE("连接BakeCooling-LoadPort3失败"); } nRet = pBakeCooling->getPin("Out2")->connectPin(pLoadPort4->getPin("In")); if (nRet < 0) { LOGE("连接BakeCooling-LoadPort4失败"); } } } SourceCode/Bond/Servo/CMaster.h
@@ -4,6 +4,10 @@ #include "CEFEM.h" #include "CBonder.h" #include "CLoadPort.h" #include "CFliper.h" #include "CAligner.h" #include "CVacuumBake.h" #include "CBakeCooling.h" #include "CCLinkIEControl.h" @@ -35,8 +39,12 @@ private: int addToEquipmentList(CEquipment* pEquipment); int addLoadPort(int index, StepListener& listener); int addFliper(StepListener& listener); int addVacuumBake(StepListener& listener); int addAligner(StepListener& listener); int addEFEM(StepListener& listener); int addBonder(int index, StepListener& listener); int addBakeCooling(StepListener& listener); void connectEquipments(); SourceCode/Bond/Servo/CPageGraph2.cpp
@@ -133,6 +133,7 @@ void CPageGraph2::OnDestroy() { CDialogEx::OnDestroy(); SaveEqsGraphData(); if (m_hbrBkgnd != nullptr) { ::DeleteObject(m_hbrBkgnd); @@ -154,8 +155,15 @@ #define OUTPIN 2 void CPageGraph2::AddEqToGraphWnd(SERVO::CEquipment* pEquipment) { int x, y; GetItemDataFormIni(pEquipment->getName().c_str(), x, y); EQITEM* pItem = m_pEqsGraphWnd->AddItem(0, pEquipment->getName().c_str(), (DWORD_PTR)pEquipment); m_pEqsGraphWnd->SetItemType(pItem, ITEM_SMALL); if (x > 0 && y > 0) { m_pEqsGraphWnd->SetItemPos(pItem, x, y); } std::vector<SERVO::CPin*>& inPins = pEquipment->getInputPins(); for (auto inPin : inPins) { m_pEqsGraphWnd->AddPin(pItem, INPIN, inPin->getName().c_str(), (DWORD_PTR)inPin); @@ -172,10 +180,47 @@ if (1 == nIDEvent) { KillTimer(1); std::list<SERVO::CEquipment*>& eqs = theApp.m_model.m_master.getEquipmentList(); for (auto item : eqs) { AddEqToGraphWnd(item); for (auto eq : eqs) { AddEqToGraphWnd(eq); } for (auto eq : eqs) { auto& pins = eq->getOutputPins(); for (auto pin : pins) { SERVO::CPin* pPin2 = pin->getConnectedPin(); if (pPin2 != nullptr) { m_pEqsGraphWnd->ConnectPin((DWORD_PTR)eq, (DWORD_PTR)pin, (DWORD_PTR)pPin2->getEquipment(), (DWORD_PTR)pPin2); } } } } CDialogEx::OnTimer(nIDEvent); } void CPageGraph2::SaveEqsGraphData() { char szFilepath[MAX_PATH]; CString strValue; sprintf_s(szFilepath, MAX_PATH, "%s\\EqsGraph.ini", (LPTSTR)(LPCTSTR)theApp.m_strAppDir); std::list<SERVO::CEquipment*>& eqs = theApp.m_model.m_master.getEquipmentList(); for (auto item : eqs) { EQITEM* pEqItem = m_pEqsGraphWnd->GetItem((DWORD_PTR)item); strValue.Format(_T("%d"), pEqItem->rect.left); WritePrivateProfileString(item->getName().c_str(), _T("Left"), (LPTSTR)(LPCTSTR)strValue, szFilepath); strValue.Format(_T("%d"), pEqItem->rect.top); WritePrivateProfileString(item->getName().c_str(), _T("Top"), (LPTSTR)(LPCTSTR)strValue, szFilepath); } } void CPageGraph2::GetItemDataFormIni(const char* pszItemName, int& left, int& top) { char szFilepath[MAX_PATH]; CString strValue; sprintf_s(szFilepath, MAX_PATH, "%s\\EqsGraph.ini", (LPTSTR)(LPCTSTR)theApp.m_strAppDir); left = GetPrivateProfileInt(pszItemName, _T("Left"), 0, szFilepath); top = GetPrivateProfileInt(pszItemName, _T("Top"), 0, szFilepath); } SourceCode/Bond/Servo/CPageGraph2.h
@@ -15,6 +15,8 @@ private: void AddEqToGraphWnd(SERVO::CEquipment* pEquipment); void SaveEqsGraphData(); void GetItemDataFormIni(const char* pszItemName, int& left, int& top); private: CEqsGraphWnd* m_pEqsGraphWnd; SourceCode/Bond/Servo/CVacuumBake.cpp
@@ -33,6 +33,9 @@ { // 加入Pin初始化代码 LOGI("<CVacuumBake>initPins"); addPin(SERVO::PinType::INPUT, _T("In1")); addPin(SERVO::PinType::INPUT, _T("In2")); addPin(SERVO::PinType::OUTPUT, _T("Out")); } void CVacuumBake::onTimer(UINT nTimerid) SourceCode/Bond/Servo/Common.h
@@ -57,6 +57,10 @@ #define EQ_ID_LOADPORT2 5 #define EQ_ID_LOADPORT3 6 #define EQ_ID_LOADPORT4 7 #define EQ_ID_FLIPER 8 #define EQ_ID_VACUUMBAKE 9 #define EQ_ID_ALIGNER 10 #define EQ_ID_BAKE_COOLING 11 /* step name */ SourceCode/Bond/Servo/EqsGraphWnd.cpp
@@ -649,6 +649,27 @@ ::InvalidateRect(m_hWnd, &pItem->rect, TRUE); } void CEqsGraphWnd::SetItemPos(EQITEM* pItem, int x, int y) { ASSERT(pItem); pItem->rect.left = x; pItem->rect.top = y; if (pItem->nShowType == ITEM_SMALL) { pItem->rect.right = pItem->rect.left + ITEM_CX_SMALL; pItem->rect.bottom = pItem->rect.top + ITEM_CY_SMALL; } else if (pItem->nShowType == ITEM_LARGE) { pItem->rect.right = pItem->rect.left + ITEM_CX_LARGE; pItem->rect.bottom = pItem->rect.top + ITEM_CY_LARGE; } else { pItem->rect.right = pItem->rect.left + ITEM_CX_NORMAL; pItem->rect.bottom = pItem->rect.top + ITEM_CY_NORMAL; } ::InvalidateRect(m_hWnd, &pItem->rect, TRUE); } PIN * CEqsGraphWnd::AddPin(EQITEM* pItem, int nType, CString strName, DWORD_PTR dwData) { ASSERT(pItem); SourceCode/Bond/Servo/EqsGraphWnd.h
@@ -139,6 +139,7 @@ int ConnectPin(DWORD_PTR dwItem1Data, DWORD_PTR dwPin1Data, DWORD_PTR dwItem2Data, DWORD_PTR dwPin2Data); void SetItemText(EQITEM* pItem, CString strText); void SetItemType(EQITEM* pItem, int type); void SetItemPos(EQITEM* pItem, int x, int y); void FlashItem(EQITEM* pItem); void AnimationItem(EQITEM*pItem);