From 829fe6c6bc33d53fda9c31fd45a37e1df87befff Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 30 一月 2026 11:16:24 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang
---
SourceCode/Bond/Servo/CPageGlassList.cpp | 120 +++++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 78 insertions(+), 42 deletions(-)
diff --git a/SourceCode/Bond/Servo/CPageGlassList.cpp b/SourceCode/Bond/Servo/CPageGlassList.cpp
index cbe79ed..29b3b23 100644
--- a/SourceCode/Bond/Servo/CPageGlassList.cpp
+++ b/SourceCode/Bond/Servo/CPageGlassList.cpp
@@ -13,6 +13,7 @@
#include <unordered_map>
#include <vector>
#include <string>
+#include <algorithm>
#include "CProcessDataListDlg.h"
#define PAGE_SIZE 50
@@ -1087,9 +1088,10 @@
{
CDialogEx::OnInitDialog();
- // 瀹氭椂鍣細1=鍒濆鍖栬闃咃紝2=鍛ㄦ湡鍒锋柊锛堝彧澧為噺锛�
+ // 瀹氭椂鍣細1=鍒濆鍖栬闃咃紝2=鍛ㄦ湡鍒锋柊锛堝彧澧為噺锛夛紝3=寤惰繜鍔犺浇棣栧睆鏁版嵁
SetTimer(1, 3000, nullptr);
SetTimer(2, 2000, nullptr);
+ SetTimer(3, 10, nullptr);
// 涓嬫媺妗嗘帶浠�
InitStatusCombo();
@@ -1139,7 +1141,6 @@
m_listCtrl.SetPopupFullTextColumns({ 11, 12 });
Resize();
- OnBnClickedButtonSearch(); // 瑙﹀彂涓�娆℃煡璇笌棣栧睆濉厖
return TRUE; // return TRUE unless you set the focus to a control
}
@@ -1199,6 +1200,10 @@
else if (nIDEvent == 2) {
UpdateWipData(); // 鍙仛澧為噺锛屼笉閲嶅缓
}
+ else if (nIDEvent == 3) {
+ KillTimer(3);
+ OnBnClickedButtonSearch(); // 寤惰繜棣栧睆鏌ヨ锛岄伩鍏嶅崱浣� OnInitDialog
+ }
CDialogEx::OnTimer(nIDEvent);
}
@@ -1228,6 +1233,8 @@
void CPageGlassList::OnBnClickedButtonSearch()
{
+ CWaitCursor wait; // 鏄剧ず绛夊緟鍏夋爣锛屾彁绀烘鍦ㄥ姞杞�
+
// 鑾峰彇鍏抽敭瀛楄緭鍏ユ鍐呭
CString strKeyword;
GetDlgItemText(IDC_EDIT_KEYWORD, strKeyword);
@@ -1363,7 +1370,7 @@
if (!row.pretty.empty()) {
CFile file;
if (file.Open(filePath, CFile::modeCreate | CFile::modeWrite)) {
- file.Write(row.pretty.c_str(), row.pretty.length());
+ file.Write(row.pretty.c_str(), (UINT)row.pretty.length());
file.Close();
CString strSuccess;
@@ -1481,69 +1488,59 @@
// 瀵规瘡涓満鍣ㄧ敓鎴愯〃鏍�
for (const auto& machinePair : tempGlass.getAllSVData()) {
int machineId = machinePair.first;
+ const auto& dataByType = machinePair.second;
CString machineName = CString(SERVO::CServoUtilsTool::getEqName(machineId).c_str());
csvContent += _T("\n[") + machineName + _T("]\n");
- // 鑾峰彇璇ユ満鍣ㄧ殑棰勫畾涔夊垪椤哄簭
- auto columnOrder = getMachineColumnOrder(machineId);
-
- if (columnOrder.empty()) {
- csvContent += _T("鏃犻瀹氫箟鍒楅厤缃甛n");
+ if (dataByType.empty()) {
+ csvContent += _T("No sensor data\n");
continue;
}
- // 鏋勫缓琛ㄥご - 鐩存帴浣跨敤涓枃鍒楀悕
- CString header = _T("鏃堕棿鎴�(ms),鏈湴鏃堕棿");
+ auto columnOrder = getMachineColumnOrder(machineId, &dataByType);
+ if (columnOrder.empty()) {
+ csvContent += _T("No exportable columns\n");
+ continue;
+ }
+
+ CString header = _T("Timestamp(ms),LocalTime");
for (const auto& dataType : columnOrder) {
header += _T(",");
- header += CString(dataType.c_str()); // 鐩存帴浣跨敤涓枃鍒楀悕
+ header += CString(dataType.c_str());
}
header += _T("\n");
csvContent += header;
- // 妫�鏌ユ槸鍚︽湁鏁版嵁
- if (machinePair.second.empty()) {
- csvContent += _T("鏃犱紶鎰熷櫒鏁版嵁\n");
+ auto baselineIt = std::find_if(columnOrder.begin(), columnOrder.end(),
+ [&](const std::string& type) {
+ auto dataIt = dataByType.find(type);
+ return dataIt != dataByType.end() && !dataIt->second.empty();
+ });
+ if (baselineIt == columnOrder.end()) {
+ csvContent += _T("No usable time series\n");
continue;
}
- // 浣跨敤绗竴涓暟鎹被鍨嬬殑鏃堕棿搴忓垪浣滀负鍩哄噯
- const std::string& firstDataType = columnOrder[0];
- auto firstDataTypeIt = machinePair.second.find(firstDataType);
- if (firstDataTypeIt == machinePair.second.end() || firstDataTypeIt->second.empty()) {
- csvContent += _T("鏃犲熀鍑嗘暟鎹被鍨嬫暟鎹甛n");
- continue;
- }
-
- const auto& timeSeries = firstDataTypeIt->second;
-
- // 瀵逛簬姣忎釜鏃堕棿鐐癸紝杈撳嚭涓�琛屾暟鎹�
- for (size_t i = 0; i < timeSeries.size(); i++) {
+ const auto& timeSeries = dataByType.at(*baselineIt);
+ for (size_t i = 0; i < timeSeries.size(); ++i) {
auto timestamp = timeSeries[i].timestamp;
-
- // 鏃堕棿鎴筹紙姣锛�
auto ms = timePointToMs(timestamp);
CString row;
row.Format(_T("%lld,"), ms);
- // 鏈湴鏃堕棿瀛楃涓�
CString localTime = CString(timePointToString(timestamp).c_str());
row += localTime;
- // 鎸夌収棰勫畾涔夌殑鍒楅『搴忚緭鍑烘暟鎹�
for (const auto& dataType : columnOrder) {
row += _T(",");
-
- auto dataTypeIt = machinePair.second.find(dataType);
- if (dataTypeIt != machinePair.second.end() && i < dataTypeIt->second.size()) {
- // 鐩存帴鎸夌储寮曡幏鍙栨暟鎹�
+ auto dataTypeIt = dataByType.find(dataType);
+ if (dataTypeIt != dataByType.end() && i < dataTypeIt->second.size()) {
CString valueStr;
valueStr.Format(_T("%.3f"), dataTypeIt->second[i].value);
row += valueStr;
}
else {
- // 鐞嗚涓婁笉搴旇鍙戠敓锛屽洜涓烘偍璇存病鏈夌┖鍊�
row += _T("N/A");
}
}
@@ -1582,9 +1579,14 @@
auto* p = reinterpret_cast<NMC_ELC_SHOWFULLTEXT*>(pNMHDR);
// 瀵硅瘽妗嗘樉绀哄伐鑹哄弬鏁�
- CProcessDataListDlg dlg;
- dlg.setRawText(p->text);
- dlg.DoModal();
+ if (p->iSubItem == 12) {
+ CProcessDataListDlg dlg;
+ dlg.setRawText(p->text);
+ dlg.DoModal();
+ }
+ else {
+ AfxMessageBox(p->text);
+ }
*pResult = 0;
}
@@ -1919,11 +1921,33 @@
}
// 鑾峰彇鏈哄櫒棰勫畾涔夌殑鍒楅『搴�
-std::vector<std::string> CPageGlassList::getMachineColumnOrder(int machineId)
+std::vector<std::string> CPageGlassList::getMachineColumnOrder(int machineId,
+ const std::unordered_map<std::string, std::vector<SERVO::SVDataItem>>* actualData)
{
+ std::vector<std::string> columnOrder;
auto dataTypes = SERVO::CServoUtilsTool::getEqDataTypes();
auto it = dataTypes.find(machineId);
- return it != dataTypes.end() ? it->second : std::vector<std::string>();
+
+ if (actualData != nullptr) {
+ if (it != dataTypes.end()) {
+ for (const auto& name : it->second) {
+ if (actualData->find(name) != actualData->end()) {
+ columnOrder.push_back(name);
+ }
+ }
+ }
+ for (const auto& kv : *actualData) {
+ if (std::find(columnOrder.begin(), columnOrder.end(), kv.first) == columnOrder.end()) {
+ columnOrder.push_back(kv.first);
+ }
+ }
+ return columnOrder;
+ }
+
+ if (it != dataTypes.end()) {
+ columnOrder = it->second;
+ }
+ return columnOrder;
}
// 鏃堕棿鎴宠浆鎹负瀛楃涓�
@@ -1953,13 +1977,25 @@
for (const auto& machinePair : dataTypes) {
int machineId = machinePair.first;
const auto& dataTypeList = machinePair.second;
+ std::vector<std::string> filteredTypes;
+
+ if (machineId == EQ_ID_VACUUMBAKE || machineId == EQ_ID_BAKE_COOLING) {
+ const char activePrefix = 'A';
+ for (const auto& dataType : dataTypeList) {
+ if (!dataType.empty() && dataType[0] == activePrefix) {
+ filteredTypes.push_back(dataType);
+ }
+ }
+ }
+
+ const auto& typeList = filteredTypes.empty() ? dataTypeList : filteredTypes;
// 鐢熸垚鏃堕棿搴忓垪锛氫粠褰撳墠鏃堕棿寰�鍓嶆帹10鍒嗛挓锛屾瘡1绉掍竴涓暟鎹偣
auto now = std::chrono::system_clock::now();
auto startTime = now - std::chrono::minutes(10);
// 涓烘瘡涓暟鎹被鍨嬬敓鎴愭ā鎷熸暟鎹�
- for (const auto& dataType : dataTypeList) {
+ for (const auto& dataType : typeList) {
std::vector<SERVO::SVDataItem> mockData;
// 鐢熸垚600涓暟鎹偣锛�10鍒嗛挓 * 60涓偣/鍒嗛挓锛�
@@ -2029,4 +2065,4 @@
double randomNoise = (rand() % 100 - 50) / 100.0 * variation * 0.3; // 闅忔満鍣0
return baseValue + timeTrend + randomNoise;
-}
\ No newline at end of file
+}
--
Gitblit v1.9.3