From 15bbd62b0b24b72c717ae91ab45348a2083ad04e Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期五, 10 十月 2025 08:58:18 +0800
Subject: [PATCH] 优化bug;
---
Plugin.TsExecution/TsExecution.xaml.cs | 301 ++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 243 insertions(+), 58 deletions(-)
diff --git a/Plugin.TsExecution/TsExecution.xaml.cs b/Plugin.TsExecution/TsExecution.xaml.cs
index 724fe97..83c45f0 100644
--- a/Plugin.TsExecution/TsExecution.xaml.cs
+++ b/Plugin.TsExecution/TsExecution.xaml.cs
@@ -13,6 +13,7 @@
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;
@@ -249,6 +250,19 @@
}
}
+ private bool _DisableScanner;
+ public bool DisableScanner
+ {
+ get => _DisableScanner;
+ set
+ {
+ if (WriteConfig("DisableScanner", value))
+ {
+ Set(ref _DisableScanner, value);
+ }
+ }
+ }
+
private string dataLogPath;
private SqliteHelper sqliteHelper;
@@ -284,6 +298,7 @@
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,
limitDown TEXT,
@@ -296,6 +311,48 @@
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,
+ result TEXT NOT NULL,
+ time DATETIME NOT NULL);");
+ try
+ {
+ sqliteHelper.ExecuteSql("alter table serialData add column 'model' TEXT default NULL;");
+ }
+ catch
+ {
+
+ }
+
+ try
+ {
+ sqliteHelper.ExecuteSql("alter table serialData add column 'position' TEXT default NULL;");
+ }
+ catch
+ {
+
+ }
+ try
+ {
+ sqliteHelper.ExecuteSql("alter table testResult add column 'position' TEXT default NULL;");
+ }
+ catch
+ {
+
+ }
+
+ try
+ {
+ sqliteHelper.ExecuteSql("alter table testResult add column 'status' TEXT default NULL;");
+ }
+ catch
+ {
+
+ }
+
base.InitFinish();
}
@@ -430,13 +487,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,7 +502,25 @@
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)
@@ -542,7 +618,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)
{
@@ -571,28 +647,104 @@
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;
}
+
+ 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 +759,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 +780,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
{
@@ -846,8 +1001,9 @@
{
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.modeSeq = this.engine.GetSequenceFileEx(@"C:\Program Files\National Instruments\TestStand 2020\Components\Models\TestStandModels\ParallelModel.seq");
+ this.modeSeq = this.engine.GetSequenceFileEx(@"C:\Users\Public\Documents\National Instruments\TestStand 2020 (64-bit)\Components\Models\ParallelModel.seq");
+ 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;
}
@@ -976,16 +1132,6 @@
//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)
{
this.tsSockets[index].UpdateStatus(status);
@@ -1009,21 +1155,30 @@
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 SavePositionDB(int index, string status)
{
var socket = this.tsSockets[index];
var time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
@@ -1032,9 +1187,11 @@
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,limitDown,limitUp,unit,value,status,finalStatus,consumeTime,totalConsumeTime,time) VALUES
+('{snr}','{socket.Model}','','{data.Name}','{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}','{socket.Model}','','{socket.Status}','{time}','{index}','{status}')");
sqliteHelper.ExecuteBatchSql(sqls);
}
@@ -1122,14 +1279,17 @@
this.tsSockets[index].SetTestProcess(ProcessVal);
break;
case 10031://瀵煎嚭CSV
- SavePositionCSV(index);
- SavePositionDB(index);
+ string[] datas = strData.Split(';');
+ SavePositionCSV(index, datas[0]);
+ SavePositionDB(index, datas[1]);
break;
case 10032://鎸変笅鏍囨殏鍋滄祴璇�
this.tsSockets[index].ShowPausePanel();
break;
case 10033:
ShowAlarm(strData);
+ break;
+ case 10099:
break;
default:
break;
@@ -1198,7 +1358,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 +1392,11 @@
}
}
+ public override void DoClose(object sender, EventArgs e)
+ {
+ base.DoClose(sender, e);
+ }
+
/// <summary>
/// 閲婃斁鎵�鏈夌殑搴忓垪鏂囦欢
/// </summary>
@@ -1238,18 +1406,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)
--
Gitblit v1.9.1