LAPTOP-SNT8I5JK\Boounion
2025-06-12 23cce52f9abd7dfd8e4eddd6068810e70c0a4ffa
SourceCode/Bond/Servo/CMaster.cpp
@@ -1161,11 +1161,14 @@
      if (pSrcSlot != nullptr && nullptr != pTarSlot) {
         int srcPos, srcSlot, tarPos, tarSlot;
         transformPosAndSlot(pSrcSlot->getPosition(), pSrcSlot->getNo(), srcPos, srcSlot);
         transformPosAndSlot(pTarSlot->getPosition(), pTarSlot->getNo(), tarPos, tarSlot);
         pTask = new CRobotTask();
         pTask->setContext(pSrcSlot->getContext());
         pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
         pTask->setRobotTransferParam(++taskSeqNo, armNo, pSrcSlot->getPosition(),
            pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
         pTask->setRobotTransferParam(++taskSeqNo, armNo, srcPos,
            tarPos, srcSlot, tarSlot);
      }
@@ -1182,11 +1185,14 @@
      pSrcSlot = pSrcEq->getProcessedSlot(MaterialsType::G1);
      if (pSrcSlot != nullptr && nullptr != pTarSlot) {
         int srcPos, srcSlot, tarPos, tarSlot;
         transformPosAndSlot(pSrcSlot->getPosition(), pSrcSlot->getNo(), srcPos, srcSlot);
         transformPosAndSlot(pTarSlot->getPosition(), pTarSlot->getNo(), tarPos, tarSlot);
         pTask = new CRobotTask();
         pTask->setContext(pSrcSlot->getContext());
         pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
         pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(),
            pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
         pTask->setRobotTransferParam(++taskSeqNo, 1, srcPos,
            tarPos, srcSlot, tarSlot);
      }
@@ -1204,11 +1210,14 @@
      pSrcSlot = pSrcEq->getProcessedSlot2(MaterialsType::G1, slotsSrc);
      if (pSrcSlot != nullptr && nullptr != pTarSlot) {
         int srcPos, srcSlot, tarPos, tarSlot;
         transformPosAndSlot(pSrcSlot->getPosition(), pSrcSlot->getNo(), srcPos, srcSlot);
         transformPosAndSlot(pTarSlot->getPosition(), pTarSlot->getNo(), tarPos, tarSlot);
         pTask = new CRobotTask();
         pTask->setContext(pSrcSlot->getContext());
         pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
         pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(),
            pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
         pTask->setRobotTransferParam(++taskSeqNo, 1, srcPos,
            tarPos, srcSlot, tarSlot);
      }
@@ -1225,17 +1234,70 @@
      pSrcSlot = pSrcEq->getProcessedSlot2(MaterialsType::G1, slots);
      if (pSrcSlot != nullptr && nullptr != pTarSlot) {
         int srcPos, srcSlot, tarPos, tarSlot;
         transformPosAndSlot(pSrcSlot->getPosition(), pSrcSlot->getNo(), srcPos, srcSlot);
         transformPosAndSlot(pTarSlot->getPosition(), pTarSlot->getNo(), tarPos, tarSlot);
         pTask = new CRobotTask();
         pTask->setContext(pSrcSlot->getContext());
         pTask->setEFEM((CEFEM*)getEquipment(EQ_ID_EFEM));
         pTask->setRobotTransferParam(++taskSeqNo, 1, pSrcSlot->getPosition(),
            pTarSlot->getPosition(), pSrcSlot->getNo(), pTarSlot->getNo());
         pTask->setRobotTransferParam(++taskSeqNo, 1, srcPos,
            tarPos, srcSlot, tarSlot);
      }
      return pTask;
   }
   void CMaster::transformPosAndSlot(int srcPos, int srcSlot, int& tarPos, int& tarSlot)
   {
      switch (srcPos)
      {
      case EQ_ID_LOADPORT1:
      case EQ_ID_LOADPORT2:
      case EQ_ID_LOADPORT3:
      case EQ_ID_LOADPORT4:
      case EQ_ID_ARM_TRAY1:
      case EQ_ID_ARM_TRAY2:
      case EQ_ID_ALIGNER:
      case EQ_ID_FLIPER:
         tarPos = srcPos;
         tarSlot = 1;
         break;
      case EQ_ID_Bonder1:
         if (1 <= srcSlot && srcSlot <= 2) {
            tarPos = 9 + srcSlot;
            tarSlot = 1;
         }
         break;
      case EQ_ID_Bonder2:
         if (1 <= srcSlot && srcSlot <= 2) {
            tarPos = 11 + srcSlot;
            tarSlot = 1;
         }
         break;
      case EQ_ID_VACUUMBAKE:
         if (1 <= srcSlot && srcSlot <= 2) {
            tarPos = 13 + srcSlot;
            tarSlot = 1;
         }
         break;
      case EQ_ID_BAKE_COOLING:
         if (1 <= srcSlot && srcSlot <= 4) {
            tarPos = 15 + srcSlot;
            tarSlot = 1;
         }
         break;
      case EQ_ID_MEASUREMENT:
         tarPos = 19;
         tarSlot = 1;
         break;
      default:
         tarPos = srcPos;
         tarSlot = srcSlot;
         break;
      }
   }
   int CMaster::abortCurrentTask()
   {
      lock();