From 4eaefee05c987e352dd6d761e601aa450f7f92b4 Mon Sep 17 00:00:00 2001
From: LAPTOP-SNT8I5JK\Boounion <Chenluhua@qq.com>
Date: 星期五, 21 三月 2025 14:41:46 +0800
Subject: [PATCH] 1.添加其它机器并连接,显示连接图;
---
SourceCode/Bond/Servo/CPageGraph2.cpp | 49 +++++++++
SourceCode/Bond/Servo/EqsGraphWnd.h | 1
SourceCode/Bond/Servo/EqsGraphWnd.cpp | 21 ++++
SourceCode/Bond/Servo/CPageGraph2.h | 2
SourceCode/Bond/Servo/CVacuumBake.cpp | 3
SourceCode/Bond/Servo/CAligner.cpp | 4
SourceCode/Bond/Servo/CFliper.cpp | 3
SourceCode/Bond/Servo/CMaster.cpp | 139 +++++++++++++++++++++++++++
SourceCode/Bond/Servo/CMaster.h | 8 +
SourceCode/Bond/Servo/CLoadPort.cpp | 3
SourceCode/Bond/Servo/CBakeCooling.cpp | 4
SourceCode/Bond/Servo/Common.h | 4
12 files changed, 234 insertions(+), 7 deletions(-)
diff --git a/SourceCode/Bond/Servo/CAligner.cpp b/SourceCode/Bond/Servo/CAligner.cpp
index cc10715..f96229e 100644
--- a/SourceCode/Bond/Servo/CAligner.cpp
+++ b/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)
diff --git a/SourceCode/Bond/Servo/CBakeCooling.cpp b/SourceCode/Bond/Servo/CBakeCooling.cpp
index deac272..92aea69 100644
--- a/SourceCode/Bond/Servo/CBakeCooling.cpp
+++ b/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)
diff --git a/SourceCode/Bond/Servo/CFliper.cpp b/SourceCode/Bond/Servo/CFliper.cpp
index 8858147..0b6c578 100644
--- a/SourceCode/Bond/Servo/CFliper.cpp
+++ b/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)
diff --git a/SourceCode/Bond/Servo/CLoadPort.cpp b/SourceCode/Bond/Servo/CLoadPort.cpp
index 71169c4..5b54636 100644
--- a/SourceCode/Bond/Servo/CLoadPort.cpp
+++ b/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)
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 63a8e25..8c4f87d 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/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失败");
}
}
}
diff --git a/SourceCode/Bond/Servo/CMaster.h b/SourceCode/Bond/Servo/CMaster.h
index d73535e..12b8de3 100644
--- a/SourceCode/Bond/Servo/CMaster.h
+++ b/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();
diff --git a/SourceCode/Bond/Servo/CPageGraph2.cpp b/SourceCode/Bond/Servo/CPageGraph2.cpp
index aa1cd73..83c2471 100644
--- a/SourceCode/Bond/Servo/CPageGraph2.cpp
+++ b/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);
+}
\ No newline at end of file
diff --git a/SourceCode/Bond/Servo/CPageGraph2.h b/SourceCode/Bond/Servo/CPageGraph2.h
index c587ab6..a90ca36 100644
--- a/SourceCode/Bond/Servo/CPageGraph2.h
+++ b/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;
diff --git a/SourceCode/Bond/Servo/CVacuumBake.cpp b/SourceCode/Bond/Servo/CVacuumBake.cpp
index 41dee7d..b22f52f 100644
--- a/SourceCode/Bond/Servo/CVacuumBake.cpp
+++ b/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)
diff --git a/SourceCode/Bond/Servo/Common.h b/SourceCode/Bond/Servo/Common.h
index 939e474..3860990 100644
--- a/SourceCode/Bond/Servo/Common.h
+++ b/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 */
diff --git a/SourceCode/Bond/Servo/EqsGraphWnd.cpp b/SourceCode/Bond/Servo/EqsGraphWnd.cpp
index 46aa8a4..9c0af84 100644
--- a/SourceCode/Bond/Servo/EqsGraphWnd.cpp
+++ b/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);
diff --git a/SourceCode/Bond/Servo/EqsGraphWnd.h b/SourceCode/Bond/Servo/EqsGraphWnd.h
index e275896..1c4ff41 100644
--- a/SourceCode/Bond/Servo/EqsGraphWnd.h
+++ b/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);
--
Gitblit v1.9.3