From 12e606635c42ea20f4b7c2bdda5204237a4b4c96 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期一, 02 三月 2026 16:14:49 +0800
Subject: [PATCH] 优化
---
Plugin.TsExecution/TsExecution.xaml.cs | 815 +++++++++++++++++++++++++++++++++++++++++-----------------
1 files changed, 575 insertions(+), 240 deletions(-)
diff --git a/Plugin.TsExecution/TsExecution.xaml.cs b/Plugin.TsExecution/TsExecution.xaml.cs
index 724fe97..289d5be 100644
--- a/Plugin.TsExecution/TsExecution.xaml.cs
+++ b/Plugin.TsExecution/TsExecution.xaml.cs
@@ -3,16 +3,15 @@
using HMI.Core.Api;
using HMI.Core.Entity;
using HMI.Core.Manager;
+using HMI.Core.Setting;
using HMI.Core.Util;
using HMI.MQUtil;
-using HMI.UI;
-using HMI.UI.Controls;
using HMI.UI.Util;
using HMI.Util;
using log4net;
using NationalInstruments.TestStand.Interop.API;
using NationalInstruments.TestStand.Interop.UI.Ax;
-using Panuon.WPF.UI;
+using Plugin.TsSupport;
using ScottPlot;
using ScottPlot.Plottables;
using System;
@@ -25,14 +24,13 @@
using System.Windows;
using System.Windows.Controls;
using System.Windows.Forms.DataVisualization.Charting;
-using System.Windows.Media;
namespace Plugin.TsExecution
{
/// <summary>
/// UserControl1.xaml 鐨勪氦浜掗�昏緫
/// </summary>
- public partial class TsExecution : PluginControl
+ public partial class TsExecution : PluginMaskControl
{
#region TestStand浜嬩欢
/// <summary>
@@ -102,7 +100,18 @@
set
{
Set(ref selectedProduct, value);
+ CurrentProductModel = value?.Name;
SetTestSeqFile(value);
+ }
+ }
+
+ private string currentProductModel;
+ public string CurrentProductModel
+ {
+ get => currentProductModel;
+ set
+ {
+ Set(ref currentProductModel, value);
}
}
@@ -122,6 +131,10 @@
Set(ref products, value);
}
}
+
+ public List<double> FontSizeSource { get; set; } = new List<double> {
+ 10,11,12,13,14,15,16,17,18,19,20
+ };
private Pie pie;
private string CountIniPath;
@@ -245,47 +258,69 @@
if (WriteIni("UI_CurrentWorkorder", value))
{
Set(ref currentWorkorder, value);
+ engine?.Globals.SetValString("StationState.WorkOrder", 1, value);
+ engine?.CommitGlobalsToDisk(promptOnSaveConflicts: false);
}
}
}
+ private bool _DisableScanner;
+ public bool DisableScanner
+ {
+ get => _DisableScanner;
+ set
+ {
+ if (WriteConfig("DisableScanner", value))
+ {
+ Set(ref _DisableScanner, value);
+ }
+ }
+ }
+
+ private string tsModelPath;
private string dataLogPath;
private SqliteHelper sqliteHelper;
private MQConnector mqConnector;
+ private int probeWarn;
public TsExecution()
{
DataContext = this;
GCTimer = new Timer();
InitializeComponent();
+
InitChart();
InitTsEngine();
//鍒濆鍖朤estStand寮曟搸
this.InitTestStandEngine();
}
+
public override void SetBaseFolder(string folder)
{
CountIniPath = Path.Combine(folder, "Count.ini");
base.SetBaseFolder(folder);
}
- public override void InitFinish()
+ private void CheckSqlHelper()
{
- this.ReadCount(out int pass, out int fail);
- this.DisplayCount(pass, fail);
- InitProducts();
- ReadConfig();
- if (!File.Exists(dataLogPath))
+ string today = DateTime.Now.ToString("yyyyMMdd");
+ string dbPath = Path.Combine(dataLogPath, $"Data_{today}.db");
+ if (!File.Exists(dbPath))
{
- SqliteHelper.CreateDatabase(dataLogPath);
+ SqliteHelper.CreateDatabase(dbPath);
}
- sqliteHelper = new SqliteHelper(dataLogPath);
- sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS serialData (
+ if (sqliteHelper == null || sqliteHelper.DataBaseFile != dbPath)
+ {
+ sqliteHelper?.Dispose();
+ 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,
@@ -296,7 +331,45 @@
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);");
+ }
+ }
+
+ public override void InitFinish()
+ {
+ this.ReadCount(out int pass, out int fail);
+ this.DisplayCount(pass, fail);
+ ReadConfig();
+ InitProducts();
+ CheckSqlHelper();
base.InitFinish();
+
+ if (ParamSetting.EnableAutoModel)
+ {
+ selectModelPanel.Visibility = Visibility.Collapsed;
+ autoModelPanel.Visibility = Visibility.Visible;
+ CurrentProductModel = string.Empty;
+ }
+
+ try
+ {
+ UserInfo user = UserInfo.User;
+ CurrentUserCode = user?.Code;
+ engine?.Globals.SetValString("StationState.OPID", 1, CurrentUserCode);
+ engine?.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+ }
+ catch (Exception ex)
+ {
+ log.Warn("Get Login User Failed.", ex);
+ }
}
private void InitMQ()
@@ -315,30 +388,6 @@
{
HandleUIMessage(eventCode, index, strData);
}));
- }
-
- void createChildInNewThread(int index, string configFile, int probeWarn)
- {
- HostVisual hostVisual = new HostVisual();
-
- UIElement content = new VisualHost(hostVisual);
-
- System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(() =>
- {
- VisualTarget visualTarget = new VisualTarget(hostVisual);
-
- var control = new SingleControl(index, configFile, probeWarn);
- control.Arrange(new Rect(new Point(), content.RenderSize));
-
- visualTarget.RootVisual = control;
- tsSockets.Add(control);
- System.Windows.Threading.Dispatcher.Run();
- }));
- //panel.Children.Add(content);
-
- thread.SetApartmentState(System.Threading.ApartmentState.STA);
- thread.IsBackground = true;
- thread.Start();
}
/// <summary>
@@ -384,28 +433,19 @@
Products = ProductManager.GetProducts<ObservableCollection<ProductData>>();
if (Products != null && Products.Count > 0)
{
- List<ParameterData> parameters =
- ParameterManager.GetCommonParameter<List<ParameterData>>();
- string tmpNum = parameters?.FirstOrDefault(p => p.Name == "SocketNum")?.Value?.ToString();
- if (!string.IsNullOrEmpty(tmpNum))
- {
- this.socketNum = Convert.ToInt32(tmpNum);
- }
string lastModel = engine?.Globals.GetValString("StationState.ProductModel", 1);
-
+ var tempProduct = Products[0];
if (!string.IsNullOrEmpty(lastModel))
{
var product = Products.FirstOrDefault(p => p.Name == lastModel);
if (product != null)
{
- SelectedProduct = product;
- RefershUI();
- return;
+ tempProduct = product;
}
}
- SelectedProduct = Products[0];
- RefershUI();
+ SelectedProduct = tempProduct;
}
+ RefershUI();
SampleStatus = false;
}
@@ -430,13 +470,14 @@
/// </summary>
private void InitTsEngine()
{
- AxApplicationMgr = new AxApplicationMgr();
+ AxApplicationMgr = TestAppManager.GetAxApplicationMgr();
AxApplicationMgr.EndExecution += AxApplicationMgr_EndExecution;
AxApplicationMgr.ExitApplication += new EventHandler(this.AxApplicationMgr_ExitApplication);
AxApplicationMgr.UIMessageEvent +=
new _ApplicationMgrEvents_UIMessageEventEventHandler(this.AxApplicationMgr_UIMessageEvent);
AxApplicationMgr.ExecutionClosed +=
new _ApplicationMgrEvents_ExecutionClosedEventHandler(this.AxApplicationMgr_ExecutionClosed);
+
((System.ComponentModel.ISupportInitialize)(AxApplicationMgr)).BeginInit();
host.Child = AxApplicationMgr;
((System.ComponentModel.ISupportInitialize)(AxApplicationMgr)).EndInit();
@@ -444,77 +485,119 @@
private void AxApplicationMgr_EndExecution(object sender, _ApplicationMgrEvents_EndExecutionEvent e)
{
- ReleaseSequenceFile();
+ log.Info("AxApplicationMgr_EndExecution");
+ if (ReleaseSequenceFile())
+ {
+ log.Info("Release SeqFile Success!");
+ }
+ else
+ {
+ log.Warn("Release SeqFile Fail!");
+ }
+ }
+
+ /// <summary>
+ /// 杩涚▼缁撴潫浜嬩欢
+ /// </summary>
+ /// <param name="sender"></param>
+ /// <param name="e"></param>
+ private void AxApplicationMgr_ExecutionClosed(object sender, _ApplicationMgrEvents_ExecutionClosedEvent e)
+ {
+ //ReleaseSequenceFile();
}
private void PluginControl_Loaded(object sender, RoutedEventArgs e)
{
- new MaskWindow((WindowX)Window.GetWindow(this),
- (win) =>
+ ShowMask(() =>
+ {
+ try
{
- try
- {
- Dispatcher.Invoke(() =>
- {
- try
- {
- UserInfo user = UserInfo.User;
- CurrentUserCode = user?.Code;
- }
- catch (Exception ex)
- {
- log.Warn("Get Login User Failed.", ex);
- }
- });
- isLoadOK = true;
- if (AutoExecuteSeq) StartSequence();
- }
- catch (Exception ex)
- {
- log.Error("TsExecution Loaded Failed.", ex);
- MsgBoxHelper.Error(this, $"{LangUtil.Get("Ts.UserControlLoadFailed")}: {ex.Message}");
- }
+ //Dispatcher.Invoke(() =>
+ //{
- try
- {
- if (Environment.Version.ToString() != this.AxApplicationMgr.GetEngine().DotNetCLRVersion)
- this.GCTimer.Enabled = true;
- }
- catch (Exception ex)
- {
- log.Error("TsExecution GCTimer Start Failed", ex);
- MsgBoxHelper.Error(this, $"{LangUtil.Get("Ts.LoadFailed")}: {ex.Message}");
- }
-
- Dispatcher.Invoke(() =>
- {
- if (isLoadOK) Loaded -= PluginControl_Loaded;
- });
+ //});
+ isLoadOK = true;
+ if (AutoExecuteSeq) StartSequence();
}
- ).Info(LangUtil.Get("App.UsercontrolIsLoading"));
+ catch (Exception ex)
+ {
+ log.Error("TsExecution Loaded Failed.", ex);
+ MsgBoxHelper.Error(this, $"{LangUtil.Get("Ts.UserControlLoadFailed")}: {ex.Message}");
+ }
+
+ try
+ {
+ if (Environment.Version.ToString() != this.AxApplicationMgr.GetEngine().DotNetCLRVersion)
+ this.GCTimer.Enabled = true;
+ }
+ catch (Exception ex)
+ {
+ log.Error("TsExecution GCTimer Start Failed", ex);
+ MsgBoxHelper.Error(this, $"{LangUtil.Get("Ts.LoadFailed")}: {ex.Message}");
+ }
+
+ Dispatcher.Invoke(() =>
+ {
+ if (isLoadOK) Loaded -= PluginControl_Loaded;
+ });
+ }, (ex) =>
+ {
+ ToastHelper.Error("Loaded Failed.");
+ log.Error("Loaded Error.", ex);
+ }, null, LangUtil.Get("App.UsercontrolIsLoading"));
+
+ //new MaskWindow((WindowX)Window.GetWindow(this),
+ // (win) =>
+ // {
+ // try
+ // {
+ // Dispatcher.Invoke(() =>
+ // {
+ // try
+ // {
+ // UserInfo user = UserInfo.User;
+ // CurrentUserCode = user?.Code;
+ // }
+ // catch (Exception ex)
+ // {
+ // log.Warn("Get Login User Failed.", ex);
+ // }
+ // });
+ // isLoadOK = true;
+ // if (AutoExecuteSeq) StartSequence();
+ // }
+ // catch (Exception ex)
+ // {
+ // log.Error("TsExecution Loaded Failed.", ex);
+ // MsgBoxHelper.Error(this, $"{LangUtil.Get("Ts.UserControlLoadFailed")}: {ex.Message}");
+ // }
+
+ // try
+ // {
+ // if (Environment.Version.ToString() != this.AxApplicationMgr.GetEngine().DotNetCLRVersion)
+ // this.GCTimer.Enabled = true;
+ // }
+ // catch (Exception ex)
+ // {
+ // log.Error("TsExecution GCTimer Start Failed", ex);
+ // MsgBoxHelper.Error(this, $"{LangUtil.Get("Ts.LoadFailed")}: {ex.Message}");
+ // }
+
+ // Dispatcher.Invoke(() =>
+ // {
+ // if (isLoadOK) Loaded -= PluginControl_Loaded;
+ // });
+ // }
+ // ).Info(LangUtil.Get("App.UsercontrolIsLoading"));
}
private void RefershUI()
{
- ParameterData p = ParameterManager.GetCommonParameterByName("ProbeWarn");
- int ProbeWarn = 0;
- if (p != null)
- {
- try
- {
- ProbeWarn = Convert.ToInt32(p.Value);
- }
- catch
- {
- ProbeWarn = 0;
- }
- }
-
panel.Children.Clear();
//閲嶆柊鐢熸垚瀛愰潰鏉�
for (int i = 0; i < this.socketNum; i++)
{
- SingleControl control = new SingleControl(i, CountIniPath, ProbeWarn);
+ SingleControl control = new SingleControl(i, CountIniPath, this.probeWarn);
panel.Children.Add(control);
tsSockets.Add(control);
@@ -523,6 +606,10 @@
if (tsSockets.Count == 1)
{
panel.Columns = 1;
+ }
+ else if (tsSockets.Count > 0 && (tsSockets.Count % 3) == 0)
+ {
+ panel.Columns = 3;
}
else
{
@@ -542,7 +629,7 @@
this.AxApplicationMgr.IsEditor = true;
this.AxApplicationMgr.LoginOnStart = false;
this.AxApplicationMgr.Start();
- this.modeSeq = this.engine.GetSequenceFileEx(@"C:\Program Files\National Instruments\TestStand 2020\Components\Models\TestStandModels\ParallelModel.seq");
+ //this.modeSeq = this.engine.GetSequenceFileEx(@"C:\Program Files\National Instruments\TestStand 2020\Components\Models\TestStandModels\ParallelModel.seq");
}
catch (Exception ex)
{
@@ -559,6 +646,9 @@
{
pass = Convert.ToInt32(IniFileHelper.ReadIniData("Count", "Pass", "0", CountIniPath));
fail = Convert.ToInt32(IniFileHelper.ReadIniData("Count", "Fail", "0", CountIniPath));
+ var fontSize = Convert.ToDouble(IniFileHelper.ReadIniData("Config", "TableFontSize", "12", CountIniPath));
+ this.Resources["tableFontSize"] = 20d;
+ //CbFontSize.SelectedItem = fontSize;
}
private string csvDir;
@@ -571,28 +661,117 @@
private void ReadConfig()
{
ParameterData value;
+
+
+ bool flag = false;
try
{
- value = ParameterManager.GetCommonParameterByName("EnableMes");
- _enableMes = bool.Parse(value.Value);
- Set("EnableMes");
+ value = ParameterManager.GetCommonParameterByName("DefaultEnableMes");
+ if (value != null)
+ {
+ flag = bool.Parse(value.Value);
+ }
}
catch
{
- _enableMes = false;
- Set("EnableMes");
+ flag = false;
}
try
{
+ value = ParameterManager.GetCommonParameterByName("SocketNum");
+ if (value != null)
+ {
+ this.socketNum = int.Parse(value.Value);
+ }
+ }
+ catch
+ {
+ this.socketNum = 2;
+ }
+
+ if (flag)
+ {
+ EnableMes = true;
+ }
+ else
+ {
+ try
+ {
+ value = ParameterManager.GetCommonParameterByName("EnableMes");
+ if (value == null)
+ {
+ CbEnableMes.Visibility = Visibility.Collapsed;
+ }
+ else
+ {
+ _enableMes = bool.Parse(value.Value);
+ Set("EnableMes");
+ }
+ }
+ catch
+ {
+ _enableMes = false;
+ Set("EnableMes");
+ }
+ }
+
+
+ try
+ {
value = ParameterManager.GetCommonParameterByName("EnableNGPause");
- _enableNGPause = bool.Parse(value.Value);
- Set("EnableNGPause");
+ if (value == null)
+ {
+ CbEnableNGPause.Visibility = Visibility.Collapsed;
+ }
+ else
+ {
+ _enableNGPause = bool.Parse(value.Value);
+ Set("EnableNGPause");
+ }
}
catch
{
_enableNGPause = false;
Set("EnableNGPause");
+ }
+
+ try
+ {
+ value = ParameterManager.GetCommonParameterByName("EnableDebugMode");
+ if (value == null)
+ {
+ CbEnableDebugMode.Visibility = Visibility.Collapsed;
+ }
+ else
+ {
+ _enableDebugMode = bool.Parse(value.Value);
+ Set("EnableDebugMode");
+ }
+ }
+ catch
+ {
+ _enableDebugMode = false;
+ Set("EnableDebugMode");
+ }
+
+ try
+ {
+ value = ParameterManager.GetCommonParameterByName("DisableScanner");
+ if (value == null)
+ {
+ CbDisableScanner.Visibility = Visibility.Collapsed;
+ }
+ else
+ {
+ _DisableScanner = bool.Parse(value.Value);
+ Set("DisableScanner");
+ }
+ }
+ catch
+ {
+ _DisableScanner = false;
+ Set("DisableScanner");
}
try
@@ -607,22 +786,18 @@
Set("EnableCanLog");
}
- try
- {
- value = ParameterManager.GetCommonParameterByName("EnableDebugMode");
- _enableDebugMode = bool.Parse(value.Value);
- Set("EnableDebugMode");
- }
- catch
- {
- _enableDebugMode = false;
- Set("EnableDebugMode");
- }
try
{
value = ParameterManager.GetCommonParameterByName("EnableSimpleMode");
- EnableSimpleMode = bool.Parse(value.Value);
+ if (value == null)
+ {
+ CbEnableSimpleMode.Visibility = Visibility.Collapsed;
+ }
+ else
+ {
+ EnableSimpleMode = bool.Parse(value.Value);
+ }
}
catch
{
@@ -632,7 +807,14 @@
try
{
value = ParameterManager.GetCommonParameterByName("UI_ShowInfoDock");
- UI_ShowInfoDock = bool.Parse(value.Value);
+ if (value == null)
+ {
+ CbUI_ShowInfoDock.Visibility = Visibility.Collapsed;
+ }
+ else
+ {
+ UI_ShowInfoDock = bool.Parse(value.Value);
+ }
}
catch
{
@@ -679,13 +861,11 @@
{
value = ParameterManager.GetCommonParameterByName("UI_CurrentWorkorder");
- currentWorkorder = value.Value;
- Set("CurrentWorkorder");
+ CurrentWorkorder = value.Value;
}
catch
{
- currentWorkorder = string.Empty;
- Set("CurrentWorkorder");
+ CurrentWorkorder = string.Empty;
}
try
@@ -702,36 +882,37 @@
{
}
+ dataLogPath = ParamSetting.DataLogFolder;
+
try
{
- value = ParameterManager.GetCommonParameterByName("TS_DataLogPath");
- dataLogPath = value.Value;
+ value = ParameterManager.GetCommonParameterByName("TsModelPath");
+ tsModelPath = value?.Value ?? @"C:\Users\Public\Documents\National Instruments\TestStand 2020 (64-bit)\Components\Models\ParallelModel.seq";
}
catch
{
- dataLogPath = Path.Combine(PathHelper.ConfigFolder, "DataBoard", "DataLog.db");
+ //@"C:\Program Files\National Instruments\TestStand 2020\Components\Models\TestStandModels\ParallelModel.seq"
+ tsModelPath = @"C:\Users\Public\Documents\National Instruments\TestStand 2020 (64-bit)\Components\Models\ParallelModel.seq";
}
+ try
+ {
+
+ value = ParameterManager.GetCommonParameterByName("ProbeWarn");
+ probeWarn = int.Parse(value?.Value);
+ }
+ catch
+ {
+ probeWarn = 0;
+ }
//Convert.ToBoolean(IniFileHelper.ReadIniData("Config", "EnableMes", "true", CountIniPath));
//EnableCanLog = Convert.ToBoolean(IniFileHelper.ReadIniData("Config", "EnableCanLog", "true", CountIniPath));
//EnableDebugMode = Convert.ToBoolean(IniFileHelper.ReadIniData("Config", "EnableDebugMode", "true", CountIniPath));
}
- //private void WriteToTsWhenInit()
- //{
- // foreach (var ts in tsSockets)
- // {
- // ts?.SequenceFileContext?.StationGlobals.SetValBoolean($"SystemSetting.EnableMes", 1, EnableMes);
- // ts?.SequenceFileContext?.StationGlobals.SetValBoolean($"SystemSetting.EnableNGPause", 1, EnableNGPause);
- // ts?.SequenceFileContext?.StationGlobals.SetValBoolean($"SystemSetting.EnableCanLog", 1, EnableCanLog);
- // ts?.SequenceFileContext?.StationGlobals.SetValBoolean($"SystemSetting.EnableDebugMode", 1, EnableDebugMode);
- // }
- //}
-
private bool WriteConfig(string name, bool value)
{
- //IniFileHelper.WriteIniData("Config", name, value.ToString(), CountIniPath);
try
{
if (ParameterManager.UpdateCommonParameter(name, value, out string errMsg))
@@ -739,6 +920,11 @@
foreach (var ts in tsSockets)
{
ts?.SequenceFileContext?.StationGlobals.SetValBoolean($"SystemSetting.{name}", 1, value);
+ if (ts?.SequenceFileContext?.Sequence != null)
+ {
+ ts.SequenceFileContext.Sequence.FailureAction =
+ value ? FailureActions.FailureAction_None : FailureActions.FailureAction_GotoCleanup;
+ }
}
return true;
}
@@ -841,53 +1027,93 @@
private void StartSequence()
{
if (!isLoadOK) return;
- //MaskWindow mask = new MaskWindow();
- try
- {
- engine?.Globals.SetValString("StationState.ProductModel", 1, SelectedProduct?.Name);
- engine?.CommitGlobalsToDisk(promptOnSaveConflicts: false);
- this.modeSeq = this.engine.GetSequenceFileEx(@"C:\Program Files\National Instruments\TestStand 2020\Components\Models\TestStandModels\ParallelModel.seq");
- this.testSeq = this.engine.GetSequenceFileEx(this.testSeqFile, 0, TypeConflictHandlerTypes.ConflictHandler_UseGlobalType);
- this.execution = this.engine.NewExecution(this.testSeq, "Test UUTs", this.modeSeq, false, 0, null, null, null);
- IsTesting = true;
- }
- catch (Exception ex)
- {
- Dispatcher.Invoke(() =>
- {
- log.Error("Start Sequence Failed.", ex);
- MsgBoxHelper.Error(this, $"{LangUtil.Get("Ts.StartSequenceFail")}: {ex.Message}");
- });
- }
- finally
- {
+ if (ParamSetting.EnableAutoModel)
+ {
+ try
+ {
+ var path = ParameterManager.GetCommonParameterByName<string>("CommonMainSeq", "");
+ if (string.IsNullOrEmpty(path))
+ {
+ Dispatcher.Invoke(() =>
+ {
+ MsgBoxHelper.Error(this, $"璇峰厛璁剧疆CommonMainSeq鍙傛暟");
+ });
+ return;
+ }
+ this.testSeqFile = path;
+ this.modeSeq = this.engine.GetSequenceFileEx(tsModelPath);
+ this.testSeq = this.engine.GetSequenceFileEx(this.testSeqFile, 2, TypeConflictHandlerTypes.ConflictHandler_UseGlobalType);
+ this.execution = this.engine.NewExecution(this.testSeq, "Test UUTs", this.modeSeq, false, 0, null, null, null);
+ IsTesting = true;
+ }
+ catch (Exception ex)
+ {
+ Dispatcher.Invoke(() =>
+ {
+ log.Error("Start Sequence Failed.", ex);
+ MsgBoxHelper.Error(this, $"{LangUtil.Get("Ts.StartSequenceFail")}: {ex.Message}");
+ });
+ }
+ }
+ else
+ {
+ //MaskWindow mask = new MaskWindow();
+ try
+ {
+ engine?.Globals.SetValString("StationState.ProductModel", 1, CurrentProductModel);
+ engine?.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+ this.modeSeq = this.engine.GetSequenceFileEx(tsModelPath);
+ this.testSeq = this.engine.GetSequenceFileEx(this.testSeqFile, 2, TypeConflictHandlerTypes.ConflictHandler_UseGlobalType);
+ this.execution = this.engine.NewExecution(this.testSeq, "Test UUTs", this.modeSeq, false, 0, null, null, null);
+ IsTesting = true;
+ }
+ catch (Exception ex)
+ {
+ Dispatcher.Invoke(() =>
+ {
+ log.Error("Start Sequence Failed.", ex);
+ MsgBoxHelper.Error(this, $"{LangUtil.Get("Ts.StartSequenceFail")}: {ex.Message}");
+ });
+ }
+ finally
+ {
+
+ }
}
}
public void StopSequenceClick()
{
- new MaskWindow((WindowX)Window.GetWindow(this),
- (win) =>
- {
- try
- {
- bool stoped = StopSequence();
- if (stoped)
- {
- IsTesting = false;
- }
- }
- finally
- {
- Dispatcher.Invoke(() =>
- {
+ ShowMask(() =>
+ {
+ bool stoped = StopSequence();
+ if (stoped)
+ {
+ IsTesting = false;
+ }
+ }, null, null, LangUtil.Get("App.SequenceIsStopping"));
+ //new MaskWindow((WindowX)Window.GetWindow(this),
+ // (win) =>
+ // {
+ // try
+ // {
+ // bool stoped = StopSequence();
+ // if (stoped)
+ // {
+ // IsTesting = false;
+ // }
+ // }
+ // finally
+ // {
+ // Dispatcher.Invoke(() =>
+ // {
- win.Close();
- });
- }
- }
- ).Info(LangUtil.Get("App.SequenceIsStopping"));
+ // win.Close();
+ // });
+ // }
+ // }
+ // ).Info(LangUtil.Get("App.SequenceIsStopping"));
}
/// <summary>
@@ -948,21 +1174,28 @@
private void StartClick()
{
- new MaskWindow(Window.GetWindow(this),
- (win) =>
- {
- try
- {
- StartSequence();
- }
- finally
- {
- win.Dispatcher.Invoke(() =>
- {
- win.Close();
- });
- }
- }).Info(LangUtil.Get("Ts.SequenceIsStarting"));
+ ShowMask(() =>
+ {
+ StartSequence();
+ }, null, null, LangUtil.Get("Ts.SequenceIsStarting"));
+ //new MaskWindow(Window.GetWindow(this),
+ // (win) =>
+ // {
+ // try
+ // {
+ // StartSequence();
+ // }
+ // catch (Exception ex) {
+
+ // }
+ // finally
+ // {
+ // win.Dispatcher.Invoke(() =>
+ // {
+ // win.Close();
+ // });
+ // }
+ // }).Info(LangUtil.Get("Ts.SequenceIsStarting"));
}
/// <summary>
@@ -974,16 +1207,6 @@
{
//Environment.ExitCode = this.AxApplicationMgr.ExitCode;
//this.Close();
- }
-
- /// <summary>
- /// 杩涚▼缁撴潫浜嬩欢
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- private void AxApplicationMgr_ExecutionClosed(object sender, _ApplicationMgrEvents_ExecutionClosedEvent e)
- {
- ReleaseSequenceFile();
}
public void UpdatePositionStatus(int index, string status)
@@ -1009,32 +1232,53 @@
TestItems[4], TestItems[5], TestItems[6]);
}
- public void SetPositionBarcode(int index, string barcode)
+ public void SetPositionBarcode(int index, string strData)
{
- this.tsSockets[index].Barcode = barcode;
+ if (strData.Contains(";"))
+ {
+ var strs = strData.Split(';');
+ this.tsSockets[index].Barcode = strs[0];
+ this.tsSockets[index].Model = strs[1];
+ }
+ else
+ {
+ this.tsSockets[index].Barcode = strData;
+ }
}
- public void SavePositionCSV(int index)
+ public void SavePositionCSV(int index, string csvPath)
{
- var time = DateTime.Now;
- string status = this.tsSockets[index].Status == "Passed" ? "PASS" : "FAIL";
- string csvPath = Path.Combine(csvDir, SelectedProduct?.Name ?? "鏈煡浜у搧", time.ToString("yyyyMMdd"), status,
- $"{this.tsSockets[index].Barcode}-{time.ToString("HHmmss")}.csv");
+ //var time = DateTime.Now;
+ //string status = this.tsSockets[index].Status == "Passed" ? "PASS" : "FAIL";
+ //string csvPath = Path.Combine(csvDir, SelectedProduct?.Name ?? "鏈煡浜у搧", time.ToString("yyyyMMdd"), status,
+ // $"{this.tsSockets[index].Barcode}-{time.ToString("HHmmss")}.csv");
this.tsSockets[index].WriteToCSV(csvPath);
}
- public void SavePositionDB(int index)
+ public void SaveTemplateCSV(int index)
{
+ var time = DateTime.Now;
+ string status = this.tsSockets[index].Status == "Passed" ? "PASS" : "FAIL";
+ string csvPath = Path.Combine(csvDir, CurrentProductModel ?? "鏈煡浜у搧", time.ToString("yyyyMMdd"), status, $"{this.tsSockets[index].Barcode}-{time.ToString("HHmmss")}.csv");
+ this.tsSockets[index].WriteToCSV(csvPath);
+ }
+
+ public void SavePositionDB(int index, string status)
+ {
+ CheckSqlHelper();
var socket = this.tsSockets[index];
var time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
string snr = socket.Barcode;
+ string model = CurrentProductModel;
List<string> sqls = new List<string>();
foreach (var data in socket.Datasource)
{
- sqls.Add($@"INSERT INTO serialData (sn,station,step,limitDown,limitUp,unit,value,status,finalStatus,consumeTime,totalConsumeTime,time) VALUES
-('{snr}','','{data.Name}','{data.LimitDown}','{data.LimitUp}','{data.Unit}','{data.Value}','{data.Result}','{socket.Status}','{data.ConsumeTime}','{socket.ElapseTime}','{time}')");
+ sqls.Add($@"INSERT INTO serialData (sn,model,station,step,position,limitDown,limitUp,unit,value,status,finalStatus,consumeTime,totalConsumeTime,time) VALUES
+('{snr}','{model}','','{data.Name}','{index}','{data.LimitDown}','{data.LimitUp}','{data.Unit}','{data.Value}','{data.Result}','{socket.Status}','{data.ConsumeTime}','{socket.ElapseTime}','{time}')");
}
+ sqls.Add($@"INSERT INTO testResult (sn,model,station,result,time,position,status) VALUES
+('{snr}','{model}','','{socket.Status}','{time}','{index}','{status}')");
sqliteHelper.ExecuteBatchSql(sqls);
}
@@ -1122,24 +1366,56 @@
this.tsSockets[index].SetTestProcess(ProcessVal);
break;
case 10031://瀵煎嚭CSV
- SavePositionCSV(index);
- SavePositionDB(index);
+ if (string.IsNullOrEmpty(strData))
+ {
+ SaveTemplateCSV(index);
+ return;
+ }
+ try
+ {
+ string[] datas = strData.Split(';');
+ SavePositionCSV(index, datas[0]);
+ if (datas.Length >= 2)
+ {
+ SavePositionDB(index, datas[1]);
+ }
+ else
+ {
+ var sss = this.tsSockets[index].Status;
+ SavePositionDB(index, sss);
+ }
+ }
+ catch (Exception ex)
+ {
+ log.Warn("10031 Error.", ex);
+ SaveTemplateCSV(index);
+ }
break;
case 10032://鎸変笅鏍囨殏鍋滄祴璇�
this.tsSockets[index].ShowPausePanel();
break;
case 10033:
- ShowAlarm(strData);
+ var alarm = new AlarmText
+ {
+ VirtualId = DateTime.Now.ToString("yyyyMMddHHmmssfff"),
+ AlarmInfo = strData
+ };
+ ShowAlarm(alarm);
+ break;
+ case 10034:
+ CurrentProductModel = strData;
+ break;
+ case 10099:
break;
default:
break;
}
}
- private void ShowAlarm(string info)
+ private void ShowAlarm(AlarmText alarm)
{
- AlarmShowHelper.ShowAlarm(info);
- mSMQHelper.Send("Alarm", $"ATE娴嬭瘯 {info}");
+ AlarmShowHelper.ShowAlarm(alarm);
+ mSMQHelper.Send("Alarm", $"ATE娴嬭瘯 {alarm.AlarmInfo}");
}
/// <summary>
@@ -1198,7 +1474,10 @@
string name = product.Name;
List<ParameterData> parameters = ProductManager.GetParametersByProductName(name);
testSeqFile = parameters.FirstOrDefault(p => p.Name == "TestSequence")?.Value?.ToString();
- StartSequence();
+ if (AutoExecuteSeq)
+ {
+ StartSequence();
+ }
}
private void ClearNum()
@@ -1229,6 +1508,11 @@
}
}
+ public override void DoClose(object sender, EventArgs e)
+ {
+ base.DoClose(sender, e);
+ }
+
/// <summary>
/// 閲婃斁鎵�鏈夌殑搴忓垪鏂囦欢
/// </summary>
@@ -1238,18 +1522,35 @@
{
lock (this)
{
- if (this.testSeq == null)
- return true;
- if (this.engine.ReleaseSequenceFileEx(this.testSeq, 4))
+ //execution.Abort();
+ int count = 10;
+ while (count > 0)
{
- this.testSeq = null;
+ try
+ {
+ if (this.testSeq == null)
+ return true;
+
+ if (this.engine.ReleaseSequenceFileEx(this.testSeq, 4))
+ {
+ this.testSeq = null;
+ }
+ if (this.engine.ReleaseSequenceFileEx(this.modeSeq, 4))
+ {
+ this.modeSeq = null;
+ }
+ this.engine.UnloadAllModules();
+ return this.testSeq == null && this.modeSeq == null;
+ }
+ catch (Exception ex)
+ {
+ log.Warn($"ReleaseSequenceFile In {count} Times Fail.", ex);
+ count--;
+ System.Threading.Thread.Sleep(1000);
+ }
}
- if (this.engine.ReleaseSequenceFileEx(this.modeSeq, 4))
- {
- this.modeSeq = null;
- }
- this.engine.UnloadAllModules();
- return true;
+ log.Warn($"ReleaseSequenceFile Failed.");
+ return false;
}
}
catch (Exception ex)
@@ -1263,5 +1564,39 @@
{
}
+
+ private void CbFontSize_SelectionChanged(object sender, SelectionChangedEventArgs e)
+ {
+ try
+ {
+ if (e.AddedItems != null && e.AddedItems.Count > 0)
+ {
+ var fontSize = (double)e.AddedItems[0];
+ this.Resources["tableFontSize"] = fontSize;
+ IniFileHelper.WriteIniData("Config", "TableFontSize", fontSize.ToString(), CountIniPath);
+ }
+ }
+ catch
+ {
+ }
+ }
+
+ private void Label_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e)
+ {
+ //workOrderEditor.Focus();
+ //workOrderEditor.IsEditing = true;
+ if (RequirePassword() == true)
+ {
+ var win = new WorkOrderWin
+ {
+ WorkOrder = CurrentWorkorder,
+ Owner = Window.GetWindow(this)
+ };
+ if (win.ShowDialog() == true)
+ {
+ CurrentWorkorder = win.WorkOrder;
+ }
+ }
+ }
}
}
\ No newline at end of file
--
Gitblit v1.9.1