From c3f30f69f3da4e4ed018ba0307e64e327915d4ca Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期二, 22 七月 2025 13:41:24 +0800
Subject: [PATCH] 1. PPID配方绑定界面优化,动态控件获取窗口画笔
---
SourceCode/Bond/Servo/CMaster.cpp | 131 +++++++++++++++++++++++++++++++++++++------
1 files changed, 112 insertions(+), 19 deletions(-)
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 602cdf2..7ef3579 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -297,11 +297,12 @@
// 各种机器
+ CLoadPort* pLoadPorts[4];
CEFEM* pEFEM = (CEFEM*)getEquipment(EQ_ID_EFEM);
- 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);
+ pLoadPorts[0] = (CLoadPort*)getEquipment(EQ_ID_LOADPORT1);
+ pLoadPorts[1] = (CLoadPort*)getEquipment(EQ_ID_LOADPORT2);
+ pLoadPorts[2] = (CLoadPort*)getEquipment(EQ_ID_LOADPORT3);
+ pLoadPorts[3] = (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);
@@ -311,10 +312,10 @@
CMeasurement* pMeasurement = (CMeasurement*)getEquipment(EQ_ID_MEASUREMENT);
ASSERT(pEFEM);
- ASSERT(pLoadPort1);
- ASSERT(pLoadPort2);
- ASSERT(pLoadPort3);
- ASSERT(pLoadPort4);
+ ASSERT(pLoadPorts[0]);
+ ASSERT(pLoadPorts[1]);
+ ASSERT(pLoadPorts[2]);
+ ASSERT(pLoadPorts[3]);
ASSERT(pFliper);
ASSERT(pVacuumBake);
ASSERT(pAligner);
@@ -544,17 +545,16 @@
LOGI("Arm1 %s, Arm2 %s.", rmd.armState[0] ? _T("不可用") : _T("可用"),
rmd.armState[1] ? _T("不可用") : _T("可用"));
}
- CLoadPort* pEqLoadPort[] = { pLoadPort1, pLoadPort2, pLoadPort3, pLoadPort4 };
CEquipment* pEqTar[] = { pVacuumBake, pFliper };
if (primaryType == MaterialsType::G2) {
pEqTar[0] = pFliper;
pEqTar[1] = pVacuumBake;
}
for (int s = 0; s < 4; s++) {
- if (!rmd.armState[0] && pEqLoadPort[s]->isEnable()
- && pEqLoadPort[s]->getPortType() == PortType::Unloading
- && pEqLoadPort[s]->getPortMode() == PortMode::ReadyToUnload) {
- m_pActiveRobotTask = createTransferTask(pMeasurement, pEqLoadPort[s], primaryType, secondaryType);
+ if (!rmd.armState[0] && pLoadPorts[s]->isEnable()
+ && pLoadPorts[s]->getPortType() == PortType::Unloading
+ && pLoadPorts[s]->getPortMode() == PortMode::ReadyToUnload) {
+ m_pActiveRobotTask = createTransferTask(pMeasurement, pLoadPorts[s], primaryType, secondaryType);
if (m_pActiveRobotTask != nullptr) {
goto PORT_PUT;
}
@@ -572,6 +572,25 @@
LOGI("创建新任务<%s>...", strDescription.c_str());
continue;
}
+
+
+ // Measurement NG -> LoadPort
+ // NG回原位
+ if (!rmd.armState[1]) {
+ m_pActiveRobotTask = createTransferTask_restore(pMeasurement, pLoadPorts);
+ if (m_pActiveRobotTask != nullptr) {
+ m_pActiveRobotTask->pick();
+ std::string strDescription = m_pActiveRobotTask->getDescription();
+ unlock();
+ if (m_listener.onRobotTaskEvent != nullptr) {
+ m_listener.onRobotTaskEvent(this, m_pActiveRobotTask, ROBOT_EVENT_CREATE);
+ }
+ LOGI("创建Measurement回退任务<%s>...", strDescription.c_str());
+ continue;
+ }
+ }
+
+
// BakeCooling ->Measurement
@@ -727,12 +746,30 @@
}
}
+ // Aligner -> LoadPort
+ if (!rmd.armState[1]) {
+ m_pActiveRobotTask = createTransferTask_restore(pAligner, pLoadPorts);
+ if (m_pActiveRobotTask != nullptr) {
+ m_pActiveRobotTask->pick();
+ std::string strDescription = m_pActiveRobotTask->getDescription();
+ unlock();
+ if (m_listener.onRobotTaskEvent != nullptr) {
+ m_listener.onRobotTaskEvent(this, m_pActiveRobotTask, ROBOT_EVENT_CREATE);
+ }
+ LOGI("创建Aligner回退任务<%s>...", strDescription.c_str());
+ continue;
+ }
+ }
+
+
+
+
// LoadPort -> Aligner
for (int s = 0; s < 4; s++) {
- if (!rmd.armState[0] && pEqLoadPort[s]->isEnable()
- && pEqLoadPort[s]->getPortType() == PortType::Loading
- && pEqLoadPort[s]->getPortMode() == PortMode::ReadyToLoad) {
- m_pActiveRobotTask = createTransferTask(pEqLoadPort[s], pAligner, primaryType, secondaryType);
+ if (!rmd.armState[0] && pLoadPorts[s]->isEnable()
+ && pLoadPorts[s]->getPortType() == PortType::Loading
+ && pLoadPorts[s]->getPortMode() == PortMode::ReadyToLoad) {
+ m_pActiveRobotTask = createTransferTask(pLoadPorts[s], pAligner, primaryType, secondaryType);
if (m_pActiveRobotTask != nullptr) {
pEFEM->setContext(m_pActiveRobotTask->getContext());
goto PORT_GET;
@@ -835,7 +872,7 @@
if (m_pActiveRobotTask != nullptr) {
if (m_pActiveRobotTask->getSrcPosition() == p->getID()) {
CGlass* pGlass = p->getGlassFromSlot(m_pActiveRobotTask->getSrcSlot());
- if (pGlass != nullptr && port == m_pActiveRobotTask->getSrcSlot()) {
+ if (pGlass != nullptr) {
CJobDataS* pJobDataS = pGlass->getJobDataS();
if (pJobDataS != nullptr
&& pJobDataS->getCassetteSequenceNo() == pJobDataB->getCassetteSequenceNo()
@@ -879,7 +916,7 @@
else if (m_pActiveRobotTask->isPlacing() &&
m_pActiveRobotTask->getTarPosition() == p->getID()) {
CGlass* pGlass = p->getGlassFromSlot(m_pActiveRobotTask->getTarSlot());
- if (pGlass == nullptr && m_pActiveRobotTask->getTarSlot() == port) {
+ if (pGlass == nullptr) {
bOk = TRUE;
slot = m_pActiveRobotTask->getTarSlot();
LOGI("<CMaster>onPreFethedOutJob, 已校验数据一致性.");
@@ -974,6 +1011,10 @@
};
listener.onProcessStateChanged = [&](void* pEquipment, PROCESS_STATE state) -> void {
LOGI("<Master>onProcessStateChanged<%d>", (int)state);
+ };
+ listener.onMapMismatch = [&](void* pEquipment, short scanMap, short downMap) {
+ LOGE("<Master-%s>Port InUse, map(%d!=%d)不一致,请检查。",
+ ((CEquipment*)pEquipment)->getName().c_str(), scanMap, downMap);
};
pEquipment->setListener(listener);
pEquipment->setCcLink(&m_cclink);
@@ -1368,6 +1409,10 @@
MaterialsType primaryType/* = MaterialsType::G1*/, MaterialsType secondaryType/* = MaterialsType::G2*/,
int armNo/* = 1*/)
{
+ if (!pSrcEq->IsEnabled()) {
+ return nullptr;
+ }
+
CRobotTask* pTask = nullptr;
CSlot* pSrcSlot, * pTarSlot;
pTarSlot = pTarEq->getAvailableSlotForGlass(primaryType);
@@ -1392,6 +1437,10 @@
CRobotTask* CMaster::createTransferTask_bonder_to_bakecooling(CEquipment* pSrcEq, CEquipment* pTarEq)
{
+ if (!pSrcEq->IsEnabled()) {
+ return nullptr;
+ }
+
std::vector<int> slots = {1, 3};
CRobotTask* pTask = nullptr;
@@ -1413,6 +1462,10 @@
CRobotTask* CMaster::createTransferTask_bake_to_cooling(CEquipment* pSrcEq)
{
+ if (!pSrcEq->IsEnabled()) {
+ return nullptr;
+ }
+
std::vector<int> slotsTar = { 2, 4 };
std::vector<int> slotsSrc = { 1, 3 };
@@ -1435,6 +1488,10 @@
CRobotTask* CMaster::createTransferTask_bakecooling_to_measurement(CEquipment* pSrcEq, CEquipment* pTarEq)
{
+ if (!pSrcEq->IsEnabled()) {
+ return nullptr;
+ }
+
std::vector<int> slots = { 2, 4 };
CRobotTask* pTask = nullptr;
@@ -1454,6 +1511,42 @@
return pTask;
}
+ CRobotTask* CMaster::createTransferTask_restore(CEquipment* pEqSrc, CLoadPort** pPorts)
+ {
+ if (!pEqSrc->IsEnabled()) {
+ return nullptr;
+ }
+
+ CRobotTask* pTask = nullptr;
+ CSlot* pSrcSlot, * pTarSlot = nullptr, * pTempSlot;
+ pSrcSlot = pEqSrc->getInspFailSlot();
+ if (pSrcSlot != nullptr) {
+ CGlass* pGlass = (CGlass*)pSrcSlot->getContext();
+ ASSERT(pGlass);
+ int port, slot;
+ pGlass->getOrginPort(port, slot);
+ pGlass->setInspResult(pPorts[port]->getID(), 0, InspResult::Fail);
+ ASSERT(0 <= port && port < 4);
+ ASSERT(0 <= slot && slot < 8);
+ pTempSlot = pPorts[port]->getSlot(slot);
+ if (pTempSlot->getContext() == nullptr) {
+ pTarSlot = pTempSlot;
+ }
+ }
+
+
+ if (pSrcSlot != nullptr && nullptr != pTarSlot) {
+ pTask = new CRobotTask();
+ pTask->setContext(pSrcSlot->getContext());
+ pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
+ taskSeqNo = pTask->setRobotTransferParam(taskSeqNo, 1, pSrcSlot->getPosition(),
+ pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
+ }
+
+
+ return pTask;
+ }
+
int CMaster::abortCurrentTask()
{
lock();
--
Gitblit v1.9.3