chenluhua1980
2026-01-24 8fc148424accf484b4f331c7d5fb11eb7383cf89
SourceCode/Bond/Servo/CGlass.cpp
@@ -1,4 +1,4 @@
#include "stdafx.h"
#include "stdafx.h"
#include "CGlass.h"
#include "Log.h"
@@ -384,7 +384,7 @@
      if (s.size() > maxLen) s.resize(maxLen);
   }
   // —— 时间戳 & 工具 ——
   // 状态时间戳:排队/开始/结束
   void CGlass::markQueued() 
   {
      m_state = GlsState::Queued;
@@ -432,29 +432,44 @@
      return strOut;
   }
   // ========== SV数据管理接口实现 ==========
   // ========== SV数据口袋 ==========
   static constexpr size_t MAX_SV_DATA_KEEP = 4800;
   void CGlass::addSVData(int machineId, const std::string& dataType, const SVDataItem& dataItem) {
      m_svDatas[machineId][dataType].push_back(dataItem);
      auto& vec = m_svDatas[machineId][dataType];
      vec.push_back(dataItem);
      if (vec.size() > MAX_SV_DATA_KEEP) {
         vec.erase(vec.begin(), vec.begin() + (vec.size() - MAX_SV_DATA_KEEP));
      }
   }
   void CGlass::addSVData(int machineId, const std::string& dataType, double value) {
      auto now = std::chrono::system_clock::now();
      m_svDatas[machineId][dataType].emplace_back(now, value);
      auto& vec = m_svDatas[machineId][dataType];
      vec.emplace_back(now, value);
      if (vec.size() > MAX_SV_DATA_KEEP) {
         vec.erase(vec.begin(), vec.begin() + (vec.size() - MAX_SV_DATA_KEEP));
      }
   }
   void CGlass::addSVData(int machineId, const std::string& dataType, int64_t timestamp, double value) {
      // 将int64_t时间戳转换为system_clock::time_point
      // int64_t时间转成system_clock::time_point
      std::chrono::system_clock::time_point timePoint{
         std::chrono::milliseconds(timestamp)  // 假设timestamp是毫秒
         // 如果是秒,使用:std::chrono::seconds(timestamp)
         std::chrono::milliseconds(timestamp)  // timestamp精度:毫秒
         // 如果需要精度更高,可能要使用其他时间单位,如std::chrono::seconds(timestamp)
      };
      m_svDatas[machineId][dataType].emplace_back(timePoint, value);
      auto& vec = m_svDatas[machineId][dataType];
      vec.emplace_back(timePoint, value);
      if (vec.size() > MAX_SV_DATA_KEEP) {
         vec.erase(vec.begin(), vec.begin() + (vec.size() - MAX_SV_DATA_KEEP));
      }
   }
   void CGlass::addSVData(int machineId, const std::string& dataType, const std::vector<SVDataItem>& dataItems) {
      auto& dataList = m_svDatas[machineId][dataType];
      dataList.insert(dataList.end(), dataItems.begin(), dataItems.end());
      if (dataList.size() > MAX_SV_DATA_KEEP) {
         dataList.erase(dataList.begin(), dataList.begin() + (dataList.size() - MAX_SV_DATA_KEEP));
      }
   }
   std::vector<SVDataItem> CGlass::getSVData(int machineId, const std::string& dataType) const {
@@ -515,7 +530,6 @@
      auto machineIt = m_svDatas.find(machineId);
      if (machineIt != m_svDatas.end()) {
         machineIt->second.erase(dataType);
         // 如果该机器没有其他数据了,也清除机器条目
         if (machineIt->second.empty()) {
            m_svDatas.erase(machineIt);
         }