From 0940f31b7eba1cf6b6a8c1fca72d97cf686e79f2 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期五, 04 七月 2025 10:43:00 +0800
Subject: [PATCH] 优化插件,完善TreeListView
---
Plugin.TsExecution/TsExecution.xaml.cs | 568 +++++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 470 insertions(+), 98 deletions(-)
diff --git a/Plugin.TsExecution/TsExecution.xaml.cs b/Plugin.TsExecution/TsExecution.xaml.cs
index 5239693..89c3ac3 100644
--- a/Plugin.TsExecution/TsExecution.xaml.cs
+++ b/Plugin.TsExecution/TsExecution.xaml.cs
@@ -6,6 +6,7 @@
using HMI.UI;
using HMI.UI.Util;
using HMI.Util;
+using log4net;
using NationalInstruments.TestStand.Interop.API;
using NationalInstruments.TestStand.Interop.UI.Ax;
using Panuon.WPF.UI;
@@ -29,7 +30,6 @@
/// </summary>
public partial class TsExecution : PluginControl
{
- //private OpcInterface.OpcInterface OpcHandle = new OpcInterface.OpcInterface();
#region TestStand浜嬩欢
/// <summary>
/// TS 寮曟搸
@@ -52,6 +52,7 @@
private Chart chart;
#endregion
+ public static ILog logger { get; private set; }
private List<SingleControl> tsSockets = new List<SingleControl>();
/// <summary>
/// 鏍蜂欢妯″紡鐘舵��
@@ -66,6 +67,15 @@
SampleTest(value);
}
}
+
+ private string _currentUserCode;
+
+ public string CurrentUserCode
+ {
+ get { return _currentUserCode; }
+ set { Set(ref _currentUserCode, value); }
+ }
+
private bool isLoadOK = false;
private Timer GCTimer;
@@ -88,6 +98,12 @@
Set(ref selectedProduct, value);
SetTestSeqFile(value);
}
+ }
+
+ public override void SetLogger(ILog logger)
+ {
+ base.SetLogger(logger);
+ TsExecution.logger = logger;
}
private ObservableCollection<ProductData> products;
@@ -114,6 +130,86 @@
}
}
+ private bool _enableMes;
+ public bool EnableMes
+ {
+ get => _enableMes;
+ set
+ {
+ if (WriteConfig("EnableMes", value))
+ {
+ Set(ref _enableMes, value);
+ }
+ }
+ }
+
+ private bool _enableCanLog;
+ public bool EnableCanLog
+ {
+ get => _enableCanLog;
+ set
+ {
+ if (WriteConfig("EnableCanLog", value))
+ {
+ Set(ref _enableCanLog, value);
+ }
+ }
+ }
+
+ private bool _enableDebugMode;
+ public bool EnableDebugMode
+ {
+ get => _enableDebugMode;
+ set
+ {
+ if (WriteConfig("EnableDebugMode", value))
+ {
+ Set(ref _enableDebugMode, value);
+ }
+ }
+ }
+
+ private bool _enableNGPause;
+ public bool EnableNGPause
+ {
+ get => _enableNGPause;
+ set
+ {
+ if (WriteConfig("EnableNGPause", value))
+ {
+ Set(ref _enableNGPause, value);
+ }
+ }
+ }
+
+ private bool _enableSimpleMode;
+ public bool EnableSimpleMode
+ {
+ get => _enableSimpleMode;
+ set
+ {
+ if (WriteConfig("EnableSimpleMode", value))
+ {
+ Set(ref _enableSimpleMode, value);
+ foreach (var cell in tsSockets) cell.SetSimpleUI(value);
+ }
+ }
+ }
+
+ private bool _ui_showInfoDock;
+ public bool UI_ShowInfoDock
+ {
+ get => _ui_showInfoDock;
+ set
+ {
+ if (WriteConfig("UI_ShowInfoDock", value))
+ {
+ Set(ref _ui_showInfoDock, value);
+ detailPanel.Visibility = value ? Visibility.Visible : Visibility.Collapsed;
+ }
+ }
+ }
+
public TsExecution()
{
DataContext = this;
@@ -123,7 +219,6 @@
InitTsEngine();
//鍒濆鍖朤estStand寮曟搸
this.InitTestStandEngine();
-
}
public override void SetBaseFolder(string folder)
@@ -136,7 +231,6 @@
{
this.ReadCount(out int pass, out int fail);
this.DisplayCount(pass, fail);
- UpdateChart(pass, fail);
InitProducts();
base.InitFinish();
}
@@ -153,16 +247,16 @@
var legend = pieChart.Plot.ShowLegend(Alignment.UpperRight);
legend.Alignment = Alignment.UpperRight;
legend.Padding = new PixelPadding(0);
- legend.FontSize = (float)CustomFontSizeConverter.CountFontSize(20, 300, 300);
+ legend.FontSize = (float)WidthSizeConverter.CountFontSize(20, 300, 300);
pieChart.UserInputProcessor.Disable();
pieChart.Plot.Font.Automatic();
List<PieSlice> slices = new List<PieSlice> {
new PieSlice() { Value = 5, FillColor = Colors.Green,
- LabelFontSize = (float)CustomFontSizeConverter.CountFontSize(20,300,300),
+ LabelFontSize = (float)WidthSizeConverter.CountFontSize(20,300,300),
Label = "Pass",LegendText="Pass" },
new PieSlice() { Value = 2, FillColor = Colors.Red,
- LabelFontSize = (float)CustomFontSizeConverter.CountFontSize(20,300,300),
+ LabelFontSize = (float)WidthSizeConverter.CountFontSize(20,300,300),
Label = "Fail",LegendText="Fail" } };
@@ -181,10 +275,38 @@
{
this.socketNum = Convert.ToInt32(tmpNum);
}
+ string lastModel = engine?.Globals.GetValString("StationState.ProductModel", 1);
+
+ if (!string.IsNullOrEmpty(lastModel))
+ {
+ var product = Products.FirstOrDefault(p => p.Name == lastModel);
+ if (product != null)
+ {
+ SelectedProduct = product;
+ RefershUI();
+ return;
+ }
+ }
SelectedProduct = Products[0];
RefershUI();
}
SampleStatus = false;
+ }
+
+ private bool _isTesting = false;
+ public bool IsTesting
+ {
+ get { return _isTesting; }
+ set
+ {
+ Set(ref _isTesting, value);
+ Dispatcher.Invoke(() =>
+ {
+ BtnStartSeq.IsEnabled = !value;
+ BtnStopSeq.IsEnabled = value;
+ CbProduct.IsEnabled = !value;
+ });
+ }
}
/// <summary>
@@ -208,49 +330,89 @@
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);
+ }
+ ReadConfig();
+ });
+ isLoadOK = true;
+ 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(() =>
{
- try
- {
- //杩炴帴OPChandle
- //this.OpcHandle.Connect2("127.0.0.1", 6543, 18081, out string ErrMsg, null);
- //鍚姩娴嬭瘯杩涚▼
- StartSequence();
- isLoadOK = true;
- }
- 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}");
- }
- finally
- {
- win.Close();
- }
if (isLoadOK) Loaded -= PluginControl_Loaded;
});
+
+ //Dispatcher.Invoke(() =>
+ //{
+ // try
+ // {
+ // ReadConfig();
+ // //杩炴帴OPChandle
+ // //this.OpcHandle.Connect2("127.0.0.1", 6543, 18081, out string ErrMsg, null);
+ // isLoadOK = true;
+ // //鍚姩娴嬭瘯杩涚▼
+ // StartSequence();
+ // }
+ // catch (Exception ex)
+ // {
+ // log.Error("TsExecution Loaded Failed.", ex);
+ // MsgBoxHelper.Error(this, $"{LangUtil.Get("Ts.UserControlLoadFailed")}: {ex.Message}");
+ // }
+
+ //});
}
).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);
+ SingleControl control = new SingleControl(i, CountIniPath, ProbeWarn);
panel.Children.Add(control);
tsSockets.Add(control);
}
@@ -291,11 +453,145 @@
/// <param name="fail">涓嶅悎鏍兼暟</param>
private void ReadCount(out int pass, out int fail)
{
- pass = Convert.ToInt32(IniFileHelper.ReadIniData("Count", "Pass", "", CountIniPath));
- fail = Convert.ToInt32(IniFileHelper.ReadIniData("Count", "Fail", "", CountIniPath));
+ pass = Convert.ToInt32(IniFileHelper.ReadIniData("Count", "Pass", "0", CountIniPath));
+ fail = Convert.ToInt32(IniFileHelper.ReadIniData("Count", "Fail", "0", CountIniPath));
}
- private void WriteCount(int pass, int fail)
+ private string csvDir;
+
+ /// <summary>
+ /// 璇诲彇閰嶇疆鏂囦欢閲岀殑鍑犱釜灞炴��
+ /// </summary>
+ /// <param name="pass"></param>
+ /// <param name="fail"></param>
+ private void ReadConfig()
+ {
+ ParameterData value;
+ try
+ {
+ value = ParameterManager.GetCommonParameterByName("EnableMes");
+ _enableMes = bool.Parse(value.Value);
+ Set("EnableMes");
+ }
+ catch
+ {
+ _enableMes = false;
+ Set("EnableMes");
+ }
+
+ try
+ {
+ value = ParameterManager.GetCommonParameterByName("EnableNGPause");
+ _enableNGPause = bool.Parse(value.Value);
+ Set("EnableNGPause");
+ }
+ catch
+ {
+ _enableNGPause = false;
+ Set("EnableNGPause");
+ }
+
+ try
+ {
+ value = ParameterManager.GetCommonParameterByName("EnableCanLog");
+ _enableCanLog = bool.Parse(value.Value);
+ Set("EnableCanLog");
+ }
+ catch
+ {
+ _enableCanLog = false;
+ 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);
+ }
+ catch
+ {
+ EnableSimpleMode = false;
+ }
+
+ try
+ {
+ value = ParameterManager.GetCommonParameterByName("UI_ShowInfoDock");
+ UI_ShowInfoDock = bool.Parse(value.Value);
+ }
+ catch
+ {
+ UI_ShowInfoDock = false;
+ }
+
+ try
+ {
+
+ value = ParameterManager.GetCommonParameterByName("TestReportFolder");
+ csvDir = value.Value;
+ if (!Directory.Exists(csvDir))
+ {
+ Directory.CreateDirectory(csvDir);
+ }
+ }
+ catch
+ {
+ csvDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestReport");
+ }
+
+ //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))
+ {
+ foreach (var ts in tsSockets)
+ {
+ ts?.SequenceFileContext?.StationGlobals.SetValBoolean($"SystemSetting.{name}", 1, value);
+ }
+ return true;
+ }
+ else
+ {
+ throw new Exception(errMsg);
+ }
+ }
+ catch (Exception ex)
+ {
+ MsgBoxHelper2.Error(ex.Message);
+ return false;
+ }
+ }
+
+ private void WriteCount(double pass, double fail)
{
IniFileHelper.WriteIniData("Count", "Pass", pass.ToString(), CountIniPath);
IniFileHelper.WriteIniData("Count", "Fail", fail.ToString(), CountIniPath);
@@ -306,9 +602,9 @@
/// </summary>
/// <param name="pass">鍚堟牸鏁�</param>
/// <param name="fail">涓嶅悎鏍兼暟</param>
- private void DisplayCount(int pass, int fail)
+ private void DisplayCount(double pass, double fail)
{
- int total = pass + fail;
+ double total = pass + fail;
double passRate;
if (total == 0)
{
@@ -322,6 +618,11 @@
this.TbFail.Text = fail.ToString();
this.TbTotal.Text = total.ToString();
this.TbPassRate.Text = string.Format("{0:0.00}", passRate) + "%";
+
+ pie.Slices[0].Value = pass;
+ pie.Slices[1].Value = fail;
+ pieChart.Refresh();
+
WriteCount(pass, fail);
}
@@ -355,19 +656,20 @@
/// </summary>
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);
- Dispatcher.Invoke(() =>
- {
- this.CbProduct.IsEnabled = false;
- this.BtnStartSeq.IsEnabled = false;
- this.BtnStopSeq.IsEnabled = true;
- });
+ //var sb = testSeq.GetSequenceByName("MainSequence");
+ //sb.
+
+ this.execution = this.engine.NewExecution(this.testSeq, "Test UUTs", this.modeSeq, false, 0, null, null, null);
+ IsTesting = true;
}
catch (Exception ex)
{
@@ -388,17 +690,26 @@
new MaskWindow((WindowX)Window.GetWindow(this),
(win) =>
{
- Dispatcher.Invoke(() =>
+ try
{
- try
+ bool stoped = StopSequence();
+ if (stoped)
{
- StopSequence();
+ IsTesting = false;
}
- finally
+ }
+ finally
+ {
+ Dispatcher.Invoke(() =>
{
+
win.Close();
- }
- });
+ });
+ }
+ //Dispatcher.Invoke(() =>
+ //{
+
+ //});
}
).Info(LangUtil.Get("App.SequenceIsStopping"));
}
@@ -406,27 +717,32 @@
/// <summary>
/// 鍋滄娴嬭瘯搴忓垪
/// </summary>
- private void StopSequence()
+ private bool StopSequence()
{
try
{
- if (this.tsSockets.Count > 0 && this.tsSockets[0]?.SequenceFileContext != null)
+ if (this.tsSockets.Count > 0)
{
- bool val = this.tsSockets[0].SequenceFileContext.StationGlobals.Exists("StationState.StopTest", 0);
- if (val)
+ for (int i = 0; i < tsSockets.Count; i++)
{
- tsSockets[0].SequenceFileContext.StationGlobals.SetValBoolean("StationState.StopTest", 0, true);
- bool isStop = this.execution.WaitForEndEx(2000, true, null, null);
+ var context = this.tsSockets[i].SequenceFileContext;
+ //bool val = context.StationGlobals.Exists("StationState.StopTest", 0);
+ //if (val)
+ //{
+ // context.StationGlobals.SetValBoolean("StationState.StopTest", 0, true);
+ // bool isStop = this.execution.WaitForEndEx(2000, true, null, null);
+ //}
+ context?.StationGlobals.SetValBoolean("StationState.StopTest", 1, true);
}
}
- this.CbProduct.IsEnabled = true;
- this.BtnStartSeq.IsEnabled = true;
- this.BtnStopSeq.IsEnabled = false;
+ if (this.execution == null) return true;
+ return this.execution.WaitForEndEx(2000, true, null, null);
}
catch (Exception ex)
{
log.Error("Stop Sequence Failed.", ex);
MsgBoxHelper.Error(this, $"{LangUtil.Get("Ts.StopSequenceFail")}: {ex.Message}");
+ return false;
}
}
@@ -457,17 +773,17 @@
new MaskWindow(Window.GetWindow(this),
(win) =>
{
- Dispatcher.Invoke(() =>
+ try
{
- try
- {
- StartSequence();
- }
- finally
+ StartSequence();
+ }
+ finally
+ {
+ win.Dispatcher.Invoke(() =>
{
win.Close();
- }
- });
+ });
+ }
}).Info(LangUtil.Get("Ts.SequenceIsStarting"));
}
@@ -487,7 +803,7 @@
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
- private void AxApplicationMgr_ExecutionClosed(object sender, NationalInstruments.TestStand.Interop.UI.Ax._ApplicationMgrEvents_ExecutionClosedEvent e)
+ private void AxApplicationMgr_ExecutionClosed(object sender, _ApplicationMgrEvents_ExecutionClosedEvent e)
{
try
{
@@ -506,6 +822,43 @@
}
}
+ public void UpdatePositionStatus(int index, string status)
+ {
+ this.tsSockets[index].UpdateStatus(status);
+ this.UpdateTestCounter();
+ }
+
+ public void UpdatePositionProcessValue(int index, int value)
+ {
+ this.tsSockets[index].SetTestProcess(value);
+ }
+
+ public void PausePosition(int index)
+ {
+ this.tsSockets[index].ShowPausePanel();
+ }
+
+ public void AddTestData(int index, string data)
+ {
+ string[] TestItems = data.Split(',');
+ tsSockets[index].AddTestData(TestItems[0], TestItems[1], TestItems[2], TestItems[3],
+ TestItems[4], TestItems[5], TestItems[6]);
+ }
+
+ public void SetPositionBarcode(int index, string barcode)
+ {
+ this.tsSockets[index].Barcode = barcode;
+ }
+
+ public void SavePositionCSV(int index)
+ {
+ 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);
+ }
+
/// <summary>
/// TestStand鐢ㄦ埛浜や簰浜嬩欢
/// </summary>
@@ -517,6 +870,17 @@
{
int EventCase = Convert.ToInt32(e.uiMsg.Event);
int Index = Convert.ToInt16(e.uiMsg.NumericData);//SocketIndex
+ string strData = e.uiMsg.StringData;
+
+ try
+ {
+ log.Info($"Event: {EventCase}, NumericData: {Index}, StringData: {strData}");
+ }
+ catch
+ {
+
+ }
+
switch (EventCase)
{
case 10001://浼犻�扴ocketContext
@@ -525,14 +889,11 @@
case 10002://鏇存柊娴嬭瘯鐘舵��
string status = e.uiMsg.StringData;
- this.tsSockets[Index].UpdateStatus(status);
- this.UpdateTestCounter();
+ UpdatePositionStatus(Index, status);
break;
case 10003://鍙戦�佹祴璇曟暟鎹�
- string[] TestItems = e.uiMsg.StringData.Split('\t');
- tsSockets[Index].AddTestData(TestItems[0], TestItems[4], TestItems[1], TestItems[2], TestItems[3], TestItems[5]);
-
+ AddTestData(Index, e.uiMsg.StringData);
break;
case 10004://鍙戦�佹祴璇曡繃绋嬩俊鎭�
@@ -544,7 +905,7 @@
break;
case 10006://鍙戦�佷骇鍝佹潯鐮�
- this.tsSockets[Index].Barcode = e.uiMsg.StringData;
+ SetPositionBarcode(Index, e.uiMsg.StringData);
break;
case 10007://寮�濮嬫祴璇曡鏃�
@@ -598,13 +959,18 @@
this.tsSockets[Index].ElapseTime = e.uiMsg.StringData;
break;
case (int)UIMessageCodes.UIMsg_EndExecution://鎵ц缁撴潫
- this.BtnStartSeq.IsEnabled = true;
- this.BtnStopSeq.IsEnabled = true;
+ IsTesting = false;
// this.ReleaseSequenceFile();
break;
case 10030://鏄剧ず娴嬭瘯杩涘害
int ProcessVal = Convert.ToInt32(e.uiMsg.StringData);
this.tsSockets[Index].SetTestProcess(ProcessVal);
+ break;
+ case 10031://瀵煎嚭CSV
+ SavePositionCSV(Index);
+ break;
+ case 10032://鎸変笅鏍囨殏鍋滄祴璇�
+ this.tsSockets[Index].ShowPausePanel();
break;
default:
break;
@@ -618,29 +984,27 @@
private void UpdateTestCounter()
{
- int PassNum = 0;
- int FailNum = 0;
+ double PassNum = 0;
+ double FailNum = 0;
foreach (SingleControl socket in this.tsSockets)
{
PassNum += socket.PassNum;
FailNum += socket.FailNum;
}
this.DisplayCount(PassNum, FailNum);
- UpdateChart(PassNum, FailNum);
- }
-
- private void UpdateChart(int pass, int fail)
- {
- pie.Slices[0].Value = pass;
- pie.Slices[1].Value = fail;
- pieChart.Refresh();
}
private void SetTestSeqFile(ProductData product)
{
+ if (product == null)
+ {
+ testSeqFile = null;
+ return;
+ }
string name = product.Name;
List<ParameterData> parameters = ProductManager.GetParametersByProductName(name);
testSeqFile = parameters.FirstOrDefault(p => p.Name == "TestSequence")?.Value?.ToString();
+ StartSequence();
}
private void ClearNum()
@@ -649,25 +1013,33 @@
{
PassAmount = 0;
FailAmount = 0;
- DisplayCount(PassAmount, FailAmount);
- UpdateChart(PassAmount, FailAmount);
//this.OpcHandle.DoFctWriteSingle("Count_Clear", "1", out string ErrMsg);
foreach (SingleControl socket in tsSockets)
{
socket.ResetCounter();
}
+ DisplayCount(PassAmount, FailAmount);
}
}
public override void OnClose(object sender, CancelEventArgs e)
{
- StopSequence();
- this.engine?.ReleaseSequenceFileEx(this.testSeq, 0);
- this.engine?.ReleaseSequenceFileEx(this.modeSeq, 0);
- this.engine?.UnloadAllModules();
- this.testSeq = null;
- this.modeSeq = null;
- base.OnClose(sender, e);
+ try
+ {
+ StopSequence();
+ // this.engine?.TerminateAll();
+ // this.engine?.ReleaseSequenceFileEx(this.testSeq, 0);
+ // this.engine?.ReleaseSequenceFileEx(this.modeSeq, 0);
+ // this.engine?.UnloadAllModules();
+ // this.engine?.ShutDown(true);
+ //this.testSeq = null;
+ //this.modeSeq = null;
+ base.OnClose(sender, e);
+ }
+ catch (Exception ex)
+ {
+ log.Error("OnClose Error.", ex);
+ }
}
private void PluginControl_SizeChanged(object sender, SizeChangedEventArgs e)
--
Gitblit v1.9.1