From c1c3772a11b1f3fbad8846cc714120771d85fa53 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期四, 12 六月 2025 20:10:59 +0800
Subject: [PATCH] 新增SeqEditor

---
 Plugin.TestResult/DataTable.xaml.cs |  293 +++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 265 insertions(+), 28 deletions(-)

diff --git a/Plugin.TestResult/DataTable.xaml.cs b/Plugin.TestResult/DataTable.xaml.cs
index e43375f..200341f 100644
--- a/Plugin.TestResult/DataTable.xaml.cs
+++ b/Plugin.TestResult/DataTable.xaml.cs
@@ -1,11 +1,15 @@
-锘縰sing Plugin.TestResult_WPF.Model;
+锘縰sing HMI.Core.Util;
+using HMI.Util;
+using Plugin.TestResult;
+using Plugin.TestResult_WPF.Model;
+using Plugin.TestResult_WPF.Util;
 using SuperSocket.SocketBase.Protocol;
 using System;
+using System.CodeDom.Compiler;
+using System.Collections.Generic;
 using System.ComponentModel;
-using System.Net;
-using System.Net.Sockets;
+using System.IO;
 using System.Runtime.CompilerServices;
-using System.Threading;
 using System.Windows;
 using System.Windows.Controls;
 
@@ -55,7 +59,7 @@
             set { RaiseAndSetIfchanged(ref tcpServerStatus, value); }
         }
 
-        private string tcpServerInfo = "鏈惎鍔�";
+        private string tcpServerInfo = LangUtil.Get("App.NotStarted");
 
         public string TcpServerInfo
         {
@@ -63,7 +67,7 @@
             set { RaiseAndSetIfchanged(ref tcpServerInfo, value); }
         }
 
-
+        private static CommonCodeParser codeParser = new CommonCodeParser();
         private readonly int index;
         private readonly int cellCount;
         private readonly string chartTitle;
@@ -75,9 +79,18 @@
         private SingleCell[] cells;
 
         private TcpServer tcpServer;
+        private string CountIniPath;
 
-        public DataTable(TestResultView parent,int index, string title, BaseConfig config)
+        // 骞冲潎娓╁害
+        public List<double> tempratures = new List<double>();
+        public Dictionary<string, List<double>> detailTempratures
+            = new Dictionary<string, List<double>>();
+
+        public DataTable(TestResultView parent, int index, string title,
+            string countIniPath,
+            BaseConfig config)
         {
+            this.CountIniPath = countIniPath;
             this.config = config;
             this.index = index;
             this.parent = parent;
@@ -87,18 +100,23 @@
             this.chartTitle = config.MainChartTitle;
             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.multiChart = new Chart(config.DetailChartTitle, true, config.MaxSize, config.RefreshInterval)
+            {
+                BorderThickness = new Thickness(0)
+            };
             this.grid.Children.Add(this.chart);
             Grid.SetRow(this.chart, 2);
             this.chart.MouseDoubleClick += chart_MouseDoubleClick;
 
             for (int i = 0; i < this.cellCount; i++)
             {
-                var cell = new SingleCell(title, i, config.CellListMaxSize);
+                var cell = new SingleCell(title, i, config.CellListMaxSize, countIniPath);
                 mainGrid.Children.Add(cell);
                 cells[i] = cell;
             }
+            ReadCount();
         }
 
         public int GetSize()
@@ -119,11 +137,23 @@
         public void SetTemperature(double t)
         {
             infoTable.temperature = t;
+            tempratures.Add(t);
             chart.AddData(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);
         }
 
@@ -176,6 +206,8 @@
             }
         }
 
+        private Scanner scanner;
+
         private void Window_Closed(object sender, EventArgs e)
         {
             window = null;
@@ -187,6 +219,52 @@
             parent.SetStartFlag(this.index, true);
         }
 
+        private void ScanWindow_Click(object sender, RoutedEventArgs e)
+        {
+            if (scanner != null)
+            {
+                scanner.Activate();
+            }
+            else
+            {
+                scanner = new Scanner(this.lang("Tr.ScanTitle", title))
+                {
+                    Tag = title
+                };
+                scanner.FinishBarcode += Scanner_FinishBarcode;
+                scanner.Closed += Scanner_Closed;
+                scanner.Show();
+            }
+        }
+
+        private void Scanner_Closed(object sender, EventArgs e)
+        {
+            scanner = null;
+        }
+
+        private void Scanner_FinishBarcode(object sender, BarcodeEventArg e)
+        {
+            if (parent.SequenceContext == null) return;
+            CellInfo cellInfo = codeParser.GetCellInfoByCode(e.positionCode);
+
+            string paramName = $"StationState.StartScanner_{title}";
+            parent.engine.Globals.SetValBoolean(paramName, 0, true);
+            string positionCode = e.positionCode, snrCode = e.snrCode;
+            //TODO 闇�瑕佸鍔犳潯鐮佹牎楠屽姛鑳�
+
+            //灏嗚鍒扮殑鏉$爜鍐欏叆鍒癝N涓�
+            int dutNo = Convert.ToInt16(positionCode.Split('-')[2]) - 1;
+            dutNo = this.index * this.cellCount + dutNo;
+
+            string LookupStr = $"StationState.SN[{dutNo}]";
+
+            parent.engine.Globals.SetValString(LookupStr, 0, snrCode);
+            parent.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+            string code = parent.engine.Globals.GetValString(LookupStr, 0);
+            parent.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index).SetStatus("hadCode");
+        }
+
+
         /// <summary>
         /// 娓呯┖涓や釜鍥捐〃鏁版嵁
         /// </summary>
@@ -194,8 +272,14 @@
         {
             chart.Clear();
             multiChart.Clear();
+
+            tempratures.Clear();
+            detailTempratures.Clear();
         }
 
+        /// <summary>
+        /// 鍚姩Tcp鏈嶅姟鍣�
+        /// </summary>
         private void StartTcpServer()
         {
             try
@@ -206,39 +290,44 @@
                     tcpServer.NewRequestReceived += TcpServer_NewRequestReceived;
                     if (!tcpServer.Setup(config.PortStart + index))
                     {
-                        ChangeTcpServerStatus("ERROR", "鏈嶅姟璁剧疆寮傚父");
+                        ChangeTcpServerStatus("ERROR", this.lang("Tr.TcpServer.SettingFailed"));
                         return;
                     }
                     if (!tcpServer.Start())
                     {
-                        ChangeTcpServerStatus("ERROR", "鏈嶅姟鍚姩寮傚父");
+                        ChangeTcpServerStatus("ERROR", this.lang("Tr.TcpServer.StartFailed"));
                         return;
                     }
-                    ChangeTcpServerStatus("RUNNING", "鏈嶅姟杩愯涓�");
+                    ChangeTcpServerStatus("RUNNING", this.lang("Tr.TcpServer.Running"));
+                }
+                else if (tcpServer.State != SuperSocket.SocketBase.ServerState.Running)
+                {
+                    if (!tcpServer.Setup(config.PortStart + index))
+                    {
+                        ChangeTcpServerStatus("ERROR", this.lang("Tr.TcpServer.SettingFailed"));
+                        return;
+                    }
+                    if (!tcpServer.Start())
+                    {
+                        ChangeTcpServerStatus("ERROR", this.lang("Tr.TcpServer.StartFailed"));
+                        return;
+                    }
+                    ChangeTcpServerStatus("RUNNING", this.lang("Tr.TcpServer.Running"));
                 }
             }
             catch (Exception ex)
             {
-                ChangeTcpServerStatus("ERROR", $"鏈嶅姟寮傚父锛歿ex.Message}");
+                ChangeTcpServerStatus("ERROR", $"{ex.Message}");
                 tcpServer?.Stop();
                 tcpServer = null;
             }
         }
 
-        private void StopTcpServer()
-        {
-            if (tcpServer == null) return;
-            try
-            {
-                tcpServer.Stop();
-                tcpServer = null;
-            }
-            catch (Exception ex)
-            {
-
-            }
-        }
-
+        /// <summary>
+        /// 鏇存柊Tcp鏈嶅姟鍣ㄧ姸鎬�
+        /// </summary>
+        /// <param name="status"></param>
+        /// <param name="info"></param>
         private void ChangeTcpServerStatus(string status, string info)
         {
             Dispatcher.Invoke(() =>
@@ -248,6 +337,35 @@
             });
         }
 
+        /// <summary>
+        /// 鍋滄Tcp鏈嶅姟鍣�
+        /// </summary>
+        private void StopTcpServer()
+        {
+            try
+            {
+                tcpServer?.Stop();
+                tcpServer = null;
+            }
+            catch (Exception ex)
+            {
+
+            }
+        }
+
+        /// <summary>
+        /// 閲婃斁璧勬簮
+        /// </summary>
+        public void RelaseResource()
+        {
+            StopTcpServer();
+        }
+
+        /// <summary>
+        /// Tcp娑堟伅澶勭悊
+        /// </summary>
+        /// <param name="session"></param>
+        /// <param name="requestInfo"></param>
         private void TcpServer_NewRequestReceived(TcpSession session, StringRequestInfo requestInfo)
         {
             string msg = requestInfo.Body;
@@ -268,7 +386,45 @@
                 condition = values[4],
                 updateTime = values[5]
             });
-            session.Send("1");
+            //session.Send("1");
+        }
+
+        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);
+        }
+
+        /// <summary>
+        /// 璇诲彇淇濆瓨鐨勬暟鎹�
+        /// </summary>
+        public void ReadCount()
+        {
+            try
+            {
+                int ok = Convert.ToInt32(IniFileHelper.ReadIniData($"Oven_{index}", "Pass", "", CountIniPath));
+                int ng = Convert.ToInt32(IniFileHelper.ReadIniData($"Oven_{index}", "Fail", "", CountIniPath));
+                infoTable.UpdateNumber(ok, ng);
+            }
+            catch (Exception ex)
+            {
+                //do nothing
+            }
+        }
+
+        /// <summary>
+        /// 璁℃暟娓呴浂
+        /// </summary>
+        public void ClearNumber()
+        {
+            infoTable.UpdateNumber(0, 0);
+            IniFileHelper.WriteIniData($"Oven_{index}", "Pass", infoTable.okCount.ToString(),
+                this.CountIniPath);
+            IniFileHelper.WriteIniData($"Oven_{index}", "Fail", infoTable.ngCount.ToString(),
+                this.CountIniPath);
         }
 
         private void UserControl_Loaded(object sender, RoutedEventArgs e)
@@ -281,5 +437,86 @@
         {
             StartTcpServer();
         }
+
+        public void SaveTempFile(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 = string.Join(",", detailTempratures.Keys) + ",骞冲潎鍊�";
+                    sw.WriteLine(title);
+
+                    for (int i = 0; i < tempratures.Count; i++)
+                    {
+                        string line = "";
+                        foreach (string key in detailTempratures.Keys)
+                        {
+                            if (detailTempratures[key] == null || detailTempratures[key].Count <= i)
+                            {
+                                line += ",";
+                            }
+                            else
+                            {
+                                line += $"{detailTempratures[key][i]},";
+                            }
+                        }
+                        line += tempratures[i];
+                        sw.WriteLine(line);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine(ex.ToString());
+            }
+        }
+
+        public void SetProductSource(List<string> productSource)
+        {
+            CbProduct.ItemsSource = productSource;
+        }
+
+        public void SetCurrentProduct(string currentProduct)
+        {
+            CbProduct.SelectedItem = currentProduct;
+        }
+
+        private void CbProduct_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            if (e.AddedItems.Count > 0)
+            {
+                var str = e.AddedItems[0];
+                parent.SetOvenProduct(index, str.ToString());
+            }
+            else
+            {
+                parent.SetOvenProduct(index, "");
+            }
+        }
+
+        public void ClearElectricData()
+        {
+            foreach (var cell in cells)
+            {
+                cell.ClearElectricData();
+            }
+        }
+
+        private void Button_Click_1(object sender, RoutedEventArgs e)
+        {
+            ScannerSetting setting = new ScannerSetting()
+            {
+                Owner = Window.GetWindow(this)
+            };
+            setting.Open(true, this.title);
+        }
     }
 }

--
Gitblit v1.9.1