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);
}
}
}