From a8fb417ef1fb696723c8b8d5a340e8ca2e0312ae Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期六, 09 八月 2025 10:43:17 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang
---
SourceCode/Bond/Servo/CMaster.cpp | 138 ++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 121 insertions(+), 17 deletions(-)
diff --git a/SourceCode/Bond/Servo/CMaster.cpp b/SourceCode/Bond/Servo/CMaster.cpp
index 6714999..455804a 100644
--- a/SourceCode/Bond/Servo/CMaster.cpp
+++ b/SourceCode/Bond/Servo/CMaster.cpp
@@ -55,6 +55,8 @@
m_bEnableEventReport = true;
m_bEnableAlarmReport = true;
m_bContinuousTransfer = false;
+ m_nContinuousTransferCount = 0;
+ m_nContinuousTransferStep = CTStep_begin;
InitializeCriticalSection(&m_criticalSection);
}
@@ -294,7 +296,7 @@
ULONGLONG CMaster::getRunTime()
{
- if (m_state == MASTERSTATE::RUNNING)
+ if (m_state == MASTERSTATE::RUNNING || m_state == MASTERSTATE::RUNNING_CONTINUOUS_TRANSFER)
return m_ullRunTime + (GetTickCount64() - m_ullStartTime);
else
return m_ullRunTime;
@@ -345,7 +347,7 @@
while (1) {
// 待退出信号或时间到
HANDLE hEvents[] = { m_hEventDispatchThreadExit[0], m_hDispatchEvent };
- int nRet = WaitForMultipleObjects(2, hEvents, FALSE, 1000);
+ int nRet = WaitForMultipleObjects(2, hEvents, FALSE, 500);
if (nRet == WAIT_OBJECT_0) {
break;
}
@@ -713,6 +715,7 @@
m_pActiveRobotTask = createTransferTask_continuous_transfer(pMeasurement,
0, pLoadPorts[s], slot);
if (m_pActiveRobotTask != nullptr) {
+ m_nContinuousTransferStep = CTStep_end;
goto CT_PORT_PUT;
}
}
@@ -727,6 +730,9 @@
if (!rmd.armState[0]) {
m_pActiveRobotTask = createTransferTask_continuous_transfer(pBakeCooling,
3, pMeasurement, 0);
+ if (m_pActiveRobotTask != nullptr) {
+ LOGI("<ContinuousTransfer>千传测试,开始搬送任务(BakeCooling -> Measurement)...");
+ }
CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask);
}
@@ -735,44 +741,75 @@
if (!rmd.armState[0]) {
m_pActiveRobotTask = createTransferTask_continuous_transfer(pBakeCooling,
2, pBakeCooling, 3);
+ if (m_pActiveRobotTask != nullptr) {
+ LOGI("<ContinuousTransfer>千传测试,开始搬送任务(BakeCooling-2 -> BakeCooling-3)...");
+ }
CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask);
}
if (!rmd.armState[0]) {
m_pActiveRobotTask = createTransferTask_continuous_transfer(pBakeCooling,
1, pBakeCooling, 2);
+ if (m_pActiveRobotTask != nullptr) {
+ LOGI("<ContinuousTransfer>千传测试,开始搬送任务(BakeCooling-1 -> BakeCooling-2)...");
+ }
CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask);
}
if (!rmd.armState[0]) {
m_pActiveRobotTask = createTransferTask_continuous_transfer(pBakeCooling,
0, pBakeCooling, 1);
+ if (m_pActiveRobotTask != nullptr) {
+ LOGI("<ContinuousTransfer>千传测试,开始搬送任务(BakeCooling-0 -> BakeCooling-1)...");
+ }
CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask);
}
- // Bonder2 -> BakeCooling
+ // VacuumBake(G1) -> BakeCooling
+ if (!rmd.armState[0]) {
+ m_pActiveRobotTask = createTransferTask_continuous_transfer(pVacuumBake,
+ 1, pBakeCooling, 0);
+ if (m_pActiveRobotTask != nullptr) {
+ LOGI("<ContinuousTransfer>千传测试,开始搬送任务(VacuumBake(G1) -> BakeCooling)...");
+ }
+ CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask);
+ }
+
+ // VacuumBake(G1) -> VacuumBake(G1)
+ if (!rmd.armState[0]) {
+ m_pActiveRobotTask = createTransferTask_continuous_transfer(pVacuumBake,
+ 0, pVacuumBake, 1);
+ if (m_pActiveRobotTask != nullptr) {
+ LOGI("<ContinuousTransfer>千传测试,开始搬送任务(VacuumBake(G1-0) -> VacuumBake(G1-1))...");
+ }
+ CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask);
+ }
+
+ // Bonder2 -> VacuumBake(G1)
if (!rmd.armState[0]) {
m_pActiveRobotTask = createTransferTask_continuous_transfer(pBonder2,
- 0, pBakeCooling, 0);
+ 1, pVacuumBake, 0);
+ if (m_pActiveRobotTask != nullptr) {
+ LOGI("<ContinuousTransfer>千传测试,开始搬送任务(Bonder2 -> VacuumBake(G1))...");
+ }
CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask);
}
-
+
// Bonder1 -> Bonder2
if (!rmd.armState[0] && !pBonder2->hasBondClass()) {
m_pActiveRobotTask = createTransferTask_continuous_transfer(pBonder1,
- 0, pBonder2, 0);
+ 1, pBonder2, 1);
+ if (m_pActiveRobotTask != nullptr) {
+ LOGI("<ContinuousTransfer>千传测试,开始搬送任务(Bonder1 -> Bonder2)...");
+ }
CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask);
}
- // VacuumBake(G1) -> Bonder1
+ // Fliper(G2) -> 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);
+ 0, pBonder1, 1, 2);
+ if (m_pActiveRobotTask != nullptr) {
+ LOGI("<ContinuousTransfer>千传测试,开始搬送任务(Fliper(G2) -> Bonder1)...");
+ }
CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask);
}
@@ -780,6 +817,9 @@
if (!rmd.armState[1]) {
m_pActiveRobotTask = createTransferTask_continuous_transfer(pAligner,
0, pFliper, 0);
+ if (m_pActiveRobotTask != nullptr) {
+ LOGI("<ContinuousTransfer>千传测试,开始搬送任务(Aligner -> Fliper(G2))...");
+ }
CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask);
}
@@ -793,6 +833,7 @@
m_pActiveRobotTask = createTransferTask_continuous_transfer(pLoadPorts[s],
slot, pAligner, 0);
if (m_pActiveRobotTask != nullptr) {
+ LOGI("<ContinuousTransfer>千传测试,开始搬送任务(LoadPort -> Aligner)...");
pEFEM->setContext(m_pActiveRobotTask->getContext());
goto CT_PORT_GET;
}
@@ -801,6 +842,10 @@
}
CT_PORT_GET:
+ if (m_pActiveRobotTask != nullptr) {
+ m_nContinuousTransferStep = CTStep_begin;
+ LOGI("<ContinuousTransfer>千传测试,开始第 %d 轮", m_nContinuousTransferCount + 1);
+ }
CHECK_RUN_ACTIVE_ROBOT_TASK(m_pActiveRobotTask);
@@ -822,6 +867,16 @@
unsigned CMaster::ReadBitsProc()
{
+ // 标志位清0复位
+ {
+ StationIdentifier station;
+ station.nNetNo = 0;
+ station.nStNo = 255;
+ char szBuffer[528] = { 0 }; // 0x0, 0x1087
+ m_cclink.WriteData(station, (long)DeviceType::B, 0, 528, (short*)szBuffer);
+ }
+
+
while (1) {
// 待退出信号或时间到
int nRet = ::WaitForSingleObject(m_hEventReadBitsThreadExit[0], 1000);
@@ -882,6 +937,8 @@
listener.onPreFethedOutJob = [&](void* pEquipment, int port, CJobDataB* pJobDataB) -> BOOL {
CEquipment* p = (CEquipment*)pEquipment;
+ // 可能要加这一句
+ Sleep(750);
// 取片,更新当前搬送任务
BOOL bOk = FALSE;
@@ -915,6 +972,8 @@
listener.onPreStoredJob = [&](void* pEquipment, int port, CJobDataB* pJobDataB, short& slot) -> BOOL {
CEquipment* p = (CEquipment*)pEquipment;
+ // 可能要加这一句
+ Sleep(750);
// 放片,更新当前搬送任务
BOOL bOk = FALSE;
@@ -992,6 +1051,17 @@
&& m_pActiveRobotTask->getTarPosition() == p->getID()) {
m_pActiveRobotTask->stored();
m_pActiveRobotTask->completed();
+
+ if (m_state == MASTERSTATE::RUNNING_CONTINUOUS_TRANSFER) {
+ if (m_nContinuousTransferStep == CTStep_end) {
+ m_nContinuousTransferCount++;
+ LOGI("<ContinuousTransfer>千传测试,第 %d 轮结束", m_nContinuousTransferCount);
+ if (m_listener.onCTRoundEnd != nullptr) {
+ m_listener.onCTRoundEnd(this, m_nContinuousTransferCount);
+ }
+ }
+ }
+
LOGI("放片完成...");
// 完成此条搬送任务,但要把数据和消息上抛应用层
unlock();
@@ -1034,7 +1104,7 @@
((CEquipment*)pEquipment)->getName().c_str(), scanMap, downMap);
};
listener.onPortStatusChanged = [&](void* pEquipment, short status, __int64 data) {
- LOGE("<Master-%s>Port InUse。status=%d, data=%lld", ((CEquipment*)pEquipment)->getName().c_str(), status);
+ LOGE("<Master-%s>onPortStatusChanged。status=%d, data=%lld", ((CEquipment*)pEquipment)->getName().c_str(), status);
if (m_listener.onLoadPortStatusChanged != nullptr) {
m_listener.onLoadPortStatusChanged(this, (CEquipment*)pEquipment, status, data);
}
@@ -1582,8 +1652,12 @@
}
CRobotTask* pTask = nullptr;
- CSlot* pTarSlot = pTarEq->isSlotAvailable(nTarSlot);
CSlot* pSrcSlot = pSrcEq->getProcessedSlotCt(nSrcSlot);
+ if (pSrcSlot != nullptr && pSrcEq->getID() == EQ_ID_MEASUREMENT
+ && (pTarEq->getID() == EQ_ID_LOADPORT1 || pTarEq->getID() == EQ_ID_LOADPORT2 || pTarEq->getID() == EQ_ID_LOADPORT3 || pTarEq->getID() == EQ_ID_LOADPORT4)) {
+ pTarEq->removeGlass(1);
+ }
+ CSlot* pTarSlot = pTarEq->isSlotAvailable(nTarSlot);
if (pSrcSlot != nullptr && nullptr != pTarSlot) {
pTask = new CRobotTask();
pTask->setContext(pSrcSlot->getContext());
@@ -1703,4 +1777,34 @@
{
return m_bEnableAlarmReport;
}
+
+ int CMaster::proceedWithCarrier(unsigned int port)
+ {
+ if (port >= 4) return -1;
+
+ static int pid[] = { EQ_ID_LOADPORT1, EQ_ID_LOADPORT2, EQ_ID_LOADPORT3, EQ_ID_LOADPORT4};
+ CLoadPort* pPort = (CLoadPort*)getEquipment(pid[port]);
+ pPort->sendCassetteCtrlCmd(CCC_PROCESS_START, nullptr, 0, 0, 0, nullptr, nullptr);
+ return 0;
+ }
+
+ int CMaster::carrierRelease(unsigned int port)
+ {
+ if (port >= 4) return -1;
+
+ static int pid[] = { EQ_ID_LOADPORT1, EQ_ID_LOADPORT2, EQ_ID_LOADPORT3, EQ_ID_LOADPORT4 };
+ CLoadPort* pPort = (CLoadPort*)getEquipment(pid[port]);
+ pPort->sendCassetteCtrlCmd(CCC_PROCESS_CANCEL, nullptr, 0, 0, 0, nullptr, nullptr);
+ return 0;
+ }
+
+ int CMaster::getContinuousTransferCount()
+ {
+ return m_nContinuousTransferCount;
+ }
+
+ void CMaster::setContinuousTransferCount(int round)
+ {
+ m_nContinuousTransferCount = round;
+ }
}
--
Gitblit v1.9.3