From 12e606635c42ea20f4b7c2bdda5204237a4b4c96 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期一, 02 三月 2026 16:14:49 +0800
Subject: [PATCH] 优化
---
Plugin.TestResult/TestResultView.xaml.cs | 371 ++++++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 308 insertions(+), 63 deletions(-)
diff --git a/Plugin.TestResult/TestResultView.xaml.cs b/Plugin.TestResult/TestResultView.xaml.cs
index b5877c6..1c93201 100644
--- a/Plugin.TestResult/TestResultView.xaml.cs
+++ b/Plugin.TestResult/TestResultView.xaml.cs
@@ -1,8 +1,11 @@
-锘縰sing NationalInstruments.TestStand.Interop.API;
+锘縰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.Constant;
using Plugin.TestResult_WPF.Model;
+using Plugin.TsSupport;
using System;
using System.Collections.Generic;
using System.Windows;
@@ -18,11 +21,13 @@
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>
/// 娴嬭瘯搴忓垪
@@ -33,7 +38,7 @@
/// <summary>
/// 娴嬭瘯搴忓垪鎿嶄綔鍙ユ焺
/// </summary>
- private SequenceContext SequenceContext = null;
+ public SequenceContext SequenceContext { get; private set; } = null;
/// <summary>
/// 娴嬭瘯妯″瀷搴忓垪
/// </summary>
@@ -44,8 +49,75 @@
}
+ 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;
@@ -61,54 +133,31 @@
InitializeComponent();
- testApp = new AxApplicationMgr();
- testApp.ExitApplication += new EventHandler(this.axApplicationMgr_ExitApplication);
- testApp.UIMessageEvent += new _ApplicationMgrEvents_UIMessageEventEventHandler(this.axApplicationMgr_UIMessageEvent);
- testApp.ExecutionClosed += new _ApplicationMgrEvents_ExecutionClosedEventHandler(this.axApplicationMgr_ExecutionClosed);
+ 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();
- InitMainGrid();
+
//InitTestStandEngine();
//StartTestSequence();
}
private void Refresh()
{
- for (int i = 0; i < tables.Length; i++)
- {
- var sb = new System.Timers.Timer()
- {
- Interval = 1000,
- AutoReset = true,
- };
- var table = tables[i];
- Random random = new Random(i * 13);
- sb.Elapsed += (s, e) =>
- {
+ }
- table.SetTemperature(random.Next(100));
- for (int j = 0; j < 3; j++)
- {
- table.SetTemperature(j + "89", random.Next(100));
- }
- table.SetOkCount(random.Next(100));
- table.SetNgCount(random.Next(100));
- table.SetStatus(CommonStatus.GetRandomStatus());
- table.SetStartTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- table.SetEndTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
- table.SetConsumeTime(random.Next(10000));
-
-
- var cell = table.GetSingleCell(random.Next(table.GetSize()));
- cell.SetStatus(CommonStatus.GetRandomStatus());
- cell.SetInfos(random.Next(1000) + "", random.Next(1000) + "");
- table.SetStatusText(DateTime.Now + "");
- };
- sb.Start();
- }
+ /// <summary>
+ /// 鎺㈤拡璁℃暟閰嶇疆璺緞
+ /// </summary>
+ private string CountIniPath;
+ public void SetCountIniPath(string countIniPath)
+ {
+ CountIniPath = countIniPath;
}
public void InitMainGrid()
@@ -129,7 +178,7 @@
for (int n = 0; n < cellCount; n++)
{
string name = n < names.Length ? names[n] : "";
- DataTable child = new DataTable(this, n, name, config);
+ DataTable child = new DataTable(this, n, name, CountIniPath, config);
mainGrid.Children.Add(child);
tables[n] = child;
nameTables[name] = child;
@@ -143,7 +192,7 @@
public DataTable GetDataTable(int index)
{
- if (index > 0 && index < tables.Length) return tables[index];
+ if (index >= 0 && index < tables.Length) return tables[index];
return null;
}
@@ -159,12 +208,12 @@
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.modeSeq = this.engine.GetSequenceFileEx(testModelFile);
}
catch (Exception ex)
{
- throw new Exception("鍒濆鍖朤S寮曟搸澶辫触:" + ex.Message);
+ ViewControl.Logger.Error("InitTestStandEngine Failed.", ex);
+ throw new Exception($"{this.lang("Ts.InitTestStandEngineFail")}: {ex.Message}");
}
}
@@ -172,6 +221,7 @@
{
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);
@@ -179,7 +229,8 @@
}
catch (Exception ex)
{
- throw new Exception("鍚姩娴嬭瘯搴忓垪澶辫触:" + ex.Message);
+ ViewControl.Logger.Error("StartTestSequence Failed.", ex);
+ throw new Exception($"{this.lang("Ts.StartTestSequenceFailed")}: {ex.Message}");
}
}
@@ -198,14 +249,15 @@
}
catch (Exception ex)
{
- throw new Exception(ex.Message);
+ ViewControl.Logger.Error("StopTest Failed.", ex);
+ throw new Exception($"{this.lang("Ts.StopTestSequenceFailed")}: {ex.Message}");
}
}
private void axApplicationMgr_ExitApplication(object sender, EventArgs e)
{
Environment.ExitCode = testApp.ExitCode;
- TSHelper.DoSynchronousGCForCOMObjectDestruction();
+ //TSHelper.DoSynchronousGCForCOMObjectDestruction();
}
private void axApplicationMgr_ExecutionClosed(object sender, _ApplicationMgrEvents_ExecutionClosedEvent e)
@@ -216,7 +268,8 @@
}
catch (Exception ex)
{
- MessageBox.Show("閲婃斁娴嬭瘯搴忓垪澶辫触:" + ex.Message);
+ MsgBoxHelper.Error(Window.GetWindow(this),
+ $"{this.lang("Ts.ReleaseSequenceFileFail")}: {ex.Message}");
}
}
@@ -267,13 +320,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)
@@ -313,6 +372,16 @@
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);
+ }
+
return;
}
if (MethodCode == 7)
@@ -332,10 +401,11 @@
{
step = values[0],
value = values[1],
- result = values[2],
- range = values[3],
- condition = values[4],
- updateTime = values[5]
+ limitUp = values[2],
+ limitDown = values[3],
+ unit = values[4],
+ result = values[5],
+ updateTime = values[6]
});
return;
}
@@ -357,27 +427,202 @@
tables[ovenIndex].GetSingleCell(cellIndex).ClearInfo();
return;
}
+ if (MethodCode == 12)
+ {
+ /// 淇濆瓨鐐変綋娓╁害鏂囦欢
+ strData = e.uiMsg.StringData;
+ string[] datas = strData.Split(';');
+ int ovenIndex = int.Parse(datas[0]);
+ string folder = datas[1];
+ tables[ovenIndex].SaveTempFile(folder);
+ return;
+ }
+ if (MethodCode == 13)
+ {
+ /// 娣诲姞鐢垫祦鏁版嵁
+ strData = e.uiMsg.StringData;
+ string[] datas = strData.Split(';');
+ int ovenIndex = int.Parse(datas[0]);
+ int cellIndex = int.Parse(datas[1]);
+ double eData = double.Parse(datas[2]);
+ tables[ovenIndex].GetSingleCell(cellIndex).AddElectricData(eData);
+ return;
+ }
+
+ if (MethodCode == 14)
+ {
+ /// 娓呯┖鐢垫祦鍜岀數鍘嬫暟鎹�
+ strData = e.uiMsg.StringData;
+ int ovenIndex = int.Parse(strData);
+ tables[ovenIndex].ClearCellData();
+ //tables[ovenIndex].ClearElectricData();
+ //tables[ovenIndex].ClearVData();
+ //tables[ovenIndex].ClearWaterData();
+ return;
+ }
+
+ if (MethodCode == 15)
+ {
+ /// 淇濆瓨鐢垫祦鏁版嵁
+ strData = e.uiMsg.StringData;
+ string[] datas = strData.Split(';');
+ int ovenIndex = int.Parse(datas[0]);
+ int cellIndex = int.Parse(datas[1]);
+ string filePath = datas[2];
+ tables[ovenIndex].GetSingleCell(cellIndex).SaveElectricDataToCSV(filePath);
+ return;
+ }
+
+ if (MethodCode == 16)
+ {
+ /// 娣诲姞鐢靛帇鍥捐〃鏁版嵁
+ strData = e.uiMsg.StringData;
+ string[] datas = strData.Split(';');
+ int ovenIndex = int.Parse(datas[0]);
+ int cellIndex = int.Parse(datas[1]);
+ double eData = double.Parse(datas[2]);
+ tables[ovenIndex].GetSingleCell(cellIndex).AddVData(eData);
+ return;
+ }
+
+ if (MethodCode == 17)
+ {
+ /// 淇濆瓨鐢靛帇鏁版嵁
+ strData = e.uiMsg.StringData;
+ string[] datas = strData.Split(';');
+ int ovenIndex = int.Parse(datas[0]);
+ int cellIndex = int.Parse(datas[1]);
+ string filePath = datas[2];
+ tables[ovenIndex].GetSingleCell(cellIndex).SaveVDataToCSV(filePath);
+ return;
+ }
+
+ if (MethodCode == 18)
+ {
+ /// 淇濆瓨绌翠綅娴嬭瘯鏁版嵁鍒癈SV
+ strData = e.uiMsg.StringData;
+ string[] datas = strData.Split(';');
+ int ovenIndex = int.Parse(datas[0]);
+ int cellIndex = int.Parse(datas[1]);
+ string filePath = datas[2];
+ tables[ovenIndex].GetSingleCell(cellIndex).SaveInfoToCSV(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]);
+ tables[ovenIndex].GetSingleCell(cellIndex).SaveInfoToDB();
+ return;
+ }
+
+ if (MethodCode == 20)
+ {
+ /// 娓呯┖鏉$爜
+ strData = e.uiMsg.StringData;
+ int ovenIndex = int.Parse(strData);
+ tables[ovenIndex].ClearAllSN();
+ 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;
+ 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);
+ }
+ else
+ {
+ SequenceContext.StationGlobals.SetValNumber($"StationState.Pipe[{index}]", 1, 0);
+ }
+ return;
+ }
}
catch (Exception ex)
{
-
+ ViewControl.Logger.Warn("TestStand Event Error.", ex);
}
}
public void SetStartFlag(int index, bool data)
{
if (this.SequenceContext == null) return;
- char name = (char)(index + 65);
- string key = $"StationState.Start_{name}";
- this.engine.Globals.SetValBoolean(key, 0, data);
- bool val = this.engine.Globals.GetValBoolean(key, 0);
+ string name = tables[index].title;
+ 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);
}
- public void SetSnrToSeqContext(int index, string snr)
+ public void ReleaseResource()
{
+ testApp.ExitApplication -= this.axApplicationMgr_ExitApplication;
+ testApp.UIMessageEvent -= this.axApplicationMgr_UIMessageEvent;
+ testApp.ExecutionClosed -= this.axApplicationMgr_ExecutionClosed;
+ foreach (var table in tables)
+ {
+ table.RelaseResource();
+ }
+ }
+ /// <summary>
+ /// 璁℃暟娓呴浂
+ /// </summary>
+ public void ClearNumber()
+ {
+ foreach (var table in tables)
+ {
+ table.ClearNumber();
+ }
+ }
+
+ public void SetProductSource(List<string> productSource)
+ {
+ foreach (var table in tables)
+ {
+ table.SetProductSource(productSource);
+ }
+ }
+
+ public void SetCurrentProduct(string currentProduct)
+ {
+ 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);
+ table.SetCurrentProduct(tableModel);
+ }
+ }
+
+ public void SetOvenProduct(int index, string product)
+ {
+ string LookupStr = $"StationState.Model[{index}]";
+ engine?.Globals?.SetValString(LookupStr, 1, product);
+ engine?.CommitGlobalsToDisk(promptOnSaveConflicts: false);
}
}
}
--
Gitblit v1.9.1