From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点

---
 Plugin.TsExecution/SingleControl.xaml.cs |  213 +++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 164 insertions(+), 49 deletions(-)

diff --git a/Plugin.TsExecution/SingleControl.xaml.cs b/Plugin.TsExecution/SingleControl.xaml.cs
index 3e3c21a..0c3ecb0 100644
--- a/Plugin.TsExecution/SingleControl.xaml.cs
+++ b/Plugin.TsExecution/SingleControl.xaml.cs
@@ -1,18 +1,21 @@
 锘縰sing HMI.Core.Entity;
 using HMI.Core.Manager;
+using HMI.Core.Setting;
 using HMI.Core.Util;
+using HMI.UI.Util;
 using HMI.Util;
 using NationalInstruments.TestStand.Interop.API;
 using Plugin.TsExecution.Entity;
 using System;
+using System.Collections.Generic;
 using System.Collections.ObjectModel;
 using System.ComponentModel;
 using System.IO;
-using System.Linq;
 using System.Runtime.CompilerServices;
 using System.Timers;
 using System.Windows;
 using System.Windows.Controls;
+using Util.ManualDebug;
 
 namespace Plugin.TsExecution
 {
@@ -61,6 +64,8 @@
                 Set(ref totalNum, value);
             }
         }
+
+        public TsExecution parent { get; set; }
 
         private int passNum;
         public int PassNum
@@ -177,6 +182,16 @@
             set
             {
                 Set(ref _probeCount, value);
+                try
+                {
+                    if (ProbeWarn <= 0) probeCountAlarm.Visibility = Visibility.Collapsed;
+                    else if (value >= ProbeWarn) probeCountAlarm.Visibility = Visibility.Visible;
+                    else probeCountAlarm.Visibility = Visibility.Collapsed;
+                }
+                catch
+                {
+
+                }
             }
         }
 
@@ -219,7 +234,15 @@
             }
         }
 
-        public int ProbeWarn { get; private set; }
+        private int _probeWarn;
+        public int ProbeWarn
+        {
+            get => _probeWarn;
+            private set
+            {
+                Set(ref _probeWarn, value);
+            }
+        }
 
         private bool isAutoMode;
         public bool IsAutoMode
@@ -243,13 +266,13 @@
                 Interval = 100
             };
             refreshTimer.Elapsed += RefreshTimer_Elapsed;
-            ReadProbeCount();
             ReadCounter();
             InitializeComponent();
+            RefreshProbeCount(null);
             try
             {
                 var value = ParameterManager.GetCommonParameterByName("AutoTestMode");
-                IsAutoMode = bool.Parse(value.Value);
+                IsAutoMode = value == null ? true : bool.Parse(value.Value);
             }
             catch
             {
@@ -351,7 +374,10 @@
 
         public void IniTestData()
         {
-            Datasource.Clear();
+            Dispatcher.Invoke(() =>
+            {
+                Datasource.Clear();
+            });
         }
 
         /// <summary>
@@ -397,37 +423,6 @@
             this.WriteCounter();
         }
 
-        /// <summary>
-        /// 浠巌ni璇诲彇鎺㈤拡浣跨敤娆℃暟
-        /// </summary>
-        private void ReadProbeCount()
-        {
-            try
-            {
-                var num = IniFileHelper.ReadIniData("Socket" + this.index.ToString(), "ProbeCount", "0", this.CountIniPath);
-                this.ProbeCount = int.Parse(num);
-            }
-            catch (Exception ex)
-            {
-                this.ProbeCount = 0;
-            }
-        }
-
-        /// <summary>
-        /// 鏇存柊鎺㈤拡浣跨敤娆℃暟
-        /// </summary>
-        /// <param name="count"></param>
-        private void UpdateProbeCount(int count)
-        {
-            /// 鍐欏埌閰嶇疆鏂囦欢
-            IniFileHelper.WriteIniData("Socket" + this.index.ToString(), "ProbeCount", count.ToString(), this.CountIniPath);
-            ProbeCount = count;
-
-            //if (ProbeWarn <= 0) probeCountAlarm.Visibility = Visibility.Collapsed;
-            //else if (count >= ProbeWarn) probeCountAlarm.Visibility = Visibility.Visible;
-            //else probeCountAlarm.Visibility = Visibility.Collapsed;
-        }
-
         private void WriteCounter()
         {
             IniFileHelper.WriteIniData("Socket" + this.index.ToString(), "Pass",
@@ -456,9 +451,48 @@
             this.UpdateTestCounter(null);
         }
 
+        public void WriteToExcel(string path)
+        {
+            Dispatcher.Invoke(() =>
+            {
+                try
+                {
+                    string suffix = Path.GetExtension(path);
+                    if (!string.Equals(".xlsx", suffix, StringComparison.OrdinalIgnoreCase) &&
+                    !string.Equals(".xls", suffix, StringComparison.OrdinalIgnoreCase))
+                    {
+                        path = path.Replace(suffix, ".xls");
+                    }
+
+                    FileInfo fi = new FileInfo(path);
+                    if (!fi.Directory.Exists)
+                    {
+                        fi.Directory.Create();  //鏂囦欢涓嶅瓨鍦紝鍒涘缓鏂囦欢
+                    }
+                    List<string[]> rows = new List<string[]>();
+                    rows.Add(new string[] { "娴嬭瘯鏃堕棿", "娴嬭瘯浜�", "娴嬭瘯璁惧", "鏉″舰鐮�", "娴嬭瘯缁撴灉" });
+                    rows.Add(new string[] { DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), UserInfo.User.Name, ParamSetting.StationName, Barcode, Status });
+                    rows.Add(new string[] { "椤圭洰鍚嶇О", "娴嬭瘯鍙傛暟", "娴嬭瘯鍊�", "涓婇檺", "涓嬮檺", "鍗曚綅", "缁撴灉" });
+                    if (Datasource != null && Datasource.Count > 0)
+                    {
+                        foreach (var data in Datasource)
+                        {
+                            rows.Add(new string[] { data.Name, data.Step, data.Value, data.LimitUp, data.LimitDown, data.Unit, data.Result });
+                        }
+                    }
+                    ExcelHelper.ExportExcel(path, rows);
+                }
+                catch (Exception ex)
+                {
+                    TsExecution.logger.Error("Write CSV File Failed.", ex);
+                }
+            });
+        }
+
+
         public void WriteToCSV(string path)
         {
-            Dispatcher.BeginInvoke(new Action(() =>
+            Dispatcher.Invoke(() =>
             {
                 try
                 {
@@ -488,7 +522,7 @@
                 {
                     TsExecution.logger.Error("Write CSV File Failed.", ex);
                 }
-            }));
+            });
         }
 
         public void ShowPausePanel()
@@ -534,17 +568,7 @@
 
         private void SendSnr2Ts()
         {
-            //try
-            //{
-            //    string snr = TbManualSnr.Text;
-            //    SequenceFileContext?.StationGlobals.SetValString($"StationState.SN[{index}]", 1, snr);
-            //    scannerPanel.Visibility = Visibility.Collapsed;
-            //    TbManualSnr.Text = string.Empty;
-            //}
-            //catch (Exception ex)
-            //{
-            //    ToastHelper.Error(ex.Message);
-            //}
+
         }
 
         private void pausePanel_Loaded(object sender, RoutedEventArgs e)
@@ -605,14 +629,53 @@
             screens[index].DrawPoint(x, y);
         }
 
+        /// <summary>
+        /// 缁樺浘涔嬪墠娓呯┖宸叉湁鐨�
+        /// </summary>
+        /// <param name="index"></param>
+        /// <param name="points"></param>
         public void DrawScreenPoints(int index, int[][] points)
         {
             screens[index].DrawPoints(points);
         }
 
+        /// <summary>
+        /// 缁樺浘涔嬪墠涓嶆竻绌哄凡鏈夌殑
+        /// </summary>
+        /// <param name="index"></param>
+        /// <param name="points"></param>
+        public void DrawNewScreenPoints(int index, int[][] points)
+        {
+            screens[index].DrawNewPoints(points);
+        }
+
         public void ClearScreenPoint(int index)
         {
             screens[index].Clear();
+        }
+
+        public void RefreshProbeCount(ProductData product)
+        {
+            try
+            {
+                var num = IniFileHelper.ReadIniData($"Socket{this.index.ToString()}", "ProbeCount", "0", this.CountIniPath);
+                this.ProbeCount = int.Parse(num);
+            }
+            catch (Exception ex)
+            {
+                this.ProbeCount = 0;
+            }
+        }
+
+        /// <summary>
+        /// 鏇存柊鎺㈤拡浣跨敤娆℃暟
+        /// </summary>
+        /// <param name="count"></param>
+        private void UpdateProbeCount(int count)
+        {
+            /// 鍐欏埌閰嶇疆鏂囦欢
+            IniFileHelper.WriteIniData("Socket" + this.index.ToString(), "ProbeCount", count.ToString(), this.CountIniPath);
+            ProbeCount = count;
         }
 
         public void RefreshProduct(ProductData product)
@@ -676,5 +739,57 @@
                 }.ShowDialog();
             }
         }
+
+        private void control_PreviewMouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
+        {
+            if (parent.EnableManualDebug)
+            {
+                ContextMenu contextMenu = new ContextMenu();
+                contextMenu.Closed += ContextMenu_Closed;
+                var item = new MenuItem
+                {
+                    IsCheckable = false,
+                    Name = "manualDebugItem",
+                    Header = this.lang("鎵嬪姩璋冭瘯"),
+                };
+                item.Click += Item_Click; ;
+                contextMenu.Items.Add(item);
+                this.ContextMenu = contextMenu;
+            }
+            else
+            {
+
+                this.ContextMenu = null;
+            }
+        }
+
+        private void Item_Click(object sender, RoutedEventArgs e)
+        {
+            string manualDebugSeq = ParameterManager.GetCommonParameterByName("ManualDebugSeqPath")?.Value;
+            if (string.IsNullOrEmpty(manualDebugSeq))
+            {
+                MsgBoxHelper2.Error("璇峰厛璁剧疆鎵嬪姩璋冭瘯搴忓垪璺緞[ManualDebugSeqPath]!");
+                return;
+            }
+            string modelPath = parent.tsModelPath;
+            var win = new ManualDebugWindow(manualDebugSeq, modelPath, false)
+            {
+                Title = $"宸ヤ綅{this.index}鎵嬪姩璋冭瘯",
+
+                Owner = Window.GetWindow(this),
+                OvenIndex = 0,
+                OvenName = "",
+                CellCount = parent.tsSockets.Count,
+
+                CellIndex = this.index,
+                CellName = "",
+            };
+            win.ShowDialog();
+        }
+
+        private void ContextMenu_Closed(object sender, RoutedEventArgs e)
+        {
+            this.ContextMenu = null;
+        }
     }
 }

--
Gitblit v1.9.1