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.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Threading; using Venus_Core; //using Venus_Core; using Venus_MainPages.Unity; using Venus_Unity; namespace Venus_MainPages.ViewModels { internal class PartialPressureViewModel : BindableBase { #region 私有字段 private Dictionary m_GasFlows = new Dictionary(); //private object[] m_GasPressures = new object[10]; public string ModuleName; private int m_GasIndex; ChartValues m_CurrentLineSeries= new ChartValues(); ChartValues m_ReferenceLineSeries = new ChartValues(); DispatcherTimer timer = new DispatcherTimer(); private int m_GasTime; private string m_GasName; //private PartialPressureResult m_partialPressureResult; string value; int maxScale; ObservableCollection m_ReferenceFlow = new ObservableCollection(); private bool m_MFC7IsEnable; private bool m_MFC8IsEnable; private bool m_MFC9IsEnable; private bool m_MFC10IsEnable; private bool m_MFC11IsEnable; private bool m_MFC12IsEnable; private bool m_IsAutoMode; private PressureType m_PressureType; #endregion #region 属性 public PressureType PressureType { get { return m_PressureType; } set { SetProperty(ref m_PressureType, value); } } public ObservableCollection ReferenceFlow { get { return m_ReferenceFlow; } set { SetProperty(ref m_ReferenceFlow, value); } } public Dictionary GasFlows { get { return m_GasFlows; } set { SetProperty(ref m_GasFlows, 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 int GasTime { get { return m_GasTime; } set { SetProperty(ref m_GasTime, value); } } public string GasName { get { return m_GasName; } set { SetProperty(ref m_GasName, 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 MFC9IsEnable { get { return m_MFC9IsEnable; } set { SetProperty(ref m_MFC9IsEnable, value); } } public bool MFC10IsEnable { get { return m_MFC10IsEnable; } set { SetProperty(ref m_MFC10IsEnable, value); } } public bool MFC11IsEnable { get { return m_MFC11IsEnable; } set { SetProperty(ref m_MFC11IsEnable, value); } } public bool MFC12IsEnable { get { return m_MFC12IsEnable; } set { SetProperty(ref m_MFC12IsEnable, 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 _SaveCommand; public DelegateCommand SaveCommand => _SaveCommand ?? (_SaveCommand = new DelegateCommand(OnSave)); private DelegateCommand _LoadReferenceCommand; public DelegateCommand LoadReferenceCommand => _LoadReferenceCommand ?? (_LoadReferenceCommand = new DelegateCommand(OnLoadReference)); private DelegateCommand _AbortCommand; public DelegateCommand AbortCommand => _AbortCommand ?? (_AbortCommand = new DelegateCommand(OnAbort)); private DelegateCommand _LoadCommand; public DelegateCommand LoadCommand => _LoadCommand ?? (_LoadCommand = new DelegateCommand(OnLoad)); #endregion #region 构造函数 public PartialPressureViewModel() { GasTime = 60; timer.Interval = TimeSpan.FromSeconds(1); timer.Tick += Timer_Tick; } #endregion #region 命令方法 private void OnLoad() { var jetChamber = (JetChamber)Enum.Parse(typeof(JetChamber), QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.ChamberType").ToString()); if (jetChamber == JetChamber.Kepler2200A || jetChamber == JetChamber.Kepler2200B) { PressureType = PressureType.Pa; } } private void OnSelectGas(object obj) { Dictionary CurrentGasFlows = new Dictionary(); value = $"MfcGas{obj.ToString()}"; maxScale= Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.{value}.MfcN2Scale")); var xishu = Convert.ToDouble(QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.{value}.MfcScaleFactor")); GasName = QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.{value}.GasName").ToString(); for (int i = 1; i < 11; i++) { CurrentGasFlows.Add(i, (int)(maxScale *xishu / 10 * i)); } GasFlows = CurrentGasFlows; m_GasIndex = Convert.ToInt32(obj); } private void OnStart() { timer.Start(); InvokeClient.Instance.Service.DoOperation($"{ModuleName}.PartialPressureTest", m_GasIndex,1000* GasTime); } private void OnSave() { //SerializeHelper.Instance.WriteToJsonFile(m_partialPressureResult, $"PartialPressureResult/{m_partialPressureResult.GasName}/{DateTime.Now.ToString("yyyyMMddHHmm")}.json"); } private void OnLoadReference() { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = ".json|*.json"; dialog.InitialDirectory = Path.Combine(QueryDataClient.Instance.Service.GetData("GetRTPath").ToString(), "PartialPressureResult"); if (dialog.ShowDialog() == true) { string SelectedPath = dialog.FileName; var value = SerializeHelper.Instance.ReadFromJsonFile(SelectedPath); ReferenceLineSeries.Clear(); ReferenceFlow.Clear(); value.ValuePairs.ForEach(x => { ReferenceFlow.Add(x.Flow); ReferenceLineSeries.Add(x.Pressure); }); } else { ReferenceLineSeries.Clear(); //ReferenceLineSeries.Insert(20, 0); ReferenceLineSeries.Add(0); ReferenceFlow.Clear(); } } private void OnAbort() { timer.Stop(); InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Abort"); CurrentLineSeries = new ChartValues(); } #endregion #region 私有方法 private void Timer_Tick(object sender, EventArgs e) { CurrentLineSeries.Clear(); var values = QueryDataClient.Instance.Service.GetData($"{ModuleName}.PartialPressureResult").ToString(); values.Split(',').ToList().ForEach(x => { if (x != "") { CurrentLineSeries.Add(Math.Round(Convert.ToDouble(x), 3)); } }); if (CurrentLineSeries.Count == 10) { timer.Stop(); } IsAutoMode = (bool)QueryDataClient.Instance.Service.GetData($"{ModuleName}.IsOnline"); } public void Init() { OnSelectGas(1); MFC7IsEnable = (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas7.Enable"); MFC8IsEnable = (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas8.Enable"); var jetChamber = (JetChamber)Enum.Parse(typeof(JetChamber), QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.ChamberType").ToString()); if (jetChamber == JetChamber.VenusSE|| jetChamber == JetChamber.VenusDE) { MFC9IsEnable = (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas9.Enable"); MFC10IsEnable = (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas10.Enable"); MFC11IsEnable = (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas11.Enable"); MFC12IsEnable = (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas12.Enable"); } } #endregion } }