| | |
| | | #include "stdafx.h" |
| | | #include "stdafx.h" |
| | | #include "CGlass.h" |
| | | #include "Log.h" |
| | | |
| | |
| | | if (s.size() > maxLen) s.resize(maxLen); |
| | | } |
| | | |
| | | // —— 时间戳 & 工具 —— |
| | | // 状态时间戳:排队/开始/结束 |
| | | void CGlass::markQueued() |
| | | { |
| | | m_state = GlsState::Queued; |
| | |
| | | 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 { |
| | |
| | | auto machineIt = m_svDatas.find(machineId); |
| | | if (machineIt != m_svDatas.end()) { |
| | | machineIt->second.erase(dataType); |
| | | // 如果该机器没有其他数据了,也清除机器条目 |
| | | if (machineIt->second.empty()) { |
| | | m_svDatas.erase(machineIt); |
| | | } |