From 559890c482f5973f06aafdfec9550fee5ba3c7f2 Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 09 十一月 2026 17:02:15 +0800
Subject: [PATCH] feat: CAN 模拟器 TCP 化 + 多设备并发调试 + 后台生命周期管理
---
Plugin.TestResult/TestResultView.xaml.cs | 154 +++++++++++++++++++++++----------------------------
1 files changed, 69 insertions(+), 85 deletions(-)
diff --git a/Plugin.TestResult/TestResultView.xaml.cs b/Plugin.TestResult/TestResultView.xaml.cs
index 3712dc3..a207482 100644
--- a/Plugin.TestResult/TestResultView.xaml.cs
+++ b/Plugin.TestResult/TestResultView.xaml.cs
@@ -2,13 +2,11 @@
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;
using System;
using System.Collections.Generic;
-using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Controls;
@@ -143,26 +141,19 @@
InitializeComponent();
- executionWrapper = new TsExecutionWrapper(); //new TsExecutionWrapper();
- if (executionWrapper is TsExecutionWrapper tsWrapper)
+
+ }
+
+ private void ExecutionWrapper_UIMessageEvent(object sender, UIMessageEvent e)
+ {
+ try
{
- tsWrapper.AxApplicationMgr.ExitApplication += this.axApplicationMgr_ExitApplication;
- tsWrapper.AxApplicationMgr.UIMessageEvent += this.axApplicationMgr_UIMessageEvent;
- tsWrapper.AxApplicationMgr.ExecutionClosed += this.axApplicationMgr_ExecutionClosed;
- ((System.ComponentModel.ISupportInitialize)(tsWrapper.AxApplicationMgr)).BeginInit();//myClient涓虹涓夋柟鎺т欢鍚�
- host.Child = tsWrapper.AxApplicationMgr;
- ((System.ComponentModel.ISupportInitialize)(tsWrapper.AxApplicationMgr)).EndInit();
+ HandleUIMessage(e.EventCode, Convert.ToInt16(e.NumberData), e.StrData, e.Data);
}
+ catch (Exception ex)
+ {
-
-
- //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 Refresh()
@@ -217,10 +208,26 @@
/// <summary>
/// 鍚姩娴嬭瘯搴忓垪
/// </summary>
- public void InitTestStandEngine()
+ public void InitTestStandEngine(bool isTap)
{
try
{
+ 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;
@@ -258,7 +265,7 @@
try
{
executionWrapper?.SetStationGlobalValue<bool>("StationState.StopTest", 0, true, true);
-
+
try
{
executionWrapper?.WaitForExit();
@@ -284,12 +291,14 @@
}
}
+ [Obsolete]
private void axApplicationMgr_ExitApplication(object sender, EventArgs e)
{
//Environment.ExitCode = testApp.ExitCode;
//TSHelper.DoSynchronousGCForCOMObjectDestruction();
}
+ [Obsolete]
private void axApplicationMgr_ExecutionClosed(object sender, _ApplicationMgrEvents_ExecutionClosedEvent e)
{
try
@@ -303,31 +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;
- if (executionWrapper is TsExecutionWrapper tsWrapper)
- {
- tsWrapper.context = (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]);
@@ -338,7 +339,6 @@
if (MethodCode == 2)
{
/// 鏇存柊鐐夊瓙鏁伴噺淇℃伅
- strData = e.uiMsg.StringData;
string[] datas_10014 = strData.Split(';');
int ovenIndex = int.Parse(datas_10014[0]);
@@ -351,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];
@@ -372,7 +371,6 @@
if (MethodCode == 4)
{
/// 鏇存柊鑰佸寲鐐夊簳閮ㄧ姸鎬佹爮
- strData = e.uiMsg.StringData;
string[] datas_10014 = strData.Split(';');
int ovenIndex = int.Parse(datas_10014[0]);
@@ -383,7 +381,6 @@
if (MethodCode == 5)
{
/// 閲囬泦鐐夋俯搴�
- strData = e.uiMsg.StringData;
string[] datas_10016 = strData.Split(';');
int ovenIndex = int.Parse(datas_10016[0]);
@@ -399,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]);
@@ -446,7 +442,6 @@
if (MethodCode == 10)
{
/// 娓呯┖鐐夊瓙鐨勬俯搴﹀浘琛�
- strData = e.uiMsg.StringData;
int ovenIndex = int.Parse(strData);
tables[ovenIndex].ClearChartData();
return;
@@ -454,7 +449,6 @@
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]);
@@ -465,7 +459,6 @@
if (MethodCode == 12)
{
/// 淇濆瓨鐐変綋娓╁害鏂囦欢
- strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int ovenIndex = int.Parse(datas[0]);
string folder = datas[1];
@@ -475,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]);
@@ -487,7 +479,6 @@
if (MethodCode == 14)
{
/// 娓呯┖鐢垫祦鍜岀數鍘嬫暟鎹�
- strData = e.uiMsg.StringData;
int ovenIndex = int.Parse(strData);
tables[ovenIndex].ClearCellData();
//tables[ovenIndex].ClearElectricData();
@@ -499,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]);
@@ -511,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]);
@@ -523,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]);
@@ -535,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]);
@@ -543,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]);
@@ -558,7 +554,6 @@
if (MethodCode == 20)
{
/// 娓呯┖鏉$爜
- strData = e.uiMsg.StringData;
int ovenIndex = int.Parse(strData);
tables[ovenIndex].ClearAllSN();
return;
@@ -567,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]);
@@ -580,7 +574,6 @@
if (MethodCode == 99)
{
- strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int index = int.Parse(datas[0]);
if (MsgBoxHelper2.WarnChoose(datas[1], "鎻愮ず") == MessageBoxResult.OK)
@@ -602,6 +595,14 @@
}
}
+ 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)
{
string name = tables[index].title;
@@ -609,29 +610,12 @@
string key = $"StationState.Start[{index}]";
executionWrapper?.SetStationGlobalValue<bool>(key, 1, data);
-
- if (data == false)
- {
- key = $"StationState.Scanner[{index}]";
- executionWrapper?.SetStationGlobalValue<bool>(key, 1, false);
- }
- }
-
- public bool? GetStartFlag(int index)
- {
- string key = $"StationState.Start[{index}]";
- return executionWrapper.GetStationGlobalValue<bool>(key, 0);
}
public void ReleaseResource()
{
- if (executionWrapper is TsExecutionWrapper tsWrapper)
- {
- tsWrapper.AxApplicationMgr.ExitApplication -= this.axApplicationMgr_ExitApplication;
- tsWrapper.AxApplicationMgr.UIMessageEvent -= this.axApplicationMgr_UIMessageEvent;
- tsWrapper.AxApplicationMgr.ExecutionClosed -= this.axApplicationMgr_ExecutionClosed;
- }
-
+ executionWrapper.UIMessageEvent -= ExecutionWrapper_UIMessageEvent;
+ executionWrapper.Dispose();
foreach (var table in tables)
{
table.RelaseResource();
--
Gitblit v1.9.1