| | |
| | | // process data report |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_PROCESS_DATA_REPORT, pszData, size); |
| | | |
| | | // FAC Data report |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_FAC_DATA_REPORT, pszData, size); |
| | | |
| | | // 配方改变 |
| | | CHECK_READ_STEP_SIGNAL(STEP_ID_CURRENT_RECIPE_CHANGE_REPORT, pszData, size); |
| | | |
| | |
| | | processData.getAttributeVector(attrubutes, weight); |
| | | onProcessData(&processData); |
| | | |
| | | |
| | | |
| | | // 找到玻璃,关联数据 |
| | | CGlass* pGlass = this->getGlassWithCassette(processData.getCassetteSequenceNo(), |
| | | processData.getJobSequenceNo()); |
| | | if (pGlass == nullptr) { |
| | | LOGE("<CEquipment-%s>找不到对应Glass, 关联工艺参数失败。", this->getName().c_str(), |
| | | processData.getCassetteSequenceNo(), |
| | | processData.getJobSequenceNo()); |
| | | return -1; |
| | | } |
| | | |
| | | auto rawData = processData.getParamsRawData(); |
| | | std::vector<CParam> params; |
| | | this->parsingParams((const char*)rawData.data(), rawData.size(), params); |
| | | pGlass->addParams(params); |
| | | |
| | | |
| | | return nRet; |
| | | } |
| | | |
| | |
| | | |
| | | int CEquipment::decodeFacDataReport(CStep* pStep, const char* pszData, size_t size) |
| | | { |
| | | int index = 0; |
| | | std::string strSvTimeRecord, strSvData; |
| | | CToolUnits::convertString(&pszData[index], 8 * 2, strSvTimeRecord); |
| | | index += 128 * 2; |
| | | CToolUnits::convertString(&pszData[index], 100 * 2, strSvData); |
| | | index += 256 * 2; |
| | | CSVData svData; |
| | | int nRet = svData.unserialize(&pszData[0], (int)size); |
| | | if (nRet < 0) return nRet; |
| | | m_svDatas.push_back(svData); |
| | | |
| | | |
| | | // 缓存Attribute,用于调试时显示信息 |
| | | unsigned int weight = 201; |
| | | pStep->addAttribute(new CAttribute("SV Time Record", |
| | | strSvTimeRecord.c_str(), "", weight++)); |
| | | pStep->addAttribute(new CAttribute("SV Data", |
| | | strSvData.c_str(), "", weight++)); |
| | | |
| | | if (m_listener.onSVDataReport != nullptr) { |
| | | m_listener.onSVDataReport(this, &svData); |
| | | } |
| | | |
| | | return 0; |
| | | } |
| | |
| | | |
| | | |
| | | if (m_processState != PROCESS_STATE::Processing) { |
| | | Lock(); |
| | | m_svDatas.clear(); |
| | | Unlock(); |
| | | setProcessState(PROCESS_STATE::Processing); |
| | | } |
| | | |
| | |
| | | |
| | | return 0; |
| | | }; |
| | | |
| | | void CEquipment::addFacDataReportStep(int dataDev, int writeSignalDev, int port) |
| | | { |
| | | CEqReadStep* pStep = new CEqReadStep(dataDev, 133 * 2, |
| | | [&](void* pFrom, int code, const char* pszData, size_t size) -> int { |
| | | if (code == ROK && pszData != nullptr && size > 0) { |
| | | decodeFacDataReport((CStep*)pFrom, pszData, size); |
| | | } |
| | | return -1; |
| | | }); |
| | | pStep->setName(STEP_EQ_FAC_DATA_REPORT); |
| | | pStep->setProp("Port", (void*)port); |
| | | pStep->setWriteSignalDev(writeSignalDev); |
| | | if (addStep(STEP_ID_FAC_DATA_REPORT, pStep) != 0) { |
| | | delete pStep; |
| | | } |
| | | } |
| | | |
| | | std::vector<SERVO::CSVData>& CEquipment::getSVDatas() |
| | | { |
| | | return m_svDatas; |
| | | } |
| | | } |