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/TsExecution.xaml.cs | 196 ++++++++++++++++++++++++++++++++++++-------------
1 files changed, 144 insertions(+), 52 deletions(-)
diff --git a/Plugin.TsExecution/TsExecution.xaml.cs b/Plugin.TsExecution/TsExecution.xaml.cs
index 289d5be..4578fdb 100644
--- a/Plugin.TsExecution/TsExecution.xaml.cs
+++ b/Plugin.TsExecution/TsExecution.xaml.cs
@@ -20,6 +20,7 @@
using System.ComponentModel;
using System.IO;
using System.Linq;
+using System.Runtime.InteropServices;
using System.Timers;
using System.Windows;
using System.Windows.Controls;
@@ -50,6 +51,8 @@
private SequenceFile modeSeq = null;
public AxApplicationMgr AxApplicationMgr;
private Execution execution = null;
+
+ private SequenceContext sequenceContext = null;
private Chart chart;
#endregion
@@ -101,6 +104,13 @@
{
Set(ref selectedProduct, value);
CurrentProductModel = value?.Name;
+ if (tsSockets != null)
+ {
+ foreach (SingleControl socket in tsSockets)
+ {
+ socket.RefreshProduct(value);
+ }
+ }
SetTestSeqFile(value);
}
}
@@ -446,6 +456,13 @@
SelectedProduct = tempProduct;
}
RefershUI();
+ if (tsSockets != null)
+ {
+ foreach (SingleControl socket in tsSockets)
+ {
+ socket.RefreshProduct(SelectedProduct);
+ }
+ }
SampleStatus = false;
}
@@ -471,24 +488,31 @@
private void InitTsEngine()
{
AxApplicationMgr = TestAppManager.GetAxApplicationMgr();
+
+
+ //AxApplicationMgr. += AxApplicationMgr_EndExecution;
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);
+
+ AxApplicationMgr.ExitApplication += this.AxApplicationMgr_ExitApplication;
+ AxApplicationMgr.UIMessageEvent += this.AxApplicationMgr_UIMessageEvent;
+ AxApplicationMgr.ExecutionClosed += this.AxApplicationMgr_ExecutionClosed;
((System.ComponentModel.ISupportInitialize)(AxApplicationMgr)).BeginInit();
host.Child = AxApplicationMgr;
((System.ComponentModel.ISupportInitialize)(AxApplicationMgr)).EndInit();
}
+ private volatile bool canSwitchModel = false;
+ private volatile Action switchAction = null;
+
private void AxApplicationMgr_EndExecution(object sender, _ApplicationMgrEvents_EndExecutionEvent e)
{
log.Info("AxApplicationMgr_EndExecution");
if (ReleaseSequenceFile())
{
+ IsTesting = false;
log.Info("Release SeqFile Success!");
+ if (canSwitchModel) switchAction?.Invoke();
}
else
{
@@ -594,10 +618,21 @@
private void RefershUI()
{
panel.Children.Clear();
+ string[] names = ParamSetting.SocketNames.Split(',');
+
//閲嶆柊鐢熸垚瀛愰潰鏉�
for (int i = 0; i < this.socketNum; i++)
{
- SingleControl control = new SingleControl(i, CountIniPath, this.probeWarn);
+ string name = string.Empty;
+ if (i < names.Length)
+ {
+ name = names[i];
+ }
+
+ SingleControl control = new SingleControl(i, CountIniPath, this.probeWarn)
+ {
+ SocketName = name
+ };
panel.Children.Add(control);
tsSockets.Add(control);
@@ -1026,8 +1061,16 @@
/// </summary>
private void StartSequence()
{
+ log.Info($"Start ATE Seq isLoadOK:{isLoadOK}");
if (!isLoadOK) return;
-
+ try
+ {
+ engine?.Globals.SetValBoolean("StationState.StopTest", 1, false);
+ }
+ catch (Exception ex)
+ {
+ log.Error("Reset StopTest Failed.", ex);
+ }
if (ParamSetting.EnableAutoModel)
{
try
@@ -1085,35 +1128,12 @@
public void StopSequenceClick()
{
+ canSwitchModel = false;
+ switchAction = null;
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"));
}
/// <summary>
@@ -1123,23 +1143,21 @@
{
try
{
- if (this.tsSockets.Count > 0)
- {
- for (int i = 0; i < tsSockets.Count; i++)
- {
- 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);
- }
- }
+ //if (this.tsSockets.Count > 0)
+ //{
+ // for (int i = 0; i < tsSockets.Count; i++)
+ // {
+ // var context = this.tsSockets[i].SequenceFileContext;
+ // context?.StationGlobals.SetValBoolean("StationState.StopTest", 1, true);
+ // }
+ //}
+ engine.Globals.SetValBoolean("StationState.StopTest", 1, true);
if (this.execution == null) return true;
- bool res = this.execution.WaitForEndEx(2000, true, null, null);
+ //bool res = this.execution.WaitForEndEx(-1, true, null, null);
+ bool res = this.execution?.WaitForEndEx(-1, true, Type.Missing, null) == true;
+ Marshal.ReleaseComObject(this.execution);
+ this.execution = null;
return res;
}
catch (Exception ex)
@@ -1174,6 +1192,7 @@
private void StartClick()
{
+ canSwitchModel = true;
ShowMask(() =>
{
StartSequence();
@@ -1358,7 +1377,7 @@
this.tsSockets[index].ElapseTime = strData;
break;
case (int)UIMessageCodes.UIMsg_EndExecution://鎵ц缁撴潫
- IsTesting = false;
+ //IsTesting = false;
//this.ReleaseSequenceFile();
break;
case 10030://鏄剧ず娴嬭瘯杩涘害
@@ -1405,11 +1424,75 @@
case 10034:
CurrentProductModel = strData;
break;
+ case 10035:
+ string[] arr_10035 = strData.Split(';');
+
+ int[][] points = new int[arr_10035.Length - 1][];
+
+ for (int i = 1; i < arr_10035.Length; i++)
+ {
+ string[] strs = arr_10035[i].Split(',');
+ points[i - 1] = new int[2] { int.Parse(strs[0]), int.Parse(strs[1]) };
+ }
+ this.tsSockets[index].DrawScreenPoints(int.Parse(arr_10035[0]), points);
+ break;
+ case 10036:
+ this.tsSockets[index].ClearScreenPoint(int.Parse(strData));
+ break;
case 10099:
+ string[] arr = strData.Split(',');
+ if (canSwitchModel) SwitchSequenceByModel(index, arr[0], arr[1]);
break;
default:
break;
}
+ }
+
+ private void SwitchSequenceByModel(int index, string model, string snr)
+ {
+ Dispatcher.Invoke(() =>
+ {
+ var target = Products.FirstOrDefault(e => e.Name == model);
+
+ ShowMask(() =>
+ {
+ bool stoped = StopSequence();
+ //if (stoped)
+ //{
+ // IsTesting = false;
+ //}
+ }, null, null, "鎹㈠瀷涓紝璇风◢鍚�...");
+
+ if (target == null)
+ {
+ MsgBoxHelper2.Warn($"璇峰厛鍦ㄤ骇鍝佺鐞嗛〉闈㈤厤缃瀷鍙� [{model}] 鐨勪骇鍝佷俊鎭紒");
+ return;
+ }
+
+ switchAction = () =>
+ {
+ switchAction = null;
+ log?.Info($"灏濊瘯鑷姩鎹㈠瀷: {switchAction}");
+ if (canSwitchModel)
+ {
+ Dispatcher.Invoke(() =>
+ {
+ try
+ {
+ log?.Info("寮�濮嬭嚜鍔ㄦ崲鍨�");
+ SelectedProduct = target;
+ engine?.Globals.SetValString($"CacheSNR[{index}]", 1, snr);
+ engine?.CommitGlobalsToDisk(false);
+ StartClick();
+ }
+ catch (Exception ex)
+ {
+ log?.Error("鑷姩鎹㈠瀷澶辫触", ex);
+ }
+ });
+ }
+ };
+ });
}
private void ShowAlarm(AlarmText alarm)
@@ -1433,7 +1516,7 @@
try
{
- log.Info($"Event: {eventCode}, NumericData: {index}, StringData: {strData}");
+ log.Debug($"Event: {eventCode}, NumericData: {index}, StringData: {strData}");
}
catch
{
@@ -1441,6 +1524,8 @@
}
if (eventCode == 10001)
{
+ sequenceContext = (SequenceContext)e.uiMsg.ActiveXData;
+
tsSockets[index].SequenceFileContext = (SequenceContext)e.uiMsg.ActiveXData;
return;
}
@@ -1522,6 +1607,10 @@
{
lock (this)
{
+ if (this.testSeq == null)
+ {
+ return true;
+ }
//execution.Abort();
int count = 10;
while (count > 0)
@@ -1531,15 +1620,18 @@
if (this.testSeq == null)
return true;
- if (this.engine.ReleaseSequenceFileEx(this.testSeq, 4))
+ if (this.engine?.ReleaseSequenceFileEx(this.testSeq, 4) == true)
{
+ Marshal.ReleaseComObject(this.testSeq);
this.testSeq = null;
+ // GC.Collect();
}
- if (this.engine.ReleaseSequenceFileEx(this.modeSeq, 4))
+ if (this.engine?.ReleaseSequenceFileEx(this.modeSeq, 4) == true)
{
+ Marshal.ReleaseComObject(this.modeSeq);
this.modeSeq = null;
}
- this.engine.UnloadAllModules();
+ this.engine?.UnloadAllModules();
return this.testSeq == null && this.modeSeq == null;
}
catch (Exception ex)
--
Gitblit v1.9.1