alielie
2025-11-25 006c98e5650b530e5220f279c1e803fefe69d40d
Plugin.TestResult/ViewControl.xaml.cs
@@ -2,18 +2,19 @@
using HMI.Core.Entity;
using HMI.Core.Manager;
using HMI.Core.Util;
using HMI.StdControl;
using HMI.UI;
using HMI.UI.Util;
using log4net;
using NationalInstruments.TestStand.Interop.API;
using NationalInstruments.TestStand.Interop.UI.Ax;
using Plugin.TestResult;
using Plugin.TestResult_WPF.Model;
using Plugin.TestResult_WPF.Util;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
@@ -22,7 +23,7 @@
    /// <summary>
    /// ViewControl.xaml 的交互逻辑
    /// </summary>
    public partial class ViewControl : PluginControl
    public partial class ViewControl : PluginMaskControl
    {
        private CommonCodeParser codeParser = new CommonCodeParser();
        private double TestTemperature = 60;
@@ -31,7 +32,6 @@
        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;
        /// <summary>
@@ -58,11 +58,35 @@
            set => Set(ref _produceStatus, value);
        }
        private string _fileName;
        public string FileName
        {
            get => _fileName;
            set => Set(ref _fileName, value);
        }
        public override void SetLogger(ILog logger)
        {
            base.SetLogger(logger);
            Logger = logger;
        }
        private bool isRunning = false;
        public bool IsRunning
        {
            get => isRunning;
            set
            {
                Set(ref isRunning, value);
                testResultView.IsRunning = value;
                this.modelSelect.IsEnabled = !value;
                this.btnStart.IsEnabled = !value;
                this.btnStop.IsEnabled = value;
            }
        }
        private bool AutoExecuteSeq = true;
        public ViewControl()
        {
@@ -94,11 +118,39 @@
            }
            SannerIniFile = path;
            LoadProduct();
            try
            {
                var value = ParameterManager.GetCommonParameterByName("AutoExecuteSeq");
                AutoExecuteSeq = bool.Parse(value.Value);
            }
            catch
            {
                AutoExecuteSeq = true;
            }
            try
            {
                var value = ParameterManager.GetCommonParameterByName("BurnInMainSeq");
                testResultView.testSeqFile = value.Value;
                FileName = Path.GetFileName(value.Value);
            }
            catch
            {
                testResultView.testSeqFile = string.Empty;
                FileName = string.Empty;
            }
        }
        public override void DoClose(object sender, EventArgs e)
        {
            testResultView.ReleaseResource();
            try
            {
                testResultView.ReleaseResource();
            }
            catch
            {
            }
        }
        private void axApplicationMgr_ExitApplication(object sender, EventArgs e)
@@ -116,6 +168,21 @@
                int EventCase = Convert.ToInt32(e.uiMsg.Event);
                int MethodCode = Convert.ToInt16(e.uiMsg.NumericData);
                string strData;
                try
                {
                    log.Debug($"EventCase: {EventCase}, MethodCode: {MethodCode}, StrData: {e.uiMsg.StringData}");
                }
                catch
                {
                }
                if (EventCase == 8)
                {
                    IsRunning = false;
                    return;
                }
                if (EventCase != 10014) return;
@@ -150,22 +217,62 @@
        private bool isLoaded;
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            new MaskWindow(Window.GetWindow(this),
                (win) =>
            if (AutoExecuteSeq)
            {
                ShowMask(() =>
                {
                    Dispatcher.Invoke(() =>
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                        try
                        {
                            Start_Click(null, null);
                            Loaded -= UserControl_Loaded;
                        }
                        finally
                        {
                            win.Close();
                        }
                    });
                }).Info(LangUtil.Get("Ts.SequenceIsStarting"));
                        Start_Click(null, null);
                    }), System.Windows.Threading.DispatcherPriority.Background);
                }, (ex) =>
                {
                    ToastHelper.Error("Loaded Failed.");
                    log.Error("Loaded Failed.", ex);
                }, "请稍后", LangUtil.Get("Ts.SequenceIsStarting"));
            }
            else
            {
                IsRunning = false;
            }
            Loaded -= UserControl_Loaded;
            //new MaskWindow(Window.GetWindow(this), (win) =>
            //{
            //    try
            //    {
            //        Dispatcher.BeginInvoke(new Action(() =>
            //        {
            //            Start_Click(null, null);
            //            Loaded -= UserControl_Loaded;
            //        }));
            //    }
            //    finally
            //    {
            //        Dispatcher.Invoke(() =>
            //        {
            //            win.Close();
            //        });
            //    }
            //}).Info(LangUtil.Get("Ts.SequenceIsStarting"), 100);
            //ShowMask(() =>
            //{
            //    Dispatcher.BeginInvoke(new Action(() =>
            //    {
            //        System.Threading.Thread.Sleep(100);
            //        Start_Click(null, null);
            //        Loaded -= UserControl_Loaded;
            //    }));
            //}, (ex) =>
            //{
            //    log.Error("Loaded Error.", ex);
            //    Dispatcher.BeginInvoke(new Action(() =>
            //    {
            //        MsgBoxHelper.Error(Window.GetWindow(this), ex.Message);
            //    }));
            //}, "请稍后", LangUtil.Get("Ts.SequenceIsStarting"));
        }
        public void LoadProduct()
@@ -181,7 +288,7 @@
            }
            testResultView.SetProductSource(productSource);
            string model = testResultView.engine.Globals.GetValString("ProductModel", 0);
            string model = testResultView.engine.Globals.GetValString("ProductModel", 1);
            if (!string.IsNullOrEmpty(model))
            {
                this.modelSelect.SelectedItem = model;
@@ -207,7 +314,7 @@
                //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;
                //testResultView.testSeqFile = parameters.FirstOrDefault(p => p.Name == "TestSequence")?.Value;
                testResultView.engine.Globals.SetValString("ProductModel", 0, currentModel);
                testResultView.engine.CommitGlobalsToDisk(promptOnSaveConflicts: false);
@@ -222,10 +329,14 @@
        {
            try
            {
                if (string.IsNullOrEmpty(testResultView.testSeqFile))
                {
                    MsgBoxHelper2.Warn("请先设置BurnInMainSeq属性!");
                    IsRunning = false;
                    return;
                }
                testResultView.StartTestSequence();
                this.modelSelect.IsEnabled = false;
                this.btnStart.IsEnabled = false;
                this.btnStop.IsEnabled = true;
                IsRunning = true;
            }
            catch (Exception ex)
            {
@@ -240,9 +351,7 @@
            try
            {
                testResultView.StopTest();
                this.modelSelect.IsEnabled = true;
                this.btnStart.IsEnabled = true;
                this.btnStop.IsEnabled = false;
                IsRunning = false;
            }
            catch (Exception ex)
            {
@@ -250,70 +359,6 @@
                MsgBoxHelper.Error(Window.GetWindow(this),
                    $"{this.lang("Ts.StopTestSequenceFailed")}: {ex.Message}");
            }
        }
        private void Scan_Click_1(object sender, RoutedEventArgs e)
        {
            if (scannerWindow1 == null)
            {
                scannerWindow1 = new Scanner(this.lang("Tr.Zone1Scan"))
                {
                    Tag = "Zone1"
                };
                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(this.lang("Tr.Zone2Scan"))
                {
                    Tag = "Zone2"
                };
                scannerWindow2.FinishBarcode += ScannerWindow_FinishBarcode;
                scannerWindow2.Owner = Window.GetWindow(this);
                scannerWindow2.Closed += ScannerWindow2_Closed;
                scannerWindow2.Show();
            }
            else
            {
                scannerWindow2.Activate();
            }
        }
        /// <summary>
        /// 扫码完成逻辑
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ScannerWindow_FinishBarcode(object sender, BarcodeEventArg e)
        {
            if (this.SequenceContext == null) return;
            CellInfo cellInfo = codeParser.GetCellInfoByCode(e.positionCode);
            string paramName = e.name == "Zone1" ? "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 == "Zone1" ? $"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)
@@ -342,10 +387,16 @@
        private void ScannerSetting_Click(object sender, RoutedEventArgs e)
        {
            ScannerSetting setting = new ScannerSetting() {
            Plugin.TestResult.ScannerSetting setting = new Plugin.TestResult.ScannerSetting()
            {
                Owner = Window.GetWindow(this)
            };
            setting.Open(false,"Config");
            setting.Open(false, "Config");
        }
        private void StdEnableMes_ValueChanged(object sender, StdUIEventArg e)
        {
            testResultView.SequenceContext?.StationGlobals.SetValBoolean($"SystemSetting.{e.StringValue}", 1, e.BoolValue);
        }
    }
}