| | |
| | | void CLoadPort::getAttributeVector(CAttributeVector& attrubutes) |
| | | { |
| | | __super::getAttributeVector(attrubutes); |
| | | |
| | | for (auto item : m_inputPins) { |
| | | attrubutes.addAttribute(new CAttribute(item->getName().c_str(), |
| | | std::to_string((int)item->getType()).c_str(), "")); |
| | | } |
| | | |
| | | for (auto item : m_outputPins) { |
| | | attrubutes.addAttribute(new CAttribute(item->getName().c_str(), |
| | | std::to_string((int)item->getType()).c_str(), "")); |
| | | } |
| | | |
| | | for (auto item : m_panelList) { |
| | | attrubutes.addAttribute(new CAttribute("Panel", |
| | | item->getID().c_str(), "")); |
| | | } |
| | | } |
| | | |
| | | void CLoadPort::outputPanel() |
| | | int CLoadPort::recvIntent(CPin* pPin, CIntent* pIntent) |
| | | { |
| | | CPin* pOutPin = getPin("Out"); |
| | | return __super::recvIntent(pPin, pIntent); |
| | | } |
| | | |
| | | |
| | | int CLoadPort::outputGlass(int port) |
| | | { |
| | | // 如果列表中没有Panel,模拟生成10张 |
| | | if (m_panelList.empty()) { |
| | | if (m_glassList.empty()) { |
| | | static int ii = 0; |
| | | char szBuffer[64]; |
| | | LOGI("<CLoadPort>模拟生成10张PANEL"); |
| | | for (int i = 0; i < 10; i++) { |
| | | sprintf_s(szBuffer, "P20250320A1A%d", ++ii); |
| | | CPanel* pPanel = new CPanel(); |
| | | pPanel->setID(szBuffer); |
| | | addPanelToList(pPanel); |
| | | CGlass* pGlass = new CGlass(); |
| | | pGlass->setID(szBuffer); |
| | | addGlassToList(pGlass); |
| | | } |
| | | } |
| | | |
| | | return __super::outputGlass(port); |
| | | } |
| | | |
| | | // 模拟取出第一张Panel,传送到下一环节 |
| | | BOOL CLoadPort::glassWillArrive(CGlass* pGlass) |
| | | { |
| | | BOOL bRet = __super::glassWillArrive(pGlass); |
| | | if (!bRet) { |
| | | return FALSE; |
| | | } |
| | | |
| | | return (m_glassList.size() < 8); |
| | | } |
| | | |
| | | int CLoadPort::sendCassetteCtrlCmd(short cmd, |
| | | short* jobExistence, |
| | | int jobExistenceSize, |
| | | short slotProcess, |
| | | short jopCount, |
| | | CJobDataB* pJobDataB) |
| | | { |
| | | int id = getID(); |
| | | if ( !(id == EQ_ID_LOADPORT1 || id == EQ_ID_LOADPORT2) ) { |
| | | return -1; |
| | | } |
| | | |
| | | |
| | | SERVO::CEqCassetteCtrlCmdStep* pStep = (SERVO::CEqCassetteCtrlCmdStep*)getCassetteCtrlCmdStep(); |
| | | ASSERT(pStep); |
| | | return pStep->sendCtrlCmd(cmd, jobExistence, jobExistenceSize, slotProcess, jopCount, pJobDataB); |
| | | } |
| | | |
| | | CStep* CLoadPort::getCassetteCtrlCmdStep() |
| | | { |
| | | CStep* pStep = nullptr; |
| | | Lock(); |
| | | CPanel* pContext = m_panelList.front(); |
| | | pContext->addRef(); |
| | | |
| | | CIntent intent(FLOW_MOVE_MATERIAL, "", pContext); |
| | | int nRet = pOutPin->sendIntent(&intent); |
| | | if (nRet == FLOW_REJECT) { |
| | | AfxMessageBox("对方拒绝接受"); |
| | | for (auto item : m_mapStep) { |
| | | if (item.second->getName().find(STEP_EQ_P1_CASSETTE_CTRL_CMD) == 0 |
| | | || item.second->getName().find(STEP_EQ_P2_CASSETTE_CTRL_CMD) == 0 |
| | | || item.second->getName().find(STEP_EQ_P3_CASSETTE_CTRL_CMD) == 0 |
| | | || item.second->getName().find(STEP_EQ_P4_CASSETTE_CTRL_CMD) == 0) { |
| | | pStep = item.second; |
| | | } |
| | | } |
| | | else if (nRet == FLOW_ACCEPT) { |
| | | m_panelList.pop_front(); |
| | | pContext->release(); // 添加到列队时addRef, 取出时release |
| | | } |
| | | |
| | | pContext->release(); |
| | | Unlock(); |
| | | |
| | | return pStep; |
| | | } |
| | | } |