LAPTOP-SNT8I5JK\Boounion
2025-06-21 0de0a72329a77fbf20bc299c542e435a6d47256b
SourceCode/Bond/Servo/CLoadPort.cpp
@@ -22,6 +22,7 @@
      m_transferMode = TransferMode::AGVMode;
      m_bEnable = FALSE;
      m_bAutoChangeEnable = FALSE;
      m_nNextCassetteSequenceNo = 0;
   }
   CLoadPort::~CLoadPort()
@@ -92,7 +93,7 @@
         // Type
         static char* pszName[] = { STEP_EQ_PORT1_TYPE, STEP_EQ_PORT2_TYPE, STEP_EQ_PORT3_TYPE, STEP_EQ_PORT4_TYPE };
         static int dev[] = { 0x6010 , 0x6020, 0x6030, 0x6040 };
         static int writeSignalDev[] = { 0xa0, 0xa1, 0xa2, 0xa3 };
         static int writeSignalDev[] = { 0x90, 0x91, 0x92, 0x93 };
         static int addr[] = { STEP_ID_PORT1_TYPE_CHANGE, STEP_ID_PORT2_TYPE_CHANGE, STEP_ID_PORT3_TYPE_CHANGE, STEP_ID_PORT4_TYPE_CHANGE };
         CEqReadStep* pStep = new CEqReadStep(dev[m_nIndex], sizeof(short),
@@ -113,7 +114,7 @@
         // Mode
         static char* pszName[] = { STEP_EQ_PORT1_MODE, STEP_EQ_PORT2_MODE, STEP_EQ_PORT3_MODE, STEP_EQ_PORT4_MODE };
         static int dev[] = { 0x6011, 0x6021, 0x6031, 0x6041 };
         static int writeSignalDev[] = { 0xa8, 0xa9, 0xaa, 0xab };
         static int writeSignalDev[] = { 0x98, 0x99, 0x9a, 0x9b };
         static int addr[] = { STEP_ID_PORT1_MODE_CHANGE, STEP_ID_PORT2_MODE_CHANGE, STEP_ID_PORT3_MODE_CHANGE, STEP_ID_PORT4_MODE_CHANGE };
         CEqReadStep* pStep = new CEqReadStep(dev[m_nIndex], sizeof(short),
@@ -134,7 +135,7 @@
         // Cassette type
         static char* pszName[] = { STEP_EQ_PORT1_CASSETTE_TYPE, STEP_EQ_PORT2_CASSETTE_TYPE, STEP_EQ_PORT3_CASSETTE_TYPE, STEP_EQ_PORT4_CASSETTE_TYPE };
         static int dev[] = { 0x6012, 0x6022, 0x6032, 0x6042 };
         static int writeSignalDev[] = { 0xb0, 0xb1, 0xb2, 0xb3 };
         static int writeSignalDev[] = { 0xa0, 0xa1, 0xa2, 0xa3 };
         static int addr[] = { STEP_ID_PORT1_CASSETTE_TYPE_CHANGE, STEP_ID_PORT2_CASSETTE_TYPE_CHANGE, STEP_ID_PORT3_CASSETTE_TYPE_CHANGE, STEP_ID_PORT4_CASSETTE_TYPE_CHANGE };
         CEqReadStep* pStep = new CEqReadStep(dev[m_nIndex], sizeof(short),
@@ -155,7 +156,7 @@
         // Transfer type
         static char* pszName[] = { STEP_EQ_PORT1_TRANSFER_MODE, STEP_EQ_PORT2_TRANSFER_MODE, STEP_EQ_PORT3_TRANSFER_MODE, STEP_EQ_PORT4_TRANSFER_MODE };
         static int dev[] = { 0x6014, 0x6024, 0x6034, 0x6044 };
         static int writeSignalDev[] = { 0xb8, 0xb9, 0xba, 0xbb };
         static int writeSignalDev[] = { 0xa8, 0xa9, 0xaa, 0xab };
         static int addr[] = { STEP_ID_PORT1_TRANSFER_MODE_CHANGE, STEP_ID_PORT2_TRANSFER_MODE_CHANGE, STEP_ID_PORT3_TRANSFER_MODE_CHANGE, STEP_ID_PORT4_TRANSFER_MODE_CHANGE };
         CEqReadStep* pStep = new CEqReadStep(dev[m_nIndex], sizeof(short),
@@ -176,7 +177,7 @@
         // Port enable
         static char* pszName[] = { STEP_EQ_PORT1_ENABLE, STEP_EQ_PORT2_ENABLE, STEP_EQ_PORT3_ENABLE, STEP_EQ_PORT4_ENABLE };
         static int dev[] = { 0x6015, 0x6025, 0x6035, 0x6045 };
         static int writeSignalDev[] = { 0xc0, 0xc1, 0xc2, 0xc3 };
         static int writeSignalDev[] = { 0xb0, 0xb1, 0xb2, 0xb3 };
         static int addr[] = { STEP_ID_PORT1_ENABLE_MODE_CHANGE, STEP_ID_PORT2_ENABLE_MODE_CHANGE, STEP_ID_PORT3_ENABLE_MODE_CHANGE, STEP_ID_PORT4_ENABLE_MODE_CHANGE };
         CEqReadStep* pStep = new CEqReadStep(dev[m_nIndex], sizeof(short),
@@ -299,7 +300,7 @@
         pStep->setName(pszName[m_nIndex]);
         pStep->setWriteSignalDev(0x128 + m_nIndex);
         pStep->setDataDev(dev[m_nIndex]);
         if (addStep(STEP_ID_PROT1_TYPE_AUTO_CHANGE_REPLY + m_nIndex, pStep) != 0) {
         if (addStep(STEP_ID_PROT1_CASSETTE_TYPE_CHANGE_REPLY + m_nIndex, pStep) != 0) {
            delete pStep;
         }
      }
@@ -441,6 +442,16 @@
      Unlock();
      return pStep;
   }
   short CLoadPort::getNextCassetteSequenceNo()
   {
      m_nNextCassetteSequenceNo++;
      if (m_nNextCassetteSequenceNo >= 1000) {
         m_nNextCassetteSequenceNo = 0;
      }
      return (m_nIndex + 1) * 1000 + m_nNextCassetteSequenceNo;
   }
   void CLoadPort::setIndex(unsigned int index)
@@ -820,6 +831,8 @@
   void CLoadPort::onReceiveLBData(const char* pszData, size_t size)
   {
      __super::onReceiveLBData(pszData, size);
      static int type[] = { STEP_ID_PORT1_TYPE_CHANGE, STEP_ID_PORT2_TYPE_CHANGE,
         STEP_ID_PORT3_TYPE_CHANGE, STEP_ID_PORT4_TYPE_CHANGE };
      static int mode[] = { STEP_ID_PORT1_MODE_CHANGE, STEP_ID_PORT2_MODE_CHANGE,
@@ -1092,13 +1105,8 @@
   /*
    * 生成测试用的玻璃列表
    */
   int CLoadPort::testGenerateGlassList(MaterialsType type, const char* pszPrefix, int startSuffix)
   int CLoadPort::testGenerateGlassList(MaterialsType type)
   {
      static unsigned short nJobSequenceNo = 0;
      static unsigned short nCassetteSequenceNo = 0;
      nCassetteSequenceNo++;
      // 如果非空就不生成了
      Lock();
      if (hasGlass()) {
@@ -1109,32 +1117,21 @@
      char szBuffer[64];
      int suffix = startSuffix;
      for (int i = 0; i < 1; i++) {
         if (!m_slot[i].isEnable()) continue;
         CJobDataB jb;
         CJobDataS js;
         sprintf_s(szBuffer, "%s%d", pszPrefix, suffix++);
         jb.setGlassId(szBuffer);
         jb.setCassetteSequenceNo(nCassetteSequenceNo);
         jb.setJobSequenceNo(++nJobSequenceNo);
         js.setCassetteSequenceNo(getNextCassetteSequenceNo());
         js.setJobSequenceNo(m_slot[i].getNo());
         sprintf_s(szBuffer, 64, "%05d%05d", js.getCassetteSequenceNo(), js.getJobSequenceNo());
         //js.setGlass1Id(szBuffer);
         js.setJobType(1);
         js.setMaterialsType((int)type);
         js.setCassetteSequenceNo(nCassetteSequenceNo);
         js.setJobSequenceNo(nJobSequenceNo);
         if (type == MaterialsType::G1) {
            js.setGlass1Id(szBuffer);
         }
         else if (type == MaterialsType::G2) {
            js.setGlass2Id(szBuffer);
         }
         CGlass* pGlass = theApp.m_model.m_glassPool.allocaGlass();
         pGlass->addPath(m_nID, 0);
         pGlass->processEnd(m_nID, 0);
         pGlass->setID(szBuffer);
         pGlass->setJobDataB(&jb);
         pGlass->setType(type);
         pGlass->setJobDataS(&js);
         m_slot[i].setContext(pGlass);
@@ -1143,4 +1140,44 @@
      return 0;
   }
   int CLoadPort::testGenerateGlassListFromConfig(const SERVO::PortConfig& config)
   {
      char szBuffer[64];
      for (const auto& slot : config.vecSlot) {
         if (!slot.isEnabled) continue;
         int nSlotIndex = slot.nSlotID - 1;
         if (nSlotIndex < 0 || nSlotIndex >= SLOT_MAX) {
            continue;
         }
         m_slot[nSlotIndex].enable();
         if (!m_slot[nSlotIndex].isEnable()) continue;
         CJobDataS js;
         js.setCassetteSequenceNo(getNextCassetteSequenceNo());
         js.setJobSequenceNo(m_slot[nSlotIndex].getNo());
         sprintf_s(szBuffer, 64, "%05d%05d", js.getCassetteSequenceNo(), js.getJobSequenceNo());
         js.setJobType(1);
         js.setMaterialsType(config.nMaterialType);
         js.setLotId(config.strLotID.c_str());
         js.setProductId(config.strProductID.c_str());
         js.setOperationId(config.strOperationID.c_str());
         js.setGlass1Id(szBuffer);
         CGlass* pGlass = theApp.m_model.m_glassPool.allocaGlass();
         pGlass->addPath(m_nID, 0);
         pGlass->processEnd(m_nID, 0);
         pGlass->setID(szBuffer);
         pGlass->setType(static_cast<SERVO::MaterialsType>(config.nMaterialType));
         pGlass->setJobDataS(&js);
         m_slot[nSlotIndex].setContext(pGlass);
      }
      return 0;
   }
}