using HMI.Base; using HMI.ParameterManage.Entity; using HMI.ParameterManage.Util; using NationalInstruments.TestStand.Interop.API; using NationalInstruments.TestStand.Interop.UI.Ax; using Plugin.TestResult_WPF.Model; using Plugin.TestResult_WPF.Util; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Windows; using System.Windows.Controls; namespace Plugin.TestResult_WPF { /// /// ViewControl.xaml 的交互逻辑 /// public partial class ViewControl : PluginControl { private CommonCodeParser codeParser = new CommonCodeParser(); private double TestTemperature = 60; private int TestTime = 3600; private double SaftyTemperature = 40; private double TestVoltage = 12; private double Time_Heating_Low = 300; private double Time_Heating_High = 2400; private string testSeqFile; private Scanner scannerWindow1; private Scanner scannerWindow2; /// /// 测试序列操作句柄 /// private SequenceContext SequenceContext = null; private bool _mesStatus; public bool mesStatus { get => _mesStatus; set => Set(ref _mesStatus, value); } private string _produceStatus = "INIT"; public string produceStatus { get => _produceStatus; set => Set(ref _produceStatus, value); } public ViewControl() { DataContext = this; InitializeComponent(); testResultView.testApp.ExitApplication += new EventHandler(this.axApplicationMgr_ExitApplication); testResultView.testApp.UIMessageEvent += new _ApplicationMgrEvents_UIMessageEventEventHandler(this.axApplicationMgr_UIMessageEvent); testResultView.testApp.ExecutionClosed += new _ApplicationMgrEvents_ExecutionClosedEventHandler(this.axApplicationMgr_ExecutionClosed); } private void axApplicationMgr_ExitApplication(object sender, EventArgs e) { } private void axApplicationMgr_ExecutionClosed(object sender, _ApplicationMgrEvents_ExecutionClosedEvent e) { } private void axApplicationMgr_UIMessageEvent(object sender, _ApplicationMgrEvents_UIMessageEventEvent e) { 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; return; } if (MethodCode == 8) { /// 更新MES状态 strData = e.uiMsg.StringData; mesStatus = strData == "1"; return; } if (MethodCode == 9) { /// 更新生产状态 strData = e.uiMsg.StringData; produceStatus = strData; return; } } catch { } } private void UserControl_Loaded(object sender, RoutedEventArgs e) { LoadProduct(); testResultView.InitTestStandEngine(); Start_Click(null, null); } public void LoadProduct() { List products = ParameterManager.GetProducts(); this.modelSelect.Items.Clear(); foreach (var prd in products) { this.modelSelect.Items.Add(prd.Name); } if (products.Count > 0) { this.modelSelect.SelectedIndex = 0; } } private void modelSelect_SelectionChanged(object sender, SelectionChangedEventArgs e) { try { List parameters = ParameterManager.GetParametersByProductName(this.modelSelect.SelectedItem.ToString()); //MessageBox.Show("ParaFile:" + ParaFile + "ParaCount:" + this.parameterManager.Parameters.Count.ToString()); //this.TestTemperature = Convert.ToDouble(this.parameterManager.Find("TestTemperature").ParmValue); //this.TestTime = Convert.ToInt32(this.parameterManager.Find("TestTime").ParmValue); //this.TestVoltage = Convert.ToDouble(this.parameterManager.Find("TestVoltage").ParmValue); //this.SaftyTemperature = Convert.ToDouble(this.parameterManager.Find("SaftyTemperature").ParmValue); //this.Time_Heating_Low = Convert.ToDouble(this.parameterManager.Find("Time_Heat_Low").ParmValue); //this.Time_Heating_High = Convert.ToDouble(this.parameterManager.Find("Time_Heat_High").ParmValue); testResultView.testSeqFile = parameters.FirstOrDefault(p => p.Name == "TestSequence")?.Value; } catch (Exception ex) { MessageBox.Show("切换产品型号失败!" + ex.Message + ex.StackTrace); } } private void Start_Click(object sender, RoutedEventArgs e) { try { testResultView.StartTestSequence(); this.modelSelect.IsEnabled = false; this.btnStart.IsEnabled = false; this.btnStop.IsEnabled = true; } catch (Exception ex) { MessageBox.Show("启动测试失败!" + ex.Message); } } private void Stop_Click(object sender, RoutedEventArgs e) { try { testResultView.StopTest(); this.modelSelect.IsEnabled = true; this.btnStart.IsEnabled = true; this.btnStop.IsEnabled = false; } catch (Exception ex) { MessageBox.Show("停止测试失败!" + ex.Message); } } private void Scan_Click_1(object sender, RoutedEventArgs e) { if (scannerWindow1 == null) { scannerWindow1 = new Scanner("一区扫码"); scannerWindow1.FinishBarcode += ScannerWindow_FinishBarcode; scannerWindow1.Owner = Window.GetWindow(this); scannerWindow1.Closed += ScannerWindow1_Closed; scannerWindow1.Show(); } else { scannerWindow1.Activate(); } } private void Scan_Click_2(object sender, RoutedEventArgs e) { if (scannerWindow2 == null) { scannerWindow2 = new Scanner("二区扫码"); scannerWindow2.FinishBarcode += ScannerWindow_FinishBarcode; scannerWindow2.Owner = Window.GetWindow(this); scannerWindow2.Closed += ScannerWindow2_Closed; scannerWindow2.Show(); } else { scannerWindow2.Activate(); } } /// /// 扫码完成逻辑 /// /// /// private void ScannerWindow_FinishBarcode(object sender, BarcodeEventArg e) { if (this.SequenceContext == null) return; CellInfo cellInfo = codeParser.GetCellInfoByCode(e.positionCode); string paramName = e.name == "一区扫码" ? "StationState.StartScanner_A" : "StationState.StartScanner_B"; testResultView.engine.Globals.SetValBoolean(paramName, 0, true); string positionCode = e.positionCode, snrCode = e.snrCode; //需要增加条码校验功能 //将读到的条码写入到SN中 int dutNo = Convert.ToInt16(positionCode.Split('-')[2]) - 1; string LookupStr = e.name == "一区扫码" ? $"StationState.SN[{dutNo}]" : $"StationState.SN[{(dutNo + 54)}]"; //this.SequenceContext.StationGlobals.SetValString(LookupStr, 0, snrCode); //string code = this.SequenceContext.StationGlobals.GetValString(LookupStr, 0); testResultView.engine.Globals.SetValString(LookupStr, 0, snrCode); string code = testResultView.engine.Globals.GetValString(LookupStr, 0); testResultView.nameTables[cellInfo.OvenName].GetSingleCell(cellInfo.Index).SetStatus("hadCode"); } private void ScannerWindow1_Closed(object sender, EventArgs e) { scannerWindow1 = null; } private void ScannerWindow2_Closed(object sender, EventArgs e) { scannerWindow2 = null; } private void testResultView_Loaded(object sender, RoutedEventArgs e) { } } }