From ef52fd6fd07508883dce4eb002acda59f0169e59 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期四, 23 四月 2026 10:19:33 +0800
Subject: [PATCH] 优化;

---
 Plugin.TestResult/DataTable.xaml.cs |  344 ++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 244 insertions(+), 100 deletions(-)

diff --git a/Plugin.TestResult/DataTable.xaml.cs b/Plugin.TestResult/DataTable.xaml.cs
index 71069df..4be9f27 100644
--- a/Plugin.TestResult/DataTable.xaml.cs
+++ b/Plugin.TestResult/DataTable.xaml.cs
@@ -1,22 +1,24 @@
-锘縰sing HMI.Core.Util;
+锘縰sing HMI.Base;
+using HMI.Core.Setting;
+using HMI.Core.Util;
+using HMI.LogUtil;
 using HMI.UI.Util;
 using HMI.Util;
 using Plugin.TestResult;
 using Plugin.TestResult.Util;
 using Plugin.TestResult_WPF.Model;
-using Plugin.TestResult_WPF.Util;
+using Plugin.TsSupport;
 using SuperSocket.SocketBase.Config;
 using SuperSocket.SocketBase.Protocol;
 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.IO;
-using System.Net.WebSockets;
 using System.Runtime.CompilerServices;
-using System.Threading.Tasks;
 using System.Timers;
 using System.Windows;
 using System.Windows.Controls;
+using System.Windows.Markup;
 
 namespace Plugin.TestResult_WPF
 {
@@ -64,6 +66,16 @@
             set => RaiseAndSetIfchanged(ref _isTesting, value);
         }
 
+        private ushort coolerStatus;
+        public ushort CoolerStatus
+        {
+            get => coolerStatus;
+            set
+            {
+                RaiseAndSetIfchanged(ref coolerStatus, value);
+            }
+        }
+
         private string tcpServerStatus;
 
         public string TcpServerStatus
@@ -79,17 +91,15 @@
             get { return tcpServerInfo; }
             set { RaiseAndSetIfchanged(ref tcpServerInfo, value); }
         }
-
-        private static ICodeParser codeParser;
-        private readonly int index;
-        private readonly int cellCount;
+        public int index { get; private set; }
+        public readonly int cellCount;
         private readonly string chartTitle;
-        private readonly TestResultView parent;
+        public readonly TestResultView parent;
 
         private BaseConfig config;
-        private Chart chart;
-        private Chart multiChart;
-        private SingleCell[] cells;
+        private LiveChart chart;
+        private LiveChart multiChart;
+        public SingleCell[] cells { get; private set; }
 
         private TcpServer tcpServer;
         private string CountIniPath;
@@ -114,12 +124,12 @@
             this.title = title;
             this.cellCount = config.PositionCount;
             this.cells = new SingleCell[cellCount];
-            this.chartTitle = config.MainChartTitle;
+            this.chartTitle = this.lang("Tr.AvgTemp");
             DataContext = this;
             InitializeComponent();
             mainGrid.Columns = config.PositionColumn;
-            this.chart = new Chart(this.chartTitle, false, config.MaxSize, config.RefreshInterval);
-            this.multiChart = new Chart(config.DetailChartTitle, true, config.MaxSize, config.RefreshInterval)
+            this.chart = new LiveChart("骞冲潎娓╁害,骞冲潎娓╁害(鈩�)", false, true);
+            this.multiChart = new LiveChart(",璇︾粏娓╁害(鈩�)", true)
             {
                 BorderThickness = new Thickness(0)
             };
@@ -138,19 +148,15 @@
                 cells[i] = cell;
             }
 
-            if (config.CodeParserType == "JK01")
-            {
-                codeParser = new JKCodeParser();
-            }
-            else
-            {
-                codeParser = new CommonCodeParser();
-            }
+            ScannerParser.Init(config.CodeParserType);
+
             ReadCount();
             testTimeTimer = new Timer();
             testTimeTimer.Interval = 10000;
             testTimeTimer.AutoReset = true;
             testTimeTimer.Elapsed += TestTimeTimer_Elapsed;
+            if (!ParamSetting.ShowCoolerSetting) coolerSetting.Visibility = Visibility.Collapsed;
+            if (!ParamSetting.ShowBurnInAbort) abortBtn.Visibility = Visibility.Collapsed;
         }
 
         private void TestTimeTimer_Elapsed(object sender, ElapsedEventArgs e)
@@ -159,7 +165,7 @@
             var now = DateTime.Now;
             Dispatcher.BeginInvoke(new Action(() =>
             {
-                SetConsumeTime((now - testStartTime).Value.TotalSeconds);
+                //SetConsumeTime((now - testStartTime).Value.TotalSeconds);
             }));
         }
 
@@ -182,23 +188,25 @@
         {
             infoTable.temperature = t;
             tempratures.Add(t);
-            chart.AddData(t);
+            chart.AddDynamicData("骞冲潎娓╁害", "骞冲潎娓╁害(鈩�)", DateTime.Now, t);
         }
 
         public void SetTemperature(string name, double t)
         {
-            List<double> list;
-            if (detailTempratures.ContainsKey(name))
-            {
-                list = detailTempratures[name];
-            }
-            else
-            {
-                list = new List<double>();
-                detailTempratures.Add(name, list);
-            }
-            list.Add(t);
-            multiChart.AddData(name, t);
+            //List<double> list;
+            //if (detailTempratures.ContainsKey(name))
+            //{
+            //    list = detailTempratures[name];
+            //}
+            //else
+            //{
+            //    list = new List<double>();
+            //    detailTempratures.Add(name, list);
+            //}
+            //list.Add(t);
+
+            multiChart.AddDynamicData(name, "璇︾粏娓╁害(鈩�)", DateTime.Now, t);
+            //multiChart.AddData(name, t);
         }
 
         public void SetStatus(string status)
@@ -224,20 +232,20 @@
                 }
                 infoTable.status = status;
 
-                if (lastStatus != "testing" && status == "testing")
-                {
-                    testStartTime = DateTime.Now;
-                    SetStartTime(testStartTime?.ToString("yyyy-MM-dd HH:mm:ss"));
-                    testTimeTimer.Start();
-                }
-                if (lastStatus == "testing" && status != "testing")
-                {
-                    testTimeTimer.Stop();
-                    var now = DateTime.Now;
-                    SetConsumeTime((now - testStartTime).Value.TotalSeconds);
-                    SetEndTime(now.ToString("yyyy-MM-dd HH:mm:ss"));
-                    testStartTime = null;
-                }
+                //if (lastStatus != "testing" && status == "testing")
+                //{
+                //    testStartTime = DateTime.Now;
+                //    SetStartTime(testStartTime?.ToString("yyyy-MM-dd HH:mm:ss"));
+                //    testTimeTimer.Start();
+                //}
+                //if (lastStatus == "testing" && status != "testing")
+                //{
+                //    testTimeTimer.Stop();
+                //    var now = DateTime.Now;
+                //    infoTable.UpdateConsumeTime((now - testStartTime).Value.TotalSeconds, null);
+                //    SetEndTime(now.ToString("yyyy-MM-dd HH:mm:ss"));
+                //    testStartTime = null;
+                //}
             }));
         }
 
@@ -261,9 +269,9 @@
             infoTable.endTimeStr = endTime;
         }
 
-        public void SetConsumeTime(double consumeTime)
+        public void UpdateConsumeTime(double consumeTime, double? leftTime)
         {
-            infoTable.consumeTime = consumeTime;
+            infoTable.UpdateConsumeTime(consumeTime, leftTime);
         }
 
         private ChartWindow window;
@@ -301,15 +309,44 @@
         {
             if (IsTesting)
             {
-                if (MsgBoxHelper2.WarnChoose($"纭疄鍋滄鑰佸寲鐐塠{title}]鐨勬祴璇曞悧") == MessageBoxResult.OK)
+                if (MsgBoxHelper2.WarnChoose(this.lang("Tr.MakeSureStopOvenTest", title)) == MessageBoxResult.OK)
                 {
+                    LogHelper.Info("UI", $"鑰佸寲鐐塠{title}]鍋滄鎸夐挳鎸変笅", out _);
+                    ViewControl.Logger.Info($"鑰佸寲鐐塠{title}]鍋滄鎸夐挳鎸変笅");
                     parent.SetStartFlag(this.index, false);
                 }
             }
             else
             {
-                ClearChartData();
-                parent.SetStartFlag(this.index, true);
+                /// 妫�鏌ユ槸鍚﹀叧闂�
+                if (parent.executionWrapper?.GetStationGlobalValue<bool>($"StationState.DoorClose[{this.index}]", 0) != true)
+                {
+                    /// 娌″叧闂ㄤ笉鍏佽鍚姩
+                    MsgBoxHelper2.Warn("璇峰厛鍏抽棴鑸遍棬锛�");
+                    return;
+                }
+
+                /// 妫�鏌ユ槸鍚︽湁鏉$爜
+                bool flag = false;
+                foreach (var cell in cells)
+                {
+                    if (!string.IsNullOrEmpty(cell.sn))
+                    {
+                        flag = true;
+                        break;
+                    }
+                }
+                if (flag)
+                {
+                    LogHelper.Info("UI", $"鑰佸寲鐐塠{title}]鍚姩鎸夐挳鎸変笅", out _);
+                    ViewControl.Logger.Info($"鑰佸寲鐐塠{title}]鍚姩鎸夐挳鎸変笅");
+                    ClearChartData();
+                    parent.SetStartFlag(this.index, true);
+                }
+                else
+                {
+                    MsgBoxHelper2.Warn("璇峰厛瀹屾垚鎵爜锛�");
+                }
             }
         }
 
@@ -317,7 +354,7 @@
         {
             if (!parent.IsRunning)
             {
-                MsgBoxHelper.WarnMessage(this, "璇峰厛鐐瑰嚮鍙充晶鍚姩鎸夐挳鍚姩娴嬭瘯绋嬪簭锛�", null, MessageBoxButton.OK);
+                MsgBoxHelper.WarnMessage(this, this.lang("Tr.StartSeqFirst"), null, MessageBoxButton.OK);
                 return;
             }
 
@@ -327,7 +364,8 @@
             }
             else
             {
-                scanner = new Scanner(this.lang("Tr.ScanTitle", title))
+                int rows = config.CellCount / config.PositionColumn + 1;
+                scanner = new Scanner(this.index, this.lang("Tr.ScanTitle", title), CbProduct.SelectedItem?.ToString(), mainGrid.Columns, rows)
                 {
                     Owner = Window.GetWindow(this),
                     Tag = title
@@ -342,8 +380,9 @@
         private void Scanner_ComplateClick(object sender, RoutedEventArgs e)
         {
             string paramName = $"StationState.Scanner[{index}]";
-            parent.engine.Globals.SetValBoolean(paramName, 1, true);
-            //parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+
+            parent.executionWrapper.SetStationGlobalValue<bool>(paramName, 1, true);
+            //parent.engine.Globals.SetValBoolean(paramName, 1, true);
         }
 
         private void Scanner_Closed(object sender, EventArgs e)
@@ -353,34 +392,38 @@
 
         private void Scanner_FinishBarcode(object sender, BarcodeEventArg e)
         {
-            if (parent.SequenceContext == null) return;
+            if (parent.executionWrapper == null) return;
+            //if (parent.SequenceContext == null) return;
 
-            CellInfo cellInfo = codeParser.GetCellInfoByCode(e.positionCode);
+            int rows = (config.CellCount / config.PositionColumn) + 1;
+            CellInfo cellInfo = ScannerParser.GetCellInfoByCode(CbProduct.SelectedItem?.ToString(), mainGrid.Columns, rows, e.positionCode);
             string positionCode = e.positionCode, snrCode = e.snrCode;
 
             //灏嗚鍒扮殑鏉$爜鍐欏叆鍒癝N涓�
             int dutNo = this.index * this.cellCount + cellInfo.Index;
 
             string LookupStr = $"StationState.SN[{dutNo}]";
+            cellInfo.LookUpStr = LookupStr;
 
             ViewControl.Logger.Debug($"PositionCode: [{e.positionCode}], SNR: [{e.snrCode}], LookUpStr: [{LookupStr}]");
             ViewControl.Logger.Debug($"OvenName: [{cellInfo.OvenName}], CellIndex: [{cellInfo.Index}]");
-            var cell = parent.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index);
+            var cell = TestResultView.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index);
             if (snrCode == null)
             {
-                string oldLookUp = $"StationState.SN[{e.oldIndex}]";
-                var oldCellInfo = codeParser.GetCellInfoByCode(e.oldPosition);
-                var oldCell = parent.nameTables[oldCellInfo.OvenName].GetSingleCell(oldCellInfo.Index);
+                var oldCellInfo = e.lastInfo;
+                var oldCell = TestResultView.nameTables[oldCellInfo.OvenName].GetSingleCell(oldCellInfo.Index);
                 if (oldCell.status != "hadCode")
                 {
-                    throw new Exception($"绌翠綅[{e.oldPosition}]褰撳墠涓嶅厑璁告竻闄ゆ潯鐮�!");
+                    throw new Exception(this.lang("Tr.PositionCantClearSNR", oldCellInfo.OriginCode));
                 }
                 // 绉婚櫎鏉$爜
-                parent.engine.Globals.SetValString(oldLookUp, 1, "");
-                parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+                parent.executionWrapper.SetStationGlobalValue<string>(oldCellInfo.LookUpStr, 1, "");
+                parent.executionWrapper.CommitToDisk(false);
 
+                //parent.engine.Globals.SetValString(oldCellInfo.LookUpStr, 1, "");
+                //parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
                 oldCell.SetStatus("waiting");
-                oldCell.sn = "";
+                oldCell.ClearSN();
                 return;
             }
 
@@ -392,12 +435,24 @@
             }
 
             // 鍐欏叆鏉$爜
-            parent.engine.Globals.SetValString(LookupStr, 1, snrCode);
-            parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+            parent.executionWrapper.SetStationGlobalValue<string>(LookupStr, 1, snrCode);
+            parent.executionWrapper.CommitToDisk(false);
 
-            parent.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index).SetStatus("hadCode");
-            parent.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index).sn = snrCode;
-            Scanner.InsertNewCode(snrCode, positionCode, dutNo);
+            //parent.engine.Globals.SetValString(LookupStr, 1, snrCode);
+            //parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+
+            TestResultView.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index).SetStatus("hadCode");
+            TestResultView.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index).sn = snrCode;
+            Scanner.InsertNewCode(snrCode, cellInfo);
+            var light = $"Oven{this.index + 1}_Cell{cell.index + 1}_Light_OK";
+            if (cell.LightGreen(true, out string msg))
+            {
+                ViewControl.Logger.Debug($"Open Light [{light}] ON.");
+            }
+            else
+            {
+                ViewControl.Logger.Debug($"Open Light [{light}] Error.{msg}");
+            }
         }
 
 
@@ -518,8 +573,6 @@
             string strs = datas_10015[2];
             string[] values = strs.Split(',');
 
-            //string step = datas_10015[2];
-            //string result = datas_10015[3];
             GetSingleCell(cellIndex).SetInfos(new Info
             {
                 step = values[0],
@@ -536,10 +589,18 @@
         public void RefreshCount(int ok, int ng)
         {
             infoTable.UpdateNumber(infoTable.okCount + ok, infoTable.ngCount + ng);
-            IniFileHelper.WriteIniData($"Oven_{index}", "Pass", infoTable.okCount.ToString(),
-                this.CountIniPath);
-            IniFileHelper.WriteIniData($"Oven_{index}", "Fail", infoTable.ngCount.ToString(),
-                this.CountIniPath);
+
+            if (ParamSetting.ProbeByModel)
+            {
+
+            }
+            else
+            {
+                IniFileHelper.WriteIniData($"Oven_{index}", "Pass", infoTable.okCount.ToString(),
+                   this.CountIniPath);
+                IniFileHelper.WriteIniData($"Oven_{index}", "Fail", infoTable.ngCount.ToString(),
+                    this.CountIniPath);
+            }
         }
 
         /// <summary>
@@ -595,7 +656,7 @@
                 using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
                 using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8))
                 {
-                    string title = string.Join(",", detailTempratures.Keys) + ",骞冲潎鍊�";
+                    string title = string.Join(",", detailTempratures.Keys) + "," + this.lang("Tr.AvgTemp");
                     sw.WriteLine(title);
 
                     for (int i = 0; i < tempratures.Count; i++)
@@ -644,23 +705,45 @@
             {
                 parent.SetOvenProduct(index, "");
             }
-        }
 
-        public void ClearElectricData()
-        {
             foreach (var cell in cells)
             {
-                cell.ClearElectricData();
+                cell.RefreshProbe();
+                cell.RefreshCharts();
             }
         }
 
-        public void ClearVData()
+        public void ClearCellData()
         {
             foreach (var cell in cells)
             {
-                cell.ClearVData();
+                cell.ClearChart();
             }
         }
+
+        //public void ClearElectricData()
+        //{
+        //    foreach (var cell in cells)
+        //    {
+        //        cell.ClearElectricData();
+        //    }
+        //}
+
+        //public void ClearVData()
+        //{
+        //    foreach (var cell in cells)
+        //    {
+        //        cell.ClearVData();
+        //    }
+        //}
+
+        //public void ClearWaterData()
+        //{
+        //    foreach (var cell in cells)
+        //    {
+        //        cell.ClearWaterData();
+        //    }
+        //}
 
         private void Button_Click_1(object sender, RoutedEventArgs e)
         {
@@ -671,12 +754,42 @@
             setting.Open(true, this.title);
         }
 
+        private void Manual_Cooler_Opt(object sender, RoutedEventArgs e)
+        {
+            //var btn = (Button)sender;
+            //var target = CoolerStatus == 2 ? 0 : 2;
+            //if (MsgBoxHelper2.WarnChoose($"纭畾瑕佽繘琛寋btn.Content}鍚楋紵") == MessageBoxResult.OK)
+            //{
+            //    if (S7Context.WriteData("1", $"Oven{index + 1}_CoolerStatus", (ushort)target, out string msg))
+            //    {
+            //        CoolerStatus = (ushort)target;
+            //        ToastHelper.Success("Success");
+            //    }
+            //    else
+            //    {
+            //        ToastHelper.Error($"{msg}");
+            //    }
+            //}
+            if (parent.IsRunning)
+            {
+                MsgBoxHelper2.Warn(this.lang("Tr.CantOptCooler"));
+                return;
+            }
+            var columns = mainGrid.Columns;
+            var window = new CoolerStatus(this.index, columns, title + this.lang("Tr.CoolerSetting"))
+            {
+
+                Owner = Window.GetWindow(this)
+            };
+            window.ShowDialog();
+        }
+
         private void ClearAllSnr_Click(object sender, RoutedEventArgs e)
         {
-            var str = $"StationState.DoorClose[{index}]";
-            if (parent.engine.Globals.GetValBoolean(str, 0) == true)
+            if (parent.executionWrapper?.GetStationGlobalValue<bool>($"StationState.DoorClose[{this.index}]", 0) == true)
             {
-                MsgBoxHelper.Error(Window.GetWindow(this), "绋嬪簭杩愯涓紝涓嶈兘娓呯┖鏉$爜");
+                /// 鍏抽棬浜嗗氨涓嶅厑璁告竻鏉$爜
+                MsgBoxHelper2.Warn(this.lang("Tr.CantClearSNR"));
                 return;
             }
 
@@ -705,10 +818,9 @@
 
         public void TryClearCellSN(int cellIndex)
         {
-            var str = $"StationState.DoorClose[{this.index}]";
-            if (parent.engine.Globals.GetValBoolean(str, 0) == true)
+            if (parent.executionWrapper?.GetStationGlobalValue<bool>($"StationState.DoorClose[{this.index}]", 0) == true)
             {
-                MsgBoxHelper.Error(Window.GetWindow(this), "绋嬪簭杩愯涓紝涓嶈兘娓呯┖鏉$爜");
+                MsgBoxHelper.Error(Window.GetWindow(this), this.lang("Tr.CantClearSNR"));
                 return;
             }
             ClearCellSN(cellIndex);
@@ -720,19 +832,51 @@
             int dutNo = this.index * this.cellCount + index;
             string LookupStr = $"StationState.SN[{dutNo}]";
             var lastSN = cell.sn;
-            cell.sn = "";
             cell.SetStatus("waiting");
-            parent.engine.Globals.SetValString(LookupStr, 1, "");
-            parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+
+            parent.executionWrapper.SetStationGlobalValue<string>(LookupStr, 1, "");
+            parent.executionWrapper.CommitToDisk(false);
+
+            //parent.engine.Globals.SetValString(LookupStr, 1, "");
+            //parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
             if (!string.IsNullOrEmpty(lastSN)) Scanner.RemoveSNR(lastSN);
+            cell.ClearSN();
         }
 
-        private void Button_Click_2(object sender, RoutedEventArgs e)
+        private void Abort_Click(object sender, RoutedEventArgs e)
         {
-            if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), "纭畾瑕佸仠姝㈣鐐変綅鐨勮�佸寲娴嬭瘯鍚楋紵") == MessageBoxResult.OK)
+            if (!parent.IsRunning)
             {
-                parent.SetStartFlag(this.index, false);
+                MsgBoxHelper.WarnMessage(this, this.lang("Tr.StartSeqFirst"), null, MessageBoxButton.OK);
+                return;
             }
+
+
+
+
+            string key = $"StationState.Start[{this.index}]";
+            //if (parent.executionWrapper?.GetStationGlobalValue<bool>(key, 0) == true)
+            //{
+            //    MsgBoxHelper2.Warn("娴嬭瘯鍚姩涓紝涓嶅厑璁窤bort");
+            //    return;
+            //}
+            var win = new RequirePasswordByUser("admin")
+            {
+                Owner = Window.GetWindow(this)
+            };
+            if (win.ShowDialog() != true)
+            {
+                return;
+            }
+
+            if (MsgBoxHelper2.WarnChoose("璇风‘璁よ�佸寲浠撳湪瀹夊叏娓╁害锛屾按鍐锋満鍚规按瀹屾垚锛屽崟鍑籓K鎸夐挳浠撲綅鍥炲埌鍒濆鍖栫姸鎬�") != MessageBoxResult.OK)
+            {
+                return;
+            }
+            LogHelper.Info("UI", "Abort鎸夐挳鎸変笅", out _);
+            ViewControl.Logger.Info("Abort鎸夐挳鎸変笅");
+            key = $"StationState.Abort[{this.index}]";
+            parent.executionWrapper?.SetStationGlobalValue(key, 0, true);
         }
     }
 }

--
Gitblit v1.9.1