| | |
| | | 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; |
| | | |
| | |
| | | |
| | | 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() |
| | |
| | | /// <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; |
| | |
| | | try |
| | | { |
| | | executionWrapper?.SetStationGlobalValue<bool>("StationState.StopTest", 0, true, true); |
| | | |
| | | |
| | | try |
| | | { |
| | | executionWrapper?.WaitForExit(); |
| | |
| | | } |
| | | } |
| | | |
| | | [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 |
| | |
| | | } |
| | | } |
| | | |
| | | 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]); |
| | | |
| | |
| | | if (MethodCode == 2) |
| | | { |
| | | /// 更新炉子数量信息 |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas_10014 = strData.Split(';'); |
| | | int ovenIndex = int.Parse(datas_10014[0]); |
| | | |
| | |
| | | if (MethodCode == 3) |
| | | { |
| | | /// 更新炉子时间信息 |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas_10014 = strData.Split(';'); |
| | | int ovenIndex = int.Parse(datas_10014[0]); |
| | | string startTime = datas_10014[1]; |
| | |
| | | if (MethodCode == 4) |
| | | { |
| | | /// 更新老化炉底部状态栏 |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas_10014 = strData.Split(';'); |
| | | int ovenIndex = int.Parse(datas_10014[0]); |
| | | |
| | |
| | | if (MethodCode == 5) |
| | | { |
| | | /// 采集炉温度 |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas_10016 = strData.Split(';'); |
| | | int ovenIndex = int.Parse(datas_10016[0]); |
| | | |
| | |
| | | } |
| | | 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]); |
| | |
| | | if (MethodCode == 10) |
| | | { |
| | | /// 清空炉子的温度图表 |
| | | strData = e.uiMsg.StringData; |
| | | int ovenIndex = int.Parse(strData); |
| | | tables[ovenIndex].ClearChartData(); |
| | | return; |
| | |
| | | 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]); |
| | |
| | | if (MethodCode == 12) |
| | | { |
| | | /// 保存炉体温度文件 |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas = strData.Split(';'); |
| | | int ovenIndex = int.Parse(datas[0]); |
| | | string folder = datas[1]; |
| | |
| | | if (MethodCode == 13) |
| | | { |
| | | /// 添加电流数据 |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas = strData.Split(';'); |
| | | int ovenIndex = int.Parse(datas[0]); |
| | | int cellIndex = int.Parse(datas[1]); |
| | |
| | | if (MethodCode == 14) |
| | | { |
| | | /// 清空电流和电压数据 |
| | | strData = e.uiMsg.StringData; |
| | | int ovenIndex = int.Parse(strData); |
| | | tables[ovenIndex].ClearCellData(); |
| | | //tables[ovenIndex].ClearElectricData(); |
| | |
| | | if (MethodCode == 15) |
| | | { |
| | | /// 保存电流数据 |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas = strData.Split(';'); |
| | | int ovenIndex = int.Parse(datas[0]); |
| | | int cellIndex = int.Parse(datas[1]); |
| | |
| | | if (MethodCode == 16) |
| | | { |
| | | /// 添加电压图表数据 |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas = strData.Split(';'); |
| | | int ovenIndex = int.Parse(datas[0]); |
| | | int cellIndex = int.Parse(datas[1]); |
| | |
| | | if (MethodCode == 17) |
| | | { |
| | | /// 保存电压数据 |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas = strData.Split(';'); |
| | | int ovenIndex = int.Parse(datas[0]); |
| | | int cellIndex = int.Parse(datas[1]); |
| | |
| | | if (MethodCode == 18) |
| | | { |
| | | /// 保存穴位测试数据到CSV |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas = strData.Split(';'); |
| | | int ovenIndex = int.Parse(datas[0]); |
| | | int cellIndex = int.Parse(datas[1]); |
| | |
| | | tables[ovenIndex].GetSingleCell(cellIndex).SaveInfoToCSV(filePath); |
| | | return; |
| | | } |
| | | if (MethodCode == 180) |
| | | { |
| | | /// 保存穴位测试数据到CSV |
| | | 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) |
| | | { |
| | | /// 保存穴位测试数据到Sqlite |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas = strData.Split(';'); |
| | | int ovenIndex = int.Parse(datas[0]); |
| | | int cellIndex = int.Parse(datas[1]); |
| | |
| | | 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]); |
| | |
| | | |
| | | if (MethodCode == 99) |
| | | { |
| | | strData = e.uiMsg.StringData; |
| | | string[] datas = strData.Split(';'); |
| | | int index = int.Parse(datas[0]); |
| | | if (MsgBoxHelper2.WarnChoose(datas[1], "提示") == MessageBoxResult.OK) |
| | |
| | | } |
| | | } |
| | | |
| | | 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; |
| | |
| | | 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(); |