using LiveCharts; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.OperationCenter; using Microsoft.Win32; using Prism.Commands; using Prism.Mvvm; using System; using System.IO; using System.Linq; using System.Windows.Threading; using CyberX8_MainPages.Unity; using Venus_Unity; namespace CyberX8_MainPages.ViewModels { internal class VATPerformanceViewModel : BindableBase { #region 私有字段 private int m_GasFlow; private int m_GasTime; private int m_GasSelectedIndex; public string ModuleName; ChartValues m_CurrentLineSeries = new ChartValues(); ChartValues m_ReferenceLineSeries = new ChartValues(); DispatcherTimer timer = new DispatcherTimer(); VATPerformanceResult m_VATPerformanceResult; private bool m_MFC7IsEnable; private bool m_MFC8IsEnable; private bool m_IsAutoMode; #endregion #region 属性 public int GasFlow { get { return m_GasFlow; } set { SetProperty(ref m_GasFlow, value); } } public int GasTime { get { return m_GasTime; } set { SetProperty(ref m_GasTime, value); } } public int GasSelectedIndex { get { return m_GasSelectedIndex; } set { SetProperty(ref m_GasSelectedIndex, value); } } public ChartValues CurrentLineSeries { get { return m_CurrentLineSeries; } set { SetProperty(ref m_CurrentLineSeries, value); } } public ChartValues ReferenceLineSeries { get { return m_ReferenceLineSeries; } set { SetProperty(ref m_ReferenceLineSeries, value); } } public bool MFC7IsEnable { get { return m_MFC7IsEnable; } set { SetProperty(ref m_MFC7IsEnable, value); } } public bool MFC8IsEnable { get { return m_MFC8IsEnable; } set { SetProperty(ref m_MFC8IsEnable, value); } } public bool IsAutoMode { get { return m_IsAutoMode; } set { SetProperty(ref m_IsAutoMode, value); } } #endregion #region 命令 private DelegateCommand _SelectGasCommand; public DelegateCommand SelectGasCommand => _SelectGasCommand ?? (_SelectGasCommand = new DelegateCommand(OnSelectGas)); private DelegateCommand _StartCommand; public DelegateCommand StartCommand => _StartCommand ?? (_StartCommand = new DelegateCommand(OnStart)); private DelegateCommand _LoadReferenceCommand; public DelegateCommand LoadReferenceCommand => _LoadReferenceCommand ?? (_LoadReferenceCommand = new DelegateCommand(OnLoadReference)); private DelegateCommand _AbortCommand; public DelegateCommand AbortCommand => _AbortCommand ?? (_AbortCommand = new DelegateCommand(OnAbort)); private DelegateCommand _SaveCommand; public DelegateCommand SaveCommand => _SaveCommand ?? (_SaveCommand = new DelegateCommand(OnSave)); #endregion #region 构造函数 public VATPerformanceViewModel() { OnSelectGas(); GasTime = 60; timer.Interval = TimeSpan.FromSeconds(2); timer.Tick += Timer_Tick; } #endregion #region 命令方法 private void OnSelectGas() { var value=Convert.ToInt32( QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas{(GasSelectedIndex+1).ToString()}.MfcN2Scale")); var xishu= Convert.ToDouble(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas{(GasSelectedIndex + 1).ToString()}.MfcScaleFactor")); GasFlow = (int)(value * xishu) / 2; } //public enum CMPressure //{ // CM1, // CM2, //} //private CMPressure currentCMPressure = CMPressure.CM1; private void OnStart() { //currentCMPressure = CMPressure.CM1; m_VATPerformanceResult = new VATPerformanceResult(); m_VATPerformanceResult.StartTime = DateTime.Now.ToString(); m_VATPerformanceResult.FlowTime = GasTime; m_VATPerformanceResult.GasName = $"Gas{GasSelectedIndex+1}"; CurrentLineSeries = new ChartValues(); timer.Start(); InvokeClient.Instance.Service.DoOperation($"{ModuleName}.VATPerformanceTest", GasSelectedIndex+1, 1000 * GasTime, GasFlow); } private void OnLoadReference() { //ReferenceLineSeries.Clear(); //for (int i = 0; i < 21; i++) //{ // double value = Math.Round((double)GasFlow / (double)((i + 2) * 50),3); // ReferenceLineSeries.Add(value); //} OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = ".json|*.json"; dialog.InitialDirectory = Path.Combine(QueryDataClient.Instance.Service.GetData("GetRTPath").ToString(), "VATPerformanceResult"); if (dialog.ShowDialog() == true) { string SelectedPath = dialog.FileName; var value = SerializeHelper.Instance.ReadFromJsonFile(SelectedPath); ReferenceLineSeries.Clear(); value.ValuePairs.ForEach(x => { ReferenceLineSeries.Add(x); }); } else { ReferenceLineSeries.Clear(); ReferenceLineSeries.Add(0); } } private void OnAbort() { timer.Stop(); InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Abort"); CurrentLineSeries = new ChartValues(); } private void OnSave() { SerializeHelper.Instance.WriteToJsonFile(m_VATPerformanceResult, $"VATPerformanceResult/{m_VATPerformanceResult.GasName}/{DateTime.Now.ToString("yyyyMMddHHmm")}.json"); } #endregion #region 私有方法 private void Timer_Tick(object sender, EventArgs e) { CurrentLineSeries.Clear(); var values = QueryDataClient.Instance.Service.GetData($"{ModuleName}.VATPerformanceResult").ToString(); values.Split(',').ToList().ForEach(x => { if (x != "") { CurrentLineSeries.Add(Math.Round( Convert.ToDouble(x),3)); } }); if (CurrentLineSeries.Count == 20) { timer.Stop(); } MFC7IsEnable = (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas7.Enable"); MFC8IsEnable = (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas8.Enable"); IsAutoMode = (bool)QueryDataClient.Instance.Service.GetData($"{ModuleName}.IsOnline"); } #endregion } }