| | |
| | | return m_strDescription; |
| | | } |
| | | |
| | | void CEquipment::setCurrentRecipe(const std::string& recipe) |
| | | { |
| | | Lock(); |
| | | m_currentRecipe = recipe; |
| | | Unlock(); |
| | | } |
| | | |
| | | std::string CEquipment::getCurrentRecipe() |
| | | { |
| | | Lock(); |
| | | std::string out = m_currentRecipe; |
| | | Unlock(); |
| | | return out; |
| | | } |
| | | |
| | | void CEquipment::setStation(int network, int station) |
| | | { |
| | | m_station.nNetNo = network; |
| | |
| | | |
| | | return 1; |
| | | } |
| | | else if (pStep->getName().compare(STEP_STATUS) == 0) { |
| | | SERVO::CEqStatusStep* pEqStatusStep = (SERVO::CEqStatusStep*)pStep; |
| | | if (m_listener.onEqStatusChanged != nullptr) { |
| | | const unsigned int unitId = pEqStatusStep->getUnitId(); |
| | | const int status = pEqStatusStep->getStatus(unitId); |
| | | const int reason = pEqStatusStep->getReasonCode(unitId); |
| | | m_listener.onEqStatusChanged(this, (int)unitId, status, reason); |
| | | } |
| | | return 1; |
| | | } |
| | | else if (isCimMessageConfirmStep(pStep)) { |
| | | SERVO::CEqReadIntStep* pEqReadIntStep = (SERVO::CEqReadIntStep*)pStep; |
| | | int value = pEqReadIntStep->getValue(); |
| | |
| | | } |
| | | } |
| | | if (pContext == nullptr) { |
| | | LOGE("<CEquipment-%s>fetchedOutJob, no glass for JobDataB(%d, %d)", m_strName.c_str(), |
| | | pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo()); |
| | | Unlock(); |
| | | return -3; |
| | | } |
| | | LOGI("<CEquipment-%s>fetchedOutJob -> Arm: GlassId:%s, Cassette:%d, Job:%d", m_strName.c_str(), |
| | | pContext->getID().c_str(), pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo()); |
| | | |
| | | ((CArm*)m_pArm)->tempStore(pContext); |
| | | pContext->release(); |
| | |
| | | |
| | | CGlass* pGlass = nullptr; |
| | | if (((CArm*)m_pArm)->tempFetchOut(pGlass) != 0) { |
| | | LOGE("<CEquipment-%s>storedJob, tempFetchOut failed (arm empty).", m_strName.c_str()); |
| | | return -2; |
| | | } |
| | | |
| | | |
| | | ASSERT(pGlass); |
| | | LOGI("<CEquipment-%s>storedJob <- Arm: GlassId:%s, Cassette:%d, Job:%d", m_strName.c_str(), |
| | | pGlass->getID().c_str(), pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo()); |
| | | Lock(); |
| | | pGlass->addPath(m_nID, getSlotUnit(putSlot), putSlot); |
| | | CGlass* pBuddy = pGlass->getBuddy(); |
| | |
| | | std::vector<CParam> tempParams; |
| | | this->parsingProcessData((const char*)rawData.data(), rawData.size(), tempParams); |
| | | int n = processData.getTotalParameter(); |
| | | std::vector<CParam> params(tempParams.begin(), tempParams.begin() + min(n, (int)tempParams.size())); |
| | | std::vector<CParam> params(tempParams.begin(), tempParams.begin() + (std::min)(n, (int)tempParams.size())); |
| | | pGlass->addParams(params); |
| | | if (m_listener.onProcessDataReport != nullptr) { |
| | | m_listener.onProcessDataReport(this, params); |
| | | } |
| | | |
| | | // 关联的Glass也要更新 |
| | | CGlass* pBuddy = pGlass->getBuddy(); |
| | |
| | | if (pBuddy != nullptr) { |
| | | LOGI("<Equipment-%s>decodeProcessDataReport addParams pBuddy=%x %s", getName().c_str(), pBuddy, pGlass->getID().c_str()); |
| | | pBuddy->addParams(params); |
| | | if (m_listener.onProcessDataReport != nullptr) { |
| | | m_listener.onProcessDataReport(this, params); |
| | | } |
| | | } |
| | | |
| | | return nRet; |
| | |
| | | m_strName.c_str(), nRet); |
| | | } |
| | | |
| | | if (m_listener.onReceivedJob != nullptr) { |
| | | m_listener.onReceivedJob(this, port, pJobDataS); |
| | | } |
| | | |
| | | return nRet; |
| | | } |
| | | |
| | |
| | | int CEquipment::onSentOutJob(int port, CJobDataS* pJobDataS) |
| | | { |
| | | LOGI("<CEquipment-%s>onSentOutJob.", m_strName.c_str()); |
| | | |
| | | if (m_listener.onSentOutJob != nullptr) { |
| | | m_listener.onSentOutJob(this, port, pJobDataS); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | |
| | | CSVData svData; |
| | | int nRet = svData.unserialize(&pszData[0], (int)size); |
| | | if (nRet < 0) return nRet; |
| | | Lock(); |
| | | m_svDatas.push_back(svData); |
| | | Unlock(); |
| | | |
| | | if (m_listener.onSVDataReport != nullptr) { |
| | | m_listener.onSVDataReport(this, &svData); |
| | |
| | | // 当前要存片,之前肯定有拔片,因此片子在Arm那里 |
| | | CGlass* pGlass = ((CArm*)m_pArm)->getGlassFromSlot(1); |
| | | if (pGlass == nullptr) { |
| | | LOGE("<CFliper-%s>onPreStoredJob,缓存中没有找到对应的Glass(CassetteSequenceNo:%d, JobSequenceNo:%d),请检查数据,注意风险。", m_strName.c_str(), |
| | | LOGE("<CEquipment-%s>onPreStoredJob,缓存中没有找到对应的Glass(CassetteSequenceNo:%d, JobSequenceNo:%d),请检查数据,注意风险。", m_strName.c_str(), |
| | | pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo()); |
| | | LOGE("<CEquipment-%s>onPreStoredJob, arm temp empty (arm:%s).", m_strName.c_str(), |
| | | (m_pArm != nullptr) ? ((CEquipment*)m_pArm)->getName().c_str() : "null"); |
| | | return FALSE; |
| | | } |
| | | |
| | | CJobDataS* pJobDataS = pGlass->getJobDataS(); |
| | | ASSERT(pJobDataS); |
| | | LOGI("<CEquipment-%s>onPreStoredJob, Arm has GlassId:%s, Cassette:%d, Job:%d", |
| | | m_strName.c_str(), pGlass->getID().c_str(), |
| | | pJobDataS->getCassetteSequenceNo(), pJobDataS->getJobSequenceNo()); |
| | | if (!compareJobData(pJobDataB, pJobDataS)) { |
| | | LOGE("<CEquipemnt-%s>onPreStoredJob,JobData数据不匹配(JobDataB(%d, %d),JobDataS(%d, %d)), 注意排查风险!", m_strName.c_str(), |
| | | pJobDataB->getCassetteSequenceNo(), pJobDataB->getJobSequenceNo(), |
| | |
| | | } |
| | | } |
| | | |
| | | PROCESS_STATE CEquipment::getProcessState(int slotNo) const |
| | | { |
| | | if (slotNo <= 0 || slotNo > SLOT_MAX) { |
| | | return PROCESS_STATE::Ready; |
| | | } |
| | | return m_processState[slotNo - 1]; |
| | | } |
| | | |
| | | std::vector<SERVO::CSVData>& CEquipment::getSVDatas() |
| | | { |
| | | return m_svDatas; |