using HMI.Core.Util; using NationalInstruments.TestStand.Interop.API; using System; using System.ComponentModel; using System.Data; using System.Runtime.CompilerServices; using System.Timers; using System.Windows; using System.Windows.Controls; namespace Plugin.TsExecution { /// /// SingleControl.xaml 的交互逻辑 /// public partial class SingleControl : UserControl, INotifyPropertyChanged { #region ... public event PropertyChangedEventHandler PropertyChanged; protected void Set([CallerMemberName] string name = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); } protected void Set(ref T old, T @new, [CallerMemberName] string propertyName = null) { old = @new; if (propertyName != null) { Set(propertyName); } } #endregion private bool isLoadOK = false; private int index; private string counterFilePath; private string status = "Ready"; public string Status { get { return status; } set { Set(ref status, value); } } private int totalNum; public int TotalNum { get => totalNum; private set { Set(ref totalNum, value); } } private int passNum; public int PassNum { get => passNum; private set { Set(ref passNum, value); } } private int failNum; public int FailNum { get => failNum; private set { Set(ref failNum, value); } } private double passRate; public double PassRate { get => passRate; private set { Set(ref passRate, value); } } public string NumInfo { get => this.lang("Ts.NumInfo", TotalNum, PassNum, FailNum, string.Format("{0:0.00}", PassRate)); } public string TestInfo { get => this.lang("Ts.TestInfo", Barcode, ElapseTime); } private string currentStep; public string CurrentStep { get { return currentStep; } set { Set(ref currentStep, value); } } private string barcode = string.Empty; public string Barcode { get { return barcode; } set { Set(ref barcode, value); } } private string elapseTime = "00:00:00"; public string ElapseTime { get { return elapseTime; } set { if (value == "Start Timing") { this.refreshTimer.Enabled = true; TimeNow = DateTime.Now; } else { this.refreshTimer.Enabled = false; if (value != "Stop Timing") { Set(ref elapseTime, value + "s"); Set("TestInfo"); } } } } private DateTime TimeNow = new DateTime(); private TimeSpan TimeCount = new TimeSpan(); private Timer refreshTimer; private DataTable dt; public SingleControl(int Index, int passNum, int failNum) { DataContext = this; this.index = Index; PassNum = passNum; FailNum = failNum; dt = new DataTable(); dt.Columns.Add(new DataColumn("Name", typeof(string))); dt.Columns.Add(new DataColumn("Unit", typeof(string))); dt.Columns.Add(new DataColumn("Value", typeof(string))); dt.Columns.Add(new DataColumn("LimitDown", typeof(string))); dt.Columns.Add(new DataColumn("LimitUp", typeof(string))); dt.Columns.Add(new DataColumn("Result", typeof(string))); refreshTimer = new Timer() { Interval = 1000 }; refreshTimer.Elapsed += RefreshTimer_Elapsed; InitializeComponent(); } private void RefreshTimer_Elapsed(object sender, ElapsedEventArgs e) { TimeCount = DateTime.Now - TimeNow; elapseTime = string.Format("{0:00}:{1:00}:{2:00}", TimeCount.Hours, TimeCount.Minutes, TimeCount.Seconds); Set("ElapseTime"); Set("TestInfo"); } public SequenceContext SequenceFileContext { get; set; } /// /// 获取TS的每步测试的数据添加到表格 /// /// public void AddTestData(string step_name, string unit, string TestValue, string LowLimit, string HightLimit, string Status) { try { var dr = dt.NewRow(); dr[0] = step_name; dr[1] = unit; dr[2] = TestValue; dr[3] = LowLimit; dr[4] = HightLimit; dr[5] = Status; dt.Rows.Add(dr); table.ItemsSource = dt.DefaultView; } catch { //屏蔽错误 } } public void UpdateStatus(string status) { Status = status; if (status == "Passed") { UpdateTestCounter(true); } else if (status == "Error" || status == "Failed") { UpdateTestCounter(false); } } public void IniTestData() { dt.Clear(); table.ItemsSource = dt.DefaultView; } /// /// 设置测试进度条 /// /// public void SetTestProcess(int ProcessVal) { //this.TestProcess.Value = ProcessVal; //this.TestProcessLabel.Text = ProcessVal.ToString() + "%"; //this.TestProcessLabel.BackColor = Color.Transparent; } private void UserControl_Loaded(object sender, RoutedEventArgs e) { this.UpdateTestCounter(null); } private void UpdateTestCounter(bool? result) { if (result == true) { PassNum += 1; } else if (result == false) { FailNum += 1; } TotalNum = PassNum + FailNum; if (TotalNum != 0) { PassRate = (PassNum / TotalNum) * 100; } else { PassRate = 0.0; } Set("NumInfo"); this.WriteCounter(); } private void WriteCounter() { } public void ResetCounter() { PassNum = 0; FailNum = 0; this.UpdateTestCounter(null); } } }