From ef52fd6fd07508883dce4eb002acda59f0169e59 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期四, 23 四月 2026 10:19:33 +0800
Subject: [PATCH] 优化;
---
Plugin.TsExecution/SingleControl.xaml.cs | 345 ++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 305 insertions(+), 40 deletions(-)
diff --git a/Plugin.TsExecution/SingleControl.xaml.cs b/Plugin.TsExecution/SingleControl.xaml.cs
index 8d2e1e0..3e3c21a 100644
--- a/Plugin.TsExecution/SingleControl.xaml.cs
+++ b/Plugin.TsExecution/SingleControl.xaml.cs
@@ -1,4 +1,6 @@
-锘縰sing HMI.Core.Util;
+锘縰sing HMI.Core.Entity;
+using HMI.Core.Manager;
+using HMI.Core.Util;
using HMI.Util;
using NationalInstruments.TestStand.Interop.API;
using Plugin.TsExecution.Entity;
@@ -6,6 +8,7 @@
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
+using System.Linq;
using System.Runtime.CompilerServices;
using System.Timers;
using System.Windows;
@@ -23,7 +26,6 @@
protected void Set([CallerMemberName] string name = null)
{
-
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
@@ -36,11 +38,13 @@
}
}
#endregion
- private bool isLoadOK = false;
private int index;
private string CountIniPath;
private string status = "Ready";
+
+ private ScreenTouch[] screens;
+ private ScreenGrid screenGrid;
public string Status
{
@@ -58,15 +62,15 @@
}
}
- private double passNum;
- public double PassNum
+ private int passNum;
+ public int PassNum
{
get => passNum;
private set { Set(ref passNum, value); }
}
- private double failNum;
- public double FailNum
+ private int failNum;
+ public int FailNum
{
get => failNum;
private set { Set(ref failNum, value); }
@@ -99,6 +103,13 @@
set { Set(ref barcode, value); }
}
+ private string model = string.Empty;
+ public string Model
+ {
+ get { return model; }
+ set { Set(ref model, value); }
+ }
+
private string elapseTime = "00:00:00";
public string ElapseTime
{
@@ -108,7 +119,8 @@
if (value == "Start Timing")
{
this.refreshTimer.Enabled = true;
- TimeNow = DateTime.Now;
+ TestStartTime = DateTime.Now;
+ StepStartTime = DateTime.Now;
}
else
{
@@ -122,6 +134,16 @@
}
}
+ private string socketName = string.Empty;
+ public string SocketName
+ {
+ get { return socketName; }
+ set
+ {
+ Set(ref socketName, value);
+ }
+ }
+
private ObservableCollection<TestStep> _datasource = new ObservableCollection<TestStep>();
public ObservableCollection<TestStep> Datasource
{
@@ -132,12 +154,13 @@
}
}
- private DateTime TimeNow = new DateTime();
+ private DateTime TestStartTime = new DateTime();
+ private DateTime StepStartTime = new DateTime();
private TimeSpan TimeCount = new TimeSpan();
- private Timer refreshTimer;
+ private System.Timers.Timer refreshTimer;
- private string currentStep = "绛夊緟鎵爜";
+ private string currentStep = "";
public string CurrentStep
{
get => currentStep;
@@ -157,16 +180,65 @@
}
}
+ /// <summary>
+ /// 杩涘害鍊�
+ /// </summary>
+ private int _processValue;
+ public int ProcessValue
+ {
+ get => _processValue;
+ set
+ {
+ Set(ref _processValue, value);
+ }
+ }
+
+ public string ProcessValueLabel
+ {
+ get
+ {
+ if (ProcessValue > 0) return $"{ProcessValue}%";
+ return "";
+ }
+ set
+ {
+ }
+ }
+
+ public void SetSimpleUI(bool flag)
+ {
+ if (flag)
+ {
+ simplePanel.Visibility = Visibility.Visible;
+ detailPanel.Visibility = Visibility.Collapsed;
+ }
+ else
+ {
+ simplePanel.Visibility = Visibility.Collapsed;
+ detailPanel.Visibility = Visibility.Visible;
+ }
+ }
+
public int ProbeWarn { get; private set; }
+
+ private bool isAutoMode;
+ public bool IsAutoMode
+ {
+ get => isAutoMode;
+ set
+ {
+ Set(ref isAutoMode, value);
+ }
+ }
public SingleControl(int Index, string CountIniPath, int probeWarn)
{
- this.CountIniPath = CountIniPath;
DataContext = this;
+ this.CountIniPath = CountIniPath;
this.index = Index;
ProbeWarn = probeWarn;
- refreshTimer = new Timer()
+ refreshTimer = new System.Timers.Timer()
{
Interval = 100
};
@@ -174,6 +246,15 @@
ReadProbeCount();
ReadCounter();
InitializeComponent();
+ try
+ {
+ var value = ParameterManager.GetCommonParameterByName("AutoTestMode");
+ IsAutoMode = bool.Parse(value.Value);
+ }
+ catch
+ {
+ IsAutoMode = true;
+ }
//if (ProbeWarn > 0)
//{
// probeWarnPanel.Visibility = Visibility.Visible;
@@ -204,7 +285,7 @@
//AddTestData("1", "1", "1", "1", "1", "1", "1");
- TimeCount = DateTime.Now - TimeNow;
+ TimeCount = DateTime.Now - TestStartTime;
elapseTime = string.Format("{0:00}:{1:00}:{2:00}", TimeCount.Hours, TimeCount.Minutes, TimeCount.Seconds);
Set("ElapseTime");
Set("TestInfo");
@@ -235,8 +316,12 @@
Unit = unit,
Result = Status
};
- Dispatcher.BeginInvoke(new Action(() =>
+ table.Dispatcher.Invoke(new Action(() =>
{
+ var now = DateTime.Now;
+ var span = now - StepStartTime;
+ StepStartTime = now;
+ data.ConsumeTime = $"{(span.TotalMilliseconds / 1000d).ToString("F2")}s";
Datasource.Add(data);
table.ScrollIntoView(data);
}));
@@ -275,8 +360,8 @@
/// <param name="ProcessVal"></param>
public void SetTestProcess(int ProcessVal)
{
- this.testProcess.Value = ProcessVal;
- this.testProcessLabel.Content = ProcessVal.ToString() + "%";
+ ProcessValue = ProcessVal;
+ Set("ProcessValueLabel");
}
private void UserControl_Loaded(object sender, RoutedEventArgs e)
@@ -289,16 +374,20 @@
if (result == true)
{
PassNum += 1;
+ //Interlocked.Increment(ref passNum);
+ //Set("PassNum");
}
else if (result == false)
{
FailNum += 1;
+ //Interlocked.Increment(ref failNum);
+ //Set("FailNum");
}
TotalNum = PassNum + FailNum;
if (TotalNum != 0)
{
- PassRate = (PassNum / TotalNum);
+ PassRate = ((double)PassNum / TotalNum);
}
else
{
@@ -362,41 +451,49 @@
public void ResetCounter()
{
- this.passNum = 0;
- this.failNum = 0;
+ this.PassNum = 0;
+ this.FailNum = 0;
this.UpdateTestCounter(null);
}
public void WriteToCSV(string path)
{
- try
+ Dispatcher.BeginInvoke(new Action(() =>
{
-
- FileInfo fi = new FileInfo(path);
- if (!fi.Directory.Exists)
+ try
{
- fi.Directory.Create(); //鏂囦欢涓嶅瓨鍦紝鍒涘缓鏂囦欢
- }
- using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
- using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8))
- {
- string title = "椤圭洰鍚嶇О,娴嬭瘯鍙傛暟,娴嬭瘯鍊�,涓婇檺,涓嬮檺,鍗曚綅,缁撴灉";
- sw.WriteLine(title);
-
- if (Datasource != null && Datasource.Count > 0)
+ FileInfo fi = new FileInfo(path);
+ if (!fi.Directory.Exists)
{
- foreach (var data in Datasource)
+ fi.Directory.Create(); //鏂囦欢涓嶅瓨鍦紝鍒涘缓鏂囦欢
+ }
+
+ using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
+ using (StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8))
+ {
+ string title = "椤圭洰鍚嶇О,娴嬭瘯鍙傛暟,娴嬭瘯鍊�,涓婇檺,涓嬮檺,鍗曚綅,缁撴灉";
+ sw.WriteLine(title);
+
+ if (Datasource != null && Datasource.Count > 0)
{
- sw.WriteLine($"{data.Name},{data.Step},{data.Value},{data.LimitUp},{data.LimitDown},{data.Unit},{data.Result}");
+ foreach (var data in Datasource)
+ {
+ sw.WriteLine($"{data.Name},{data.Step},{data.Value},{data.LimitUp},{data.LimitDown},{data.Unit},{data.Result}");
+ }
}
}
}
- }
- catch (Exception ex)
- {
- TsExecution.logger.Error("Write CSV File Failed.", ex);
- }
+ catch (Exception ex)
+ {
+ TsExecution.logger.Error("Write CSV File Failed.", ex);
+ }
+ }));
+ }
+
+ public void ShowPausePanel()
+ {
+ pausePanel.Visibility = Visibility.Visible;
}
private void Button_Click(object sender, RoutedEventArgs e)
@@ -407,9 +504,177 @@
case "clear":
UpdateProbeCount(0);
break;
+ case "cancelPauseBtn":
+ SequenceFileContext?.StationGlobals.SetValBoolean($"StationState.IsContinue_{index}", 1, false);
+ pausePanel.Visibility = Visibility.Collapsed;
+ break;
+ case "continuePauseBtn":
+ SequenceFileContext?.StationGlobals.SetValBoolean($"StationState.IsContinue_{index}", 1, true);
+ pausePanel.Visibility = Visibility.Collapsed;
+ break;
+ case "scannerSetting":
+ //ScannerSetting setting = new ScannerSetting()
+ //{
+ // Owner = Window.GetWindow(this)
+ //};
+ //setting.Open(true, $"Socket{index}", CountIniPath);
+ ShowScannerPanel();
+ break;
+ case "scannerOkBtn":
+ SendSnr2Ts();
+ break;
default:
break;
}
}
+ public void ShowScannerPanel()
+ {
+ //scannerPanel.Visibility = Visibility.Visible;
+ }
+
+ 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)
+ {
+ if (sender == pausePanel)
+ {
+ var can = pausePanel;
+ var modal = visualModal;
+ Canvas.SetLeft(modal, (pausePanel.ActualWidth - visualModal.ActualWidth) / 2);
+ Canvas.SetTop(modal, (pausePanel.ActualHeight - visualModal.ActualHeight) / 2);
+ }
+ else
+ {
+ //var can = scannerPanel;
+ //var modal = scannerVisualModal;
+ //Canvas.SetLeft(modal, (scannerPanel.ActualWidth - scannerVisualModal.ActualWidth) / 2);
+ //Canvas.SetTop(modal, (scannerPanel.ActualHeight - scannerVisualModal.ActualHeight) / 2);
+ }
+ }
+
+ public void RefreshScreen(int[][] configs)
+ {
+ //foreach (UIElement item in canvas.Children)
+ //{
+ // if (item is ScreenTouch)
+ // {
+ // canvas.Children.Remove(item);
+ // }
+ //}
+ screenContainer.Child = null;
+
+
+ screenGrid = new ScreenGrid(1, configs.Length);
+
+ screens = new ScreenTouch[configs.Length];
+
+ int space = 2 * (screens.Length + 1);
+ for (int i = 0; i < configs.Length; i++)
+ {
+ var screen = new ScreenTouch(configs[i][0], configs[i][1])
+ {
+ Width = Math.Max((tableHeader.ActualHeight / 9 * 16 - space) / screens.Length, 0),
+ Height = Math.Max((tableHeader.ActualHeight / 9 * 16 - space) / screens.Length / 16 * 9, 0)
+ };
+ screens[i] = screen;
+ screenGrid.AddScreen(screen, 0, i);
+ }
+ screenContainer.Child = screenGrid;
+
+ //canvas.Children.Add(screens[0]);
+ //Canvas.SetBottom(screens[0], 0);
+ //Canvas.SetRight(screens[0], 0);
+ //Panel.SetZIndex(screens[0], 999);
+ }
+
+ public void DrawScreenPoint(int index, int x, int y)
+ {
+ screens[index].DrawPoint(x, y);
+ }
+
+ public void DrawScreenPoints(int index, int[][] points)
+ {
+ screens[index].DrawPoints(points);
+ }
+
+ public void ClearScreenPoint(int index)
+ {
+ screens[index].Clear();
+ }
+
+ public void RefreshProduct(ProductData product)
+ {
+ if (product == null)
+ {
+ screenContainer.Child = null;
+ return;
+ }
+ try
+ {
+ string screenSize = ProductManager.GetParameterByProductAndName(product.Name, "ScreenTouch")?.Value;
+ if (string.IsNullOrEmpty(screenSize))
+ {
+ screenContainer.Child = null;
+ return;
+ }
+ string[] arr = screenSize.Split(';');
+ int[][] configs = new int[arr.Length][];
+
+ for (int i = 0; i < arr.Length; i++)
+ {
+ string[] size = arr[i].Split(',');
+ configs[i] = new int[2] { int.Parse(size[0]), int.Parse(size[1]) };
+ }
+ RefreshScreen(configs);
+ }
+ catch (Exception ex)
+ {
+ TsExecution.logger.Error("RefreshProduct Failed.", ex);
+ screenContainer.Child = null;
+ }
+ }
+
+ private void control_SizeChanged(object sender, SizeChangedEventArgs e)
+ {
+ if (screenGrid == null)
+ {
+ return;
+ }
+ //screenGrid.Height = tableHeader.ActualHeight - 2;
+ //screenGrid.Width = tableHeader.ActualHeight / 9 * 16 - 2;
+
+ int space = 2 * (screens.Length + 1);
+
+ for (int i = 0; i < screens.Length; i++)
+ {
+ var screen = screens[i];
+ screen.Width = Math.Max(Math.Floor((tableHeader.ActualHeight / 9 * 16 - space) / screens.Length), 0);
+ screen.Height = Math.Max(Math.Floor(screen.Width / 16 * 9), 0);
+ }
+ }
+
+ private void screenContainer_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
+ {
+ if (e.ClickCount == 2)
+ {
+ new ScreenTouchWin(screens)
+ {
+ Owner = Window.GetWindow(this)
+ }.ShowDialog();
+ }
+ }
}
}
--
Gitblit v1.9.1