#include "stdafx.h" #include "CProcessData.h" #include #include "ToolUnits.h" namespace SERVO { CProcessData::CProcessData() { } CProcessData::~CProcessData() { } std::string& CProcessData::getGlassId() { return m_strGlassId; } std::string& CProcessData::getStartTime() { return m_strStartTime; } std::string& CProcessData::getEndTime() { return m_strEndTime; } unsigned int CProcessData::getTotalParameter() { return m_nTotalParameter; } const std::list& CProcessData::getParameters() { return m_params; } void CProcessData::getParameters(std::list& list) { std::copy(m_params.begin(), m_params.end(), std::back_inserter(list)); } int CProcessData::serialize(char* pszBuffer, int nBufferSize) { if (nBufferSize < 538 * 2) return -1; // ½âÊÍÊý¾Ý // Glass ID int index = 0; CToolUnits::convertString(&pszBuffer[index], 10 * 2, m_strGlassId); index += 10 * 2; // Process Start Time CToolUnits::convertString(&pszBuffer[index], 8 * 2, m_strStartTime); index += 8 * 2; // Process End Time CToolUnits::convertString(&pszBuffer[index], 8 * 2, m_strEndTime); index += 8 * 2; // parameter count m_nTotalParameter = (unsigned int)CToolUnits::toInt16(&pszBuffer[index]); index += 2; // total group m_nTotalGroup = (unsigned int)CToolUnits::toInt16(&pszBuffer[index]); index += 2; // current group m_nCurrentGroup = (unsigned int)CToolUnits::toInt16(&pszBuffer[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; CToolUnits::convertString(&pszBuffer[index], 20, strParam); if (!strParam.empty()) { m_params.push_back(strParam); } index += 20; } return 538 * 2; } int CProcessData::unserialize(const char* pszBuffer, int nBufferSize) { if (nBufferSize < 538 * 2) return -1; int index = 0; CToolUnits::convertString(&pszBuffer[index], 10 * 2, m_strGlassId); index += 10 * 2; CToolUnits::convertString(&pszBuffer[index], 8 * 2, m_strStartTime); index += 8 * 2; CToolUnits::convertString(&pszBuffer[index], 8 * 2, m_strEndTime); index += 8 * 2; memcpy(&m_nTotalParameter, &pszBuffer[index], sizeof(short)); index += sizeof(short); memcpy(&m_nTotalGroup, &pszBuffer[index], sizeof(short)); index += sizeof(short); memcpy(&m_nCurrentGroup, &pszBuffer[index], sizeof(short)); index += sizeof(short); // ¶à·Ö×éÈçºÎ´¦Àí£¿´ý¿¼ÂÇ return 538 * 2; } void CProcessData::getAttributeVector(CAttributeVector& attrubutes, int beginWeight) { unsigned int weight = beginWeight; 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++)); } } }