#include "stdafx.h" #include "Common.h" #include "CEqProcessStep.h" #include "Log.h" #include "ToolUnits.h" #include "CEquipment.h" namespace SERVO { CEqProcessStep::CEqProcessStep() : CReadStep() { m_nProcessDev = 0; m_nTotalParameter = 0; } CEqProcessStep::~CEqProcessStep() { } void CEqProcessStep::getAttributeVector(CAttributeVector& attrubutes) { CReadStep::getAttributeVector(attrubutes); unsigned int weight = 31; attrubutes.addAttribute(new CAttribute("Glass ID", m_strGlassId.c_str(), "", weight++)); attrubutes.addAttribute(new CAttribute("Start Time", m_strStartTime.c_str(), "", weight++)); attrubutes.addAttribute(new CAttribute("End Time", m_strEndTime.c_str(), "", weight++)); attrubutes.addAttribute(new CAttribute("Total Parameter", std::to_string(m_nTotalParameter).c_str(), "", weight++)); attrubutes.addAttribute(new CAttribute("Total Group", std::to_string(m_nTotalGroup).c_str(), "", weight++)); attrubutes.addAttribute(new CAttribute("Current Group", std::to_string(m_nCurrentGroup).c_str(), "", weight++)); char szName[256]; int index = 0; for (auto item : m_params) { sprintf_s(szName, 256, "Parameter %d", ++index); attrubutes.addAttribute(new CAttribute(szName, item.c_str(), "", weight++)); } } #define PROGRESS_BUF_SIZE (1024 + 64) int CEqProcessStep::onReadData() { CReadStep::onReadData(); // W1864 ~ W1A74, 529¸öword, 1058 bytes char szBuffer[PROGRESS_BUF_SIZE]; int nRet = m_pCclink->ReadData2(m_station, DeviceType::W, m_nProcessDev, PROGRESS_BUF_SIZE, szBuffer); if (0 != nRet) { return -1; } // ½âÊÍÊý¾Ý // Glass ID(1864~186D) int index = 0; convertString(&szBuffer[index], (0x186d - 0x1864 + 1) * 2, m_strGlassId); index += (0x186d - 0x1864 + 1) * 2; // Process Start Time(186e~1875) convertString(&szBuffer[index], (0x1875 - 0x186e + 1) * 2, m_strStartTime); index += (0x1875 - 0x186e + 1) * 2; // Process End Time(1876~187d) convertString(&szBuffer[index], (0x187d - 0x1876 + 1) * 2, m_strEndTime); index += (0x187d - 0x1876 + 1) * 2; // parameter count m_nTotalParameter = (unsigned int)CToolUnits::toInt16(&szBuffer[index]); index += 2; // total group m_nTotalGroup = (unsigned int)CToolUnits::toInt16(&szBuffer[index]); index += 2; // current group m_nCurrentGroup = (unsigned int)CToolUnits::toInt16(&szBuffer[index]); index += 2; // param list(0x1881~0x1a74), ¹²1000 bytes, 20¸ö×Ö·ûΪһ¸ö²ÎÊý, 50×é // ×îºóÒ»group¿ÉÄܲ»Âú×ã50, ÒÔm_nTotalParameterΪÒÀ¾Ý int size = (m_nCurrentGroup == m_nTotalGroup) ? m_nTotalParameter % 50 : 50; for (int i = 0; i < size; i++) { std::string strParam; convertString(&szBuffer[index], 20, strParam); if (!strParam.empty()) { m_params.push_back(strParam); } index += 20; } if (m_nCurrentGroup == m_nTotalGroup) { ASSERT(m_pEquipment); m_pEquipment->onStepEvent(this, STEP_EVENT_PROCESS_DATA); } LOGI(" Process Data\n", m_strGlassId.c_str()); return 0; } int CEqProcessStep::onComplete() { CReadStep::onComplete(); LOGI(" onComplete."); return 0; } int CEqProcessStep::onTimeout() { CReadStep::onTimeout(); LOGE(" onTimeout."); return 0; } void CEqProcessStep::setProcessDev(int nDev) { m_nProcessDev = nDev; } std::string& CEqProcessStep::getGlassId() { return m_strGlassId; } std::string& CEqProcessStep::getStartTime() { return m_strStartTime; } std::string& CEqProcessStep::getEndTime() { return m_strEndTime; } unsigned int CEqProcessStep::getTotalParameter() { return m_nTotalParameter; } const std::list CEqProcessStep::getParameters() { return m_params; } void CEqProcessStep::getParameters(std::list& list) { Lock(); std::copy(m_params.begin(), m_params.end(), std::back_inserter(list)); Unlock(); } }