From 1afe548ac40cc7f975917ef9bf2e156595cf81f3 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期四, 16 四月 2026 08:58:04 +0800
Subject: [PATCH] 优化;
---
Plugin.TestResult/TestResultView.xaml.cs | 282 +++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 216 insertions(+), 66 deletions(-)
diff --git a/Plugin.TestResult/TestResultView.xaml.cs b/Plugin.TestResult/TestResultView.xaml.cs
index 8db8a85..3712dc3 100644
--- a/Plugin.TestResult/TestResultView.xaml.cs
+++ b/Plugin.TestResult/TestResultView.xaml.cs
@@ -1,12 +1,14 @@
-锘縰sing HMI.Core.Util;
+锘縰sing HMI.Core.Entity;
+using HMI.Core.Manager;
+using HMI.Core.Util;
using HMI.UI.Util;
using NationalInstruments.TestStand.Interop.API;
using NationalInstruments.TestStand.Interop.UI.Ax;
-using NationalInstruments.TestStand.Utility;
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;
@@ -20,26 +22,36 @@
private int rowCount;
private int colCount;
private int cellCount;
- private DataTable[] tables;
- public Dictionary<string, DataTable> nameTables { get; private set; }
+
+ public static DataTable[] tables { get; private set; }
+ 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 })
{
@@ -48,8 +60,73 @@
public bool IsRunning { get; set; } = false;
+ public void RefreshCooler()
+ {
+
+ }
+
+ private void RefreshNumberConfig(BaseConfig config)
+ {
+ ParameterData value = null;
+ try
+ {
+ value = ParameterManager.GetCommonParameterByName("BurnInOvenCount");
+ string[] datas = value.Value.Trim().Split(',');
+ config.Row = int.Parse(datas[0]);
+ config.Column = int.Parse(datas[1]);
+ }
+ catch (Exception ex)
+ {
+
+ }
+
+ try
+ {
+ value = ParameterManager.GetCommonParameterByName("BurnInOvenName");
+ config.NameStr = value.Value;
+ }
+ catch (Exception ex)
+ {
+
+ }
+
+ try
+ {
+ value = ParameterManager.GetCommonParameterByName("BurnInOvenPort");
+ config.PortStart = int.Parse(value.Value);
+ }
+ catch (Exception ex)
+ {
+
+ }
+
+ try
+ {
+ value = ParameterManager.GetCommonParameterByName("BurnInCellCount");
+ string[] datas = value.Value.Trim().Split(',');
+ config.PositionColumn = int.Parse(datas[0]);
+ config.PositionCount = int.Parse(datas[1]);
+ }
+ catch (Exception ex)
+ {
+
+ }
+ }
+
public TestResultView(BaseConfig config)
{
+ try
+ {
+ var value = ParameterManager.GetCommonParameterByName("TsModelPath");
+ testModelFile = value?.Value ?? @"C:\Users\Public\Documents\National Instruments\TestStand 2020 (64-bit)\Components\Models\ParallelModel.seq";
+ }
+ catch
+ {
+ //@"C:\Program Files\National Instruments\TestStand 2020\Components\Models\TestStandModels\ParallelModel.seq"
+ testModelFile = @"C:\Users\Public\Documents\National Instruments\TestStand 2020 (64-bit)\Components\Models\ParallelModel.seq";
+ }
+
+ RefreshNumberConfig(config);
this.rowCount = config.Row;
this.colCount = config.Column;
this.config = config;
@@ -65,24 +142,36 @@
InitializeComponent();
- testApp = TestAppManager.GetAxApplicationMgr();
- testApp.ExitApplication += this.axApplicationMgr_ExitApplication;
- testApp.UIMessageEvent += this.axApplicationMgr_UIMessageEvent;
- testApp.ExecutionClosed += this.axApplicationMgr_ExecutionClosed;
+
+ executionWrapper = new TsExecutionWrapper(); //new TsExecutionWrapper();
+ if (executionWrapper is TsExecutionWrapper tsWrapper)
+ {
+ 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();
+ }
- ((System.ComponentModel.ISupportInitialize)(this.testApp)).BeginInit();//myClient涓虹涓夋柟鎺т欢鍚�
- host.Child = testApp;
- ((System.ComponentModel.ISupportInitialize)(this.testApp)).EndInit();
- //InitTestStandEngine();
- //StartTestSequence();
+ //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()
{
}
+ /// <summary>
+ /// 鎺㈤拡璁℃暟閰嶇疆璺緞
+ /// </summary>
private string CountIniPath;
public void SetCountIniPath(string countIniPath)
{
@@ -132,12 +221,13 @@
{
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(@"C:\Program Files\National Instruments\TestStand 2020\Components\Models\TestStandModels\ParallelModel.seq");
+ //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)
{
@@ -151,10 +241,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)
{
@@ -167,13 +257,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)
@@ -185,8 +286,8 @@
private void axApplicationMgr_ExitApplication(object sender, EventArgs e)
{
- Environment.ExitCode = testApp.ExitCode;
- TSHelper.DoSynchronousGCForCOMObjectDestruction();
+ //Environment.ExitCode = testApp.ExitCode;
+ //TSHelper.DoSynchronousGCForCOMObjectDestruction();
}
private void axApplicationMgr_ExecutionClosed(object sender, _ApplicationMgrEvents_ExecutionClosedEvent e)
@@ -215,7 +316,11 @@
if (MethodCode == 0)
{
/// 璁剧疆鍙ユ焺
- this.SequenceContext = (SequenceContext)e.uiMsg.ActiveXData;
+ //this.SequenceContext = (SequenceContext)e.uiMsg.ActiveXData;
+ if (executionWrapper is TsExecutionWrapper tsWrapper)
+ {
+ tsWrapper.context = (SequenceContext)e.uiMsg.ActiveXData;
+ }
return;
}
@@ -249,13 +354,19 @@
strData = e.uiMsg.StringData;
string[] datas_10014 = strData.Split(';');
int ovenIndex = int.Parse(datas_10014[0]);
-
string startTime = datas_10014[1];
string consumeTime = datas_10014[2];
string planEndTime = datas_10014[3];
+
tables[ovenIndex].SetStartTime(startTime);
- tables[ovenIndex].SetConsumeTime(double.Parse(consumeTime));
tables[ovenIndex].SetEndTime(planEndTime);
+ double? leftTime = null;
+ /// 涓轰簡鍏煎鏃х増鏈紝濡傛灉鏈夊墿浣欐椂闂村氨浼狅紝娌℃湁灏变紶null
+ if (datas_10014.Length >= 5)
+ {
+ leftTime = double.Parse(datas_10014[4]);
+ }
+ tables[ovenIndex].UpdateConsumeTime(double.Parse(consumeTime), leftTime);
return;
}
if (MethodCode == 4)
@@ -348,6 +459,7 @@
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)
@@ -371,13 +483,16 @@
tables[ovenIndex].GetSingleCell(cellIndex).AddElectricData(eData);
return;
}
+
if (MethodCode == 14)
{
/// 娓呯┖鐢垫祦鍜岀數鍘嬫暟鎹�
strData = e.uiMsg.StringData;
int ovenIndex = int.Parse(strData);
- tables[ovenIndex].ClearElectricData();
- tables[ovenIndex].ClearVData();
+ tables[ovenIndex].ClearCellData();
+ //tables[ovenIndex].ClearElectricData();
+ //tables[ovenIndex].ClearVData();
+ //tables[ovenIndex].ClearWaterData();
return;
}
@@ -395,7 +510,7 @@
if (MethodCode == 16)
{
- /// 娣诲姞鐢靛帇鏁版嵁
+ /// 娣诲姞鐢靛帇鍥捐〃鏁版嵁
strData = e.uiMsg.StringData;
string[] datas = strData.Split(';');
int ovenIndex = int.Parse(datas[0]);
@@ -449,6 +564,20 @@
return;
}
+ if (MethodCode == 21)
+ {
+ /// 娣诲姞姘存祦鍥捐〃鏁版嵁
+ strData = e.uiMsg.StringData;
+ string[] datas = strData.Split(';');
+ int ovenIndex = int.Parse(datas[0]);
+ int cellIndex = int.Parse(datas[1]);
+ double waterTemp = double.Parse(datas[2]);
+ double backWaterTemp = double.Parse(datas[3]);
+ double waterPressure = double.Parse(datas[4]);
+ tables[ovenIndex].GetSingleCell(cellIndex).AddWaterData(waterTemp, backWaterTemp, waterPressure);
+ return;
+ }
+
if (MethodCode == 99)
{
strData = e.uiMsg.StringData;
@@ -456,11 +585,13 @@
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;
}
@@ -473,20 +604,34 @@
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);
+
+ 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()
{
- testApp.ExitApplication -= this.axApplicationMgr_ExitApplication;
- testApp.UIMessageEvent -= this.axApplicationMgr_UIMessageEvent;
- testApp.ExecutionClosed -= this.axApplicationMgr_ExecutionClosed;
+ if (executionWrapper is TsExecutionWrapper tsWrapper)
+ {
+ tsWrapper.AxApplicationMgr.ExitApplication -= this.axApplicationMgr_ExitApplication;
+ tsWrapper.AxApplicationMgr.UIMessageEvent -= this.axApplicationMgr_UIMessageEvent;
+ tsWrapper.AxApplicationMgr.ExecutionClosed -= this.axApplicationMgr_ExecutionClosed;
+ }
+
foreach (var table in tables)
{
table.RelaseResource();
@@ -517,9 +662,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);
}
}
@@ -527,8 +673,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