From 006c98e5650b530e5220f279c1e803fefe69d40d Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期二, 25 十一月 2025 15:47:33 +0800
Subject: [PATCH] 优化一些东西;
---
Plugin.TestResult/SingleCell.xaml.cs | 264 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 252 insertions(+), 12 deletions(-)
diff --git a/Plugin.TestResult/SingleCell.xaml.cs b/Plugin.TestResult/SingleCell.xaml.cs
index 3886457..bf88c56 100644
--- a/Plugin.TestResult/SingleCell.xaml.cs
+++ b/Plugin.TestResult/SingleCell.xaml.cs
@@ -1,4 +1,7 @@
-锘縰sing HMI.Util;
+锘縰sing HMI.Core.Manager;
+using HMI.Core.Util;
+using HMI.UI.Util;
+using HMI.Util;
using Plugin.TestResult_WPF.Constant;
using Plugin.TestResult_WPF.Model;
using System;
@@ -38,31 +41,61 @@
private InfoWindow window;
private int maxSize;
+ private static string dataLogPath;
+ private static int ProbeWarn;
+
+ static SingleCell()
+ {
+ try
+ {
+ var value = ParameterManager.GetCommonParameterByName("TS_DataLogPath");
+ dataLogPath = value?.Value ?? Path.Combine(PathHelper.ConfigFolder, "DataBoard");
+ }
+ catch
+ {
+ dataLogPath = Path.Combine(PathHelper.ConfigFolder, "DataBoard");
+ }
+
+ try
+ {
+ var value = ParameterManager.GetCommonParameterByName("ProbeWarn");
+ ProbeWarn = value != null ? int.Parse(value.Value) : 1000;
+ }
+ catch
+ {
+ ProbeWarn = 1000;
+ }
+ }
+
public SingleCell()
{
DataContext = this;
InitializeComponent();
}
- public SingleCell(string parentName, int index, int maxSize, string iniFile)
+ private DataTable table;
+
+ public SingleCell(DataTable table, string title, int index, int maxSize, string iniFile)
{
- this.parentName = parentName;
+ this.table = table;
+ this.title = title;
this.index = index;
this.maxSize = maxSize;
this.countIniPath = iniFile;
+ this.probeWarn = ProbeWarn;
DataContext = this;
InitializeComponent();
LoadProbeCount();
}
- private string _parentName;
- public string parentName
+ private string _sn;
+ public string sn
{
- get { return _parentName; }
+ get { return _sn; }
set
{
- RaiseAndSetIfchanged(ref _parentName, value);
- RaisePropertyChanged("title");
+ RaiseAndSetIfchanged(ref _sn, value);
+ RaisePropertyChanged("sn");
}
}
@@ -78,7 +111,36 @@
}
}
- public string title => $"{parentName}{index + 1}";
+ private bool cellIsDisabled;
+
+ public bool CellIsDisabled
+ {
+ get { return cellIsDisabled; }
+ set
+ {
+ RaiseAndSetIfchanged(ref cellIsDisabled, value);
+ }
+ }
+
+ private string _title;
+ public string title
+ {
+ get => _title;
+ set
+ {
+ RaiseAndSetIfchanged(ref _title, value);
+ }
+ }
+
+ private int _probeWarn;
+ public int probeWarn
+ {
+ get => _probeWarn;
+ set
+ {
+ RaiseAndSetIfchanged(ref _probeWarn, value);
+ }
+ }
private string _status = CommonStatus.WAITING;
@@ -106,6 +168,8 @@
private ConcurrentQueue<Info> queue = new ConcurrentQueue<Info>();
+ private List<Info> allInfos = new List<Info>();
+
private ObservableCollection<Info> _infos = new ObservableCollection<Info>();
public ObservableCollection<Info> infos
@@ -129,6 +193,17 @@
set
{
RaiseAndSetIfchanged(ref probeCount, value);
+ probeAlarm = value >= probeWarn;
+ }
+ }
+
+ private bool _probeAlarm;
+ public bool probeAlarm
+ {
+ get => _probeAlarm;
+ set
+ {
+ RaiseAndSetIfchanged(ref _probeAlarm, value);
}
}
@@ -153,7 +228,7 @@
{
if (window == null)
{
- window = new InfoWindow(title, infos, electricChart, ProbeCount);
+ window = new InfoWindow(title, infos, electricChart, vChart, ProbeCount);
window.Closed += Window_Closed;
window.ClearProbeCountEvent += Window_ClearProbeCountEvent;
window.Owner = Window.GetWindow(this);
@@ -177,8 +252,9 @@
public void SetStatus(string status)
{
+ var oldStatus = this.status;
this.status = status;
- if (status == "testing")
+ if (oldStatus != "testing" && status == "testing")
{
UpdateProbeCount(ProbeCount + 1);
}
@@ -186,6 +262,7 @@
public void SetInfos(Info info)
{
+ allInfos.Add(info);
if (queue.Count >= maxSize)
{
queue.TryDequeue(out var first);
@@ -216,13 +293,18 @@
public void ClearInfo()
{
+ allInfos.Clear();
queue = new ConcurrentQueue<Info>();
var list = new ObservableCollection<Info>(queue);
this.infos = list;
if (window != null) window.UpdateSource(this.infos);
}
- private Chart electricChart = new Chart("鐢垫祦鏇茬嚎(A)", false, 20);
+ private Chart electricChart = new Chart("鐢垫祦鏇茬嚎(A)", false, 20)
+ {
+ Height = 150
+ };
+
public void AddElectricData(double data)
{
electricChart.AddData(data);
@@ -231,6 +313,21 @@
public void ClearElectricData()
{
electricChart.Clear();
+ }
+
+ private Chart vChart = new Chart("鐢靛帇鏇茬嚎(V)", false, 20)
+ {
+ Height = 150
+ };
+
+ public void AddVData(double data)
+ {
+ vChart.AddData(data);
+ }
+
+ public void ClearVData()
+ {
+ vChart.Clear();
}
public void SaveElectricDataToCSV(string filePath)
@@ -264,5 +361,148 @@
Console.WriteLine(ex.ToString());
}
}
+
+ public void SaveVDataToCSV(string filePath)
+ {
+ try
+ {
+ List<double> datas = vChart?.GetSingleData();
+
+ FileInfo fi = new FileInfo(filePath);
+ if (!fi.Directory.Exists)
+ {
+ fi.Directory.Create(); //鏂囦欢涓嶅瓨鍦紝鍒涘缓鏂囦欢
+ }
+
+ using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
+ using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8))
+ {
+ string title = "鐢靛帇鏁版嵁(V)";
+ sw.WriteLine(title);
+ if (datas != null)
+ {
+ for (int i = 0; i < datas.Count; i++)
+ {
+ sw.WriteLine(datas[i].ToString());
+ }
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ Console.WriteLine(ex.ToString());
+ }
+ }
+
+ /// <summary>
+ /// 淇濆瓨娴嬭瘯鏁版嵁鍒癈SV
+ /// </summary>
+ /// <param name="filePath"></param>
+ public void SaveInfoToCSV(string filePath)
+ {
+ try
+ {
+ FileInfo fi = new FileInfo(filePath);
+ if (!fi.Directory.Exists)
+ {
+ fi.Directory.Create(); //鏂囦欢涓嶅瓨鍦紝鍒涘缓鏂囦欢
+ }
+
+ using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
+ using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8))
+ {
+ string title = "娴嬭瘯椤�,娴嬭瘯鍊�,涓嬮檺,涓婇檺,鍗曚綅,缁撴灉,娴嬭瘯鏃堕棿";
+ sw.WriteLine(title);
+ foreach (var info in allInfos)
+ {
+ string row = $"{info.step},{info.value},{info.limitDown},{info.limitUp},{info.unit},{info.result},{info.updateTime}";
+ sw.WriteLine(row);
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ ViewControl.Logger.Error($"Cell[{title}] SaveInfoToCSV Error.", ex);
+ }
+ }
+
+ private SqliteHelper CheckSqlHelper()
+ {
+ string today = DateTime.Now.ToString("yyyyMMdd");
+ string dbPath = Path.Combine(dataLogPath, $"Data_{today}.db");
+ if (!File.Exists(dbPath))
+ {
+ SqliteHelper.CreateDatabase(dbPath);
+ }
+ var sqliteHelper = new SqliteHelper(dbPath);
+ sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS serialData (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ sn TEXT NOT NULL,
+ model TEXT,
+ station TEXT NOT NULL,
+ step TEXT NOT NULL,
+ position TEXT,
+ limitDown TEXT,
+ limitUp TEXT,
+ unit TEXT,
+ offset TEXT,
+ value TEXT,
+ status TEXT,
+ finalStatus TEXT,
+ consumeTime TEXT,
+ totalConsumeTime TEXT,
+ time DATETIME NOT NULL);");
+ sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS testResult (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ sn TEXT NOT NULL,
+ model TEXT,
+ station TEXT NOT NULL,
+ position TEXT,
+ status TEXT,
+ result TEXT NOT NULL,
+ time DATETIME NOT NULL);");
+ return sqliteHelper;
+ }
+
+ /// <summary>
+ /// 淇濆瓨娴嬭瘯鏁版嵁鍒癝qlite
+ /// </summary>
+ /// <param name="filePath"></param>
+ public void SaveInfoToDB()
+ {
+ try
+ {
+ using (var helper = CheckSqlHelper())
+ {
+ List<string> sqls = new List<string>();
+ var timestr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
+ foreach (var info in allInfos)
+ {
+ string sql = $@"INSERT INTO serialData (sn,station,step,limitDown,limitUp,unit,value,status,finalStatus,time)
+VALUES ('{sn}','','{info.step}','{info.limitDown}','{info.limitUp}','{info.unit}','{info.value}','{info.result}','{this.status}','{timestr}');";
+ sqls.Add(sql);
+ }
+ sqls.Add($"INSERT INTO testResult (sn,station,position,result,time) VALUES ('{sn}','','{title}','{this.status}','{timestr}');");
+ helper.ExecuteBatchSql(sqls);
+ }
+ }
+ catch (Exception ex)
+ {
+ ViewControl.Logger.Error($"Cell[{title}] SaveToDB Error.", ex);
+ }
+ }
+
+ private void MenuItem_Click(object sender, RoutedEventArgs e)
+ {
+ var item = sender as MenuItem;
+ switch (item?.Name)
+ {
+ case "clearSNRItem":
+ table.TryClearCellSN(this.index);
+ break;
+ default:
+ break;
+ }
+ }
}
}
--
Gitblit v1.9.1