From fe2aa4880d5c9fd88088ad0ed81ebaca05629f5f Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 17:59:45 +0800
Subject: [PATCH] feat: 集成CAN驱动/模拟器 + 仪器仪表注册/硬件调试模块
---
Plugin.TestResult/TestResultView.xaml.cs | 238 ++++++++++++++++++++++++++++++++++------------------------
1 files changed, 139 insertions(+), 99 deletions(-)
diff --git a/Plugin.TestResult/TestResultView.xaml.cs b/Plugin.TestResult/TestResultView.xaml.cs
index 1c93201..a207482 100644
--- a/Plugin.TestResult/TestResultView.xaml.cs
+++ b/Plugin.TestResult/TestResultView.xaml.cs
@@ -2,7 +2,6 @@
using HMI.Core.Manager;
using HMI.Core.Util;
using HMI.UI.Util;
-using NationalInstruments.TestStand.Interop.API;
using NationalInstruments.TestStand.Interop.UI.Ax;
using Plugin.TestResult_WPF.Model;
using Plugin.TsSupport;
@@ -26,23 +25,31 @@
public static Dictionary<string, DataTable> nameTables { get; private set; } = new Dictionary<string, DataTable>();
private readonly BaseConfig config;
- public AxApplicationMgr testApp;
+
+
public string testModelFile;
public string testSeqFile;
- /// <summary>
- /// 娴嬭瘯搴忓垪
- /// </summary>
- private SequenceFile testSeq = null;
- public Engine engine;
- private Execution execution = null;
- /// <summary>
- /// 娴嬭瘯搴忓垪鎿嶄綔鍙ユ焺
- /// </summary>
- public SequenceContext SequenceContext { get; private set; } = null;
- /// <summary>
- /// 娴嬭瘯妯″瀷搴忓垪
- /// </summary>
- private SequenceFile modeSeq;
+ public bool inManualDebugMode = false;
+
+ #region TS鐩稿叧
+ //public AxApplicationMgr testApp;
+ ///// <summary>
+ ///// 娴嬭瘯搴忓垪
+ ///// </summary>
+ //private SequenceFile testSeq = null;
+ //public Engine engine;
+ //private Execution execution = null;
+ ///// <summary>
+ ///// 娴嬭瘯搴忓垪鎿嶄綔鍙ユ焺
+ ///// </summary>
+ //public SequenceContext SequenceContext { get; private set; } = null;
+ ///// <summary>
+ ///// 娴嬭瘯妯″瀷搴忓垪
+ ///// </summary>
+ //private SequenceFile modeSeq;
+
+ public ITestExecutionWrapper executionWrapper;
+ #endregion
public TestResultView() : this(new BaseConfig { testing = false })
{
@@ -53,7 +60,7 @@
public void RefreshCooler()
{
-
+
}
private void RefreshNumberConfig(BaseConfig config)
@@ -133,18 +140,20 @@
InitializeComponent();
- testApp = TestAppManager.GetAxApplicationMgr();
- testApp.ExitApplication += this.axApplicationMgr_ExitApplication;
- testApp.UIMessageEvent += this.axApplicationMgr_UIMessageEvent;
- testApp.ExecutionClosed += this.axApplicationMgr_ExecutionClosed;
+
+ }
- ((System.ComponentModel.ISupportInitialize)(this.testApp)).BeginInit();//myClient涓虹涓夋柟鎺т欢鍚�
- host.Child = testApp;
- ((System.ComponentModel.ISupportInitialize)(this.testApp)).EndInit();
+ private void ExecutionWrapper_UIMessageEvent(object sender, UIMessageEvent e)
+ {
+ try
+ {
+ HandleUIMessage(e.EventCode, Convert.ToInt16(e.NumberData), e.StrData, e.Data);
+ }
+ catch (Exception ex)
+ {
- //InitTestStandEngine();
- //StartTestSequence();
+ }
}
private void Refresh()
@@ -199,16 +208,33 @@
/// <summary>
/// 鍚姩娴嬭瘯搴忓垪
/// </summary>
- public void InitTestStandEngine()
+ public void InitTestStandEngine(bool isTap)
{
try
{
- this.engine = this.testApp.GetEngine();
- this.engine.PersistBreakpoints = false;
- this.testApp.IsEditor = true;
- this.testApp.LoginOnStart = false;
- this.testApp.Start();
- this.modeSeq = this.engine.GetSequenceFileEx(testModelFile);
+ if (isTap)
+ {
+ executionWrapper = new TapWrapper();
+ }
+ else
+ {
+ executionWrapper = new TeststandWrapper();
+ }
+ executionWrapper.UIMessageEvent += ExecutionWrapper_UIMessageEvent;
+
+ if (executionWrapper is TeststandWrapper tsWrapper)
+ {
+ ((System.ComponentModel.ISupportInitialize)(tsWrapper.AxApplicationMgr)).BeginInit();
+ host.Child = tsWrapper.AxApplicationMgr;
+ ((System.ComponentModel.ISupportInitialize)(tsWrapper.AxApplicationMgr)).EndInit();
+ }
+ //this.engine = this.testApp.GetEngine();
+ //this.engine.PersistBreakpoints = false;
+ //this.testApp.IsEditor = true;
+ //this.testApp.LoginOnStart = false;
+ //this.testApp.Start();
+ //this.modeSeq = this.engine.GetSequenceFileEx(testModelFile);
+ executionWrapper.Init();
}
catch (Exception ex)
{
@@ -222,10 +248,10 @@
try
{
if (string.IsNullOrEmpty(testSeqFile)) return;
- 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);
- this.engine.Globals.SetValBoolean("StationState.StopTest", 0, false);
+ executionWrapper?.StartSequence(this.testSeqFile,
+ @"C:\Program Files\National Instruments\TestStand 2020\Components\Models\TestStandModels\ParallelModel.seq");
+
+ executionWrapper.SetStationGlobalValue<bool>("StationState.StopTest", 0, false);
}
catch (Exception ex)
{
@@ -238,13 +264,24 @@
{
try
{
- if (this.SequenceContext == null)
- return;
- bool val = this.SequenceContext.StationGlobals.Exists("StationState.StopTest", 0);
- if (val)
+ executionWrapper?.SetStationGlobalValue<bool>("StationState.StopTest", 0, true, true);
+
+ try
{
- this.SequenceContext.StationGlobals.SetValBoolean("StationState.StopTest", 0, true);
- bool isStop = this.execution.WaitForEndEx(2000, true, null, null);
+ executionWrapper?.WaitForExit();
+ executionWrapper?.ReleaseSeqFile();
+ }
+ catch (Exception ex)
+ {
+ ViewControl.Logger.Error("Wait For Exit error.", ex);
+ //if (ex is NullReferenceException ne)
+ //{
+
+ //}
+ //else
+ //{
+ // throw ex;
+ //}
}
}
catch (Exception ex)
@@ -254,12 +291,14 @@
}
}
+ [Obsolete]
private void axApplicationMgr_ExitApplication(object sender, EventArgs e)
{
- Environment.ExitCode = testApp.ExitCode;
+ //Environment.ExitCode = testApp.ExitCode;
//TSHelper.DoSynchronousGCForCOMObjectDestruction();
}
+ [Obsolete]
private void axApplicationMgr_ExecutionClosed(object sender, _ApplicationMgrEvents_ExecutionClosedEvent e)
{
try
@@ -273,27 +312,23 @@
}
}
- private void axApplicationMgr_UIMessageEvent(object sender, _ApplicationMgrEvents_UIMessageEventEvent e)
+
+ private void HandleUIMessage(int EventCase, int MethodCode, string strData, object xData)
{
try
{
- int EventCase = Convert.ToInt32(e.uiMsg.Event);
- int MethodCode = Convert.ToInt16(e.uiMsg.NumericData);
- string strData;
-
if (EventCase != 10014) return;
if (MethodCode == 0)
{
/// 璁剧疆鍙ユ焺
- this.SequenceContext = (SequenceContext)e.uiMsg.ActiveXData;
+ executionWrapper.SetContext(xData);
return;
}
if (MethodCode == 1)
{
/// 鏇存柊鐐夊瓙鐘舵��
- strData = e.uiMsg.StringData;
string[] datas_10014 = strData.Split(';');
int ovenIndex = int.Parse(datas_10014[0]);
@@ -304,7 +339,6 @@
if (MethodCode == 2)
{
/// 鏇存柊鐐夊瓙鏁伴噺淇℃伅
- strData = e.uiMsg.StringData;
string[] datas_10014 = strData.Split(';');
int ovenIndex = int.Parse(datas_10014[0]);
@@ -317,7 +351,6 @@
if (MethodCode == 3)
{
/// 鏇存柊鐐夊瓙鏃堕棿淇℃伅
- strData = e.uiMsg.StringData;
string[] datas_10014 = strData.Split(';');
int ovenIndex = int.Parse(datas_10014[0]);
string startTime = datas_10014[1];
@@ -338,7 +371,6 @@
if (MethodCode == 4)
{
/// 鏇存柊鑰佸寲鐐夊簳閮ㄧ姸鎬佹爮
- strData = e.uiMsg.StringData;
string[] datas_10014 = strData.Split(';');
int ovenIndex = int.Parse(datas_10014[0]);
@@ -349,7 +381,6 @@
if (MethodCode == 5)
{
/// 閲囬泦鐐夋俯搴�
- strData = e.uiMsg.StringData;
string[] datas_10016 = strData.Split(';');
int ovenIndex = int.Parse(datas_10016[0]);
@@ -365,29 +396,28 @@
}
if (MethodCode == 6)
{
- /// 鏇存柊绌翠綅鐘舵��
- strData = e.uiMsg.StringData;
- string[] datas_10015 = strData.Split(';');
- int ovenIndex = int.Parse(datas_10015[0]);
- int cellIndex = int.Parse(datas_10015[1]);
- string status_10015 = datas_10015[2];
- tables[ovenIndex].GetSingleCell(cellIndex).SetStatus(status_10015);
+ Dispatcher.Invoke(() =>
+ {/// 鏇存柊绌翠綅鐘舵��
+ string[] datas_10015 = strData.Split(';');
+ int ovenIndex = int.Parse(datas_10015[0]);
+ int cellIndex = int.Parse(datas_10015[1]);
+ string status_10015 = datas_10015[2];
+ tables[ovenIndex].GetSingleCell(cellIndex).SetStatus(status_10015);
- if (status_10015 == "OK" || status_10015 == "ok")
- {
- tables[ovenIndex].RefreshCount(1, 0);
- }
- else if (status_10015 == "ng" || status_10015 == "NG")
- {
- tables[ovenIndex].RefreshCount(0, 1);
- }
-
+ if (status_10015 == "OK" || status_10015 == "ok")
+ {
+ tables[ovenIndex].RefreshCount(1, 0);
+ }
+ else if (status_10015 == "ng" || status_10015 == "NG")
+ {
+ tables[ovenIndex].RefreshCount(0, 1);
+ }
+ });
return;
}
if (MethodCode == 7)
{
/// 鏇存柊绌翠綅鍙傛暟
- strData = e.uiMsg.StringData;
string[] datas_10015 = strData.Split(';');
int ovenIndex = int.Parse(datas_10015[0]);
int cellIndex = int.Parse(datas_10015[1]);
@@ -412,7 +442,6 @@
if (MethodCode == 10)
{
/// 娓呯┖鐐夊瓙鐨勬俯搴﹀浘琛�
- strData = e.uiMsg.StringData;
int ovenIndex = int.Parse(strData);
tables[ovenIndex].ClearChartData();
return;
@@ -420,17 +449,16 @@
if (MethodCode == 11)
{
/// 娓呴櫎绌翠綅鍙傛暟
- strData = e.uiMsg.StringData;
string[] datas_10015 = strData.Split(';');
int ovenIndex = int.Parse(datas_10015[0]);
int cellIndex = int.Parse(datas_10015[1]);
tables[ovenIndex].GetSingleCell(cellIndex).ClearInfo();
+ //GC.Collect();
return;
}
if (MethodCode == 12)
{
/// 淇濆瓨鐐変綋娓╁害鏂囦欢
- strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int ovenIndex = int.Parse(datas[0]);
string folder = datas[1];
@@ -440,7 +468,6 @@
if (MethodCode == 13)
{
/// 娣诲姞鐢垫祦鏁版嵁
- strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int ovenIndex = int.Parse(datas[0]);
int cellIndex = int.Parse(datas[1]);
@@ -452,7 +479,6 @@
if (MethodCode == 14)
{
/// 娓呯┖鐢垫祦鍜岀數鍘嬫暟鎹�
- strData = e.uiMsg.StringData;
int ovenIndex = int.Parse(strData);
tables[ovenIndex].ClearCellData();
//tables[ovenIndex].ClearElectricData();
@@ -464,7 +490,6 @@
if (MethodCode == 15)
{
/// 淇濆瓨鐢垫祦鏁版嵁
- strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int ovenIndex = int.Parse(datas[0]);
int cellIndex = int.Parse(datas[1]);
@@ -476,7 +501,6 @@
if (MethodCode == 16)
{
/// 娣诲姞鐢靛帇鍥捐〃鏁版嵁
- strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int ovenIndex = int.Parse(datas[0]);
int cellIndex = int.Parse(datas[1]);
@@ -488,7 +512,6 @@
if (MethodCode == 17)
{
/// 淇濆瓨鐢靛帇鏁版嵁
- strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int ovenIndex = int.Parse(datas[0]);
int cellIndex = int.Parse(datas[1]);
@@ -500,7 +523,6 @@
if (MethodCode == 18)
{
/// 淇濆瓨绌翠綅娴嬭瘯鏁版嵁鍒癈SV
- strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int ovenIndex = int.Parse(datas[0]);
int cellIndex = int.Parse(datas[1]);
@@ -508,11 +530,20 @@
tables[ovenIndex].GetSingleCell(cellIndex).SaveInfoToCSV(filePath);
return;
}
+ if (MethodCode == 180)
+ {
+ /// 淇濆瓨绌翠綅娴嬭瘯鏁版嵁鍒癈SV
+ string[] datas = strData.Split(';');
+ int ovenIndex = int.Parse(datas[0]);
+ int cellIndex = int.Parse(datas[1]);
+ string filePath = datas[2];
+ tables[ovenIndex].GetSingleCell(cellIndex).NormalCSV(filePath);
+ return;
+ }
if (MethodCode == 19)
{
/// 淇濆瓨绌翠綅娴嬭瘯鏁版嵁鍒癝qlite
- strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int ovenIndex = int.Parse(datas[0]);
int cellIndex = int.Parse(datas[1]);
@@ -523,7 +554,6 @@
if (MethodCode == 20)
{
/// 娓呯┖鏉$爜
- strData = e.uiMsg.StringData;
int ovenIndex = int.Parse(strData);
tables[ovenIndex].ClearAllSN();
return;
@@ -532,7 +562,6 @@
if (MethodCode == 21)
{
/// 娣诲姞姘存祦鍥捐〃鏁版嵁
- strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int ovenIndex = int.Parse(datas[0]);
int cellIndex = int.Parse(datas[1]);
@@ -545,16 +574,17 @@
if (MethodCode == 99)
{
- strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int index = int.Parse(datas[0]);
if (MsgBoxHelper2.WarnChoose(datas[1], "鎻愮ず") == MessageBoxResult.OK)
{
- SequenceContext.StationGlobals.SetValNumber($"StationState.Pipe[{index}]", 1, 1);
+ executionWrapper.SetStationGlobalValue<int>($"StationState.Pipe[{index}]", 1, 1);
+ //SequenceContext.StationGlobals.SetValNumber($"StationState.Pipe[{index}]", 1, 1);
}
else
{
- SequenceContext.StationGlobals.SetValNumber($"StationState.Pipe[{index}]", 1, 0);
+ executionWrapper.SetStationGlobalValue<int>($"StationState.Pipe[{index}]", 1, 0);
+ //SequenceContext.StationGlobals.SetValNumber($"StationState.Pipe[{index}]", 1, 0);
}
return;
}
@@ -565,22 +595,27 @@
}
}
+ private void axApplicationMgr_UIMessageEvent(object sender, _ApplicationMgrEvents_UIMessageEventEvent e)
+ {
+ int EventCase = Convert.ToInt32(e.uiMsg.Event);
+ int MethodCode = Convert.ToInt16(e.uiMsg.NumericData);
+ string strData = e.uiMsg.StringData;
+ HandleUIMessage(EventCase, MethodCode, strData, e.uiMsg.ActiveXData);
+ }
+
public void SetStartFlag(int index, bool data)
{
- if (this.SequenceContext == null) return;
string name = tables[index].title;
+ ViewControl.Logger?.Info($"灏嗚�佸寲鐐塠{name}] 鐨凷tart鍙橀噺璁剧疆涓� {data};");
string key = $"StationState.Start[{index}]";
- this.engine.Globals.SetValBoolean(key, 1, data);
- //bool val = this.engine.Globals.GetValBoolean(key, 0);
- //this.SequenceContext.StationGlobals.SetValBoolean(key, 0, data);
- //bool val = this.SequenceContext.StationGlobals.GetValBoolean(key, 0);
+
+ executionWrapper?.SetStationGlobalValue<bool>(key, 1, data);
}
public void ReleaseResource()
{
- testApp.ExitApplication -= this.axApplicationMgr_ExitApplication;
- testApp.UIMessageEvent -= this.axApplicationMgr_UIMessageEvent;
- testApp.ExecutionClosed -= this.axApplicationMgr_ExecutionClosed;
+ executionWrapper.UIMessageEvent -= ExecutionWrapper_UIMessageEvent;
+ executionWrapper.Dispose();
foreach (var table in tables)
{
table.RelaseResource();
@@ -611,9 +646,10 @@
for (int i = 0; i < tables.Length; i++)
{
var table = tables[i];
- // table.SetCurrentProduct(currentProduct);
string LookupStr = $"StationState.Model[{i}]";
- string tableModel = engine?.Globals?.GetValString(LookupStr, 1);
+
+ string tableModel = executionWrapper?.GetStationGlobalValue<string>(LookupStr, 1);
+ //engine?.Globals?.GetValString(LookupStr, 1);
table.SetCurrentProduct(tableModel);
}
}
@@ -621,8 +657,12 @@
public void SetOvenProduct(int index, string product)
{
string LookupStr = $"StationState.Model[{index}]";
- engine?.Globals?.SetValString(LookupStr, 1, product);
- engine?.CommitGlobalsToDisk(promptOnSaveConflicts: false);
+ executionWrapper?.SetStationGlobalValue<string>(LookupStr, 1, product);
+ executionWrapper?.CommitToDisk(false);
+ }
+
+ public void RefreshProducts()
+ {
}
}
}
--
Gitblit v1.9.1