| | |
| | | using NationalInstruments.TestStand.Interop.API; |
| | | 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; |
| | |
| | | /// <summary> |
| | | /// 测试序列操作句柄 |
| | | /// </summary> |
| | | private SequenceContext SequenceContext = null; |
| | | public SequenceContext SequenceContext { get; private set; } = null; |
| | | /// <summary> |
| | | /// 测试模型序列 |
| | | /// </summary> |
| | |
| | | { |
| | | |
| | | } |
| | | |
| | | public bool IsRunning { get; set; } = false; |
| | | |
| | | public TestResultView(BaseConfig config) |
| | | { |
| | |
| | | |
| | | |
| | | 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(); |
| | | } |
| | |
| | | Random random = new Random(i * 13); |
| | | sb.Elapsed += (s, e) => |
| | | { |
| | | |
| | | table.RefreshCount(1, 0); |
| | | 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.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)); |
| | | tables[0].GetSingleCell(0).AddElectricData(random.Next(100)); |
| | | |
| | | |
| | | var cell = table.GetSingleCell(random.Next(table.GetSize())); |
| | | var cell = tables[0].GetSingleCell(0);//table.GetSingleCell(random.Next(table.GetSize())); |
| | | cell.SetStatus(CommonStatus.GetRandomStatus()); |
| | | cell.SetInfos(random.Next(1000) + "", random.Next(1000) + ""); |
| | | cell.SetInfos(new Info |
| | | { |
| | | step = random.Next(1000) + "", |
| | | value = random.Next(1000) + "" |
| | | }); |
| | | table.SetStatusText(DateTime.Now + ""); |
| | | }; |
| | | sb.Start(); |
| | | } |
| | | } |
| | | |
| | | private string CountIniPath; |
| | | public void SetCountIniPath(string countIniPath) |
| | | { |
| | | CountIniPath = countIniPath; |
| | | } |
| | | |
| | | public void InitMainGrid() |
| | |
| | | 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; |
| | |
| | | |
| | | 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; |
| | | } |
| | | |
| | |
| | | this.testApp.LoginOnStart = false; |
| | | this.testApp.Start(); |
| | | this.modeSeq = this.engine.GetSequenceFileEx(@"C:\Program Files\National Instruments\TestStand 2020\Components\Models\TestStandModels\ParallelModel.seq"); |
| | | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception("初始化TS引擎失败:" + ex.Message); |
| | | ViewControl.Logger.Error("InitTestStandEngine Failed.", ex); |
| | | throw new Exception($"{this.lang("Ts.InitTestStandEngineFail")}: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception("启动测试序列失败:" + ex.Message); |
| | | ViewControl.Logger.Error("StartTestSequence Failed.", ex); |
| | | throw new Exception($"{this.lang("Ts.StartTestSequenceFailed")}: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | throw new Exception(ex.Message); |
| | | ViewControl.Logger.Error("StopTest Failed.", ex); |
| | | throw new Exception($"{this.lang("Ts.StopTestSequenceFailed")}: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | MessageBox.Show("释放测试序列失败:" + ex.Message); |
| | | MsgBoxHelper.Error(Window.GetWindow(this), |
| | | $"{this.lang("Ts.ReleaseSequenceFileFail")}: {ex.Message}"); |
| | | } |
| | | } |
| | | |
| | |
| | | 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) |
| | |
| | | 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].ClearElectricData(); |
| | | 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; |
| | | } |
| | | } |
| | | 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 name = tables[index].title; |
| | | string key = $"StationState.Start_{name}"; |
| | | this.engine.Globals.SetValBoolean(key, 0, data); |
| | | bool val = this.engine.Globals.GetValBoolean(key, 0); |
| | | 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) |
| | | { |
| | | foreach (var table in tables) |
| | | { |
| | | table.SetCurrentProduct(currentProduct); |
| | | } |
| | | } |
| | | |
| | | public void SetOvenProduct(int index, string product) |
| | | { |
| | | string LookupStr = $"StationState.ProductModel_{tables[index].title}"; |
| | | engine?.Globals?.SetValString(LookupStr, 1, product); |
| | | } |
| | | } |
| | | } |