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
|
{
|
/// <summary>
|
/// SingleControl.xaml 的交互逻辑
|
/// </summary>
|
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<T>(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;
|
}
|
|
/// <summary>
|
/// 获取TS的每步测试的数据添加到表格
|
/// </summary>
|
/// <param name="TS_Data"></param>
|
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;
|
}
|
|
/// <summary>
|
/// 设置测试进度条
|
/// </summary>
|
/// <param name="ProcessVal"></param>
|
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);
|
}
|
}
|
}
|