using Aitex.Core.Common.DeviceData; 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.Threading; using System.Threading.Tasks; //using System.Windows.Forms; using System.Windows.Threading; using Venus_Core; using Venus_MainPages.Unity; using Venus_Unity; namespace Venus_MainPages.ViewModels { internal class KeplerPartialPressureViewModel : BindableBase { #region 私有字段 private ObservableCollection m_GasFlows = new ObservableCollection(); //private object[] m_GasPressures = new object[10]; public string ModuleName; //private int m_GasIndex; ChartValues m_CurrentLineSeries = new ChartValues(); ChartValues m_ReferenceLineSeries = new ChartValues(); ObservableCollection CurrentGasFlows = new ObservableCollection(); 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_IsAutoMode; private PressureType m_PressureType; private AITMfcData m_MFC1Data; private AITMfcData m_MFC2Data; private AITMfcData m_MFC3Data; private AITMfcData m_MFC4Data; private AITMfcData m_MFC5Data; private AITMfcData m_MFC6Data; private AITMfcData m_MFC7Data; private AITMfcData m_MFC8Data; private bool m_MFC1IsEnabled; private bool m_MFC2IsEnabled; private bool m_MFC3IsEnabled; private bool m_MFC4IsEnabled; private bool m_MFC5IsEnabled; private bool m_MFC6IsEnabled; private bool m_MFC7IsEnabled; private bool m_MFC8IsEnabled; private Queue mfcQueue = new Queue(); private string m_CurrentGas; #endregion #region 属性 public string CurrentGas { get { return m_CurrentGas; } set { SetProperty(ref m_CurrentGas, value); } } 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 ObservableCollection 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 IsAutoMode { get { return m_IsAutoMode; } set { SetProperty(ref m_IsAutoMode, value); } } public AITMfcData MFC1Data { get { return m_MFC1Data; } set { SetProperty(ref m_MFC1Data, value); } } public AITMfcData MFC2Data { get { return m_MFC2Data; } set { SetProperty(ref m_MFC2Data, value); } } public AITMfcData MFC3Data { get { return m_MFC3Data; } set { SetProperty(ref m_MFC3Data, value); } } public AITMfcData MFC4Data { get { return m_MFC4Data; } set { SetProperty(ref m_MFC4Data, value); } } public AITMfcData MFC5Data { get { return m_MFC5Data; } set { SetProperty(ref m_MFC5Data, value); } } public AITMfcData MFC6Data { get { return m_MFC6Data; } set { SetProperty(ref m_MFC6Data, value); } } public AITMfcData MFC7Data { get { return m_MFC7Data; } set { SetProperty(ref m_MFC7Data, value); } } public AITMfcData MFC8Data { get { return m_MFC8Data; } set { SetProperty(ref m_MFC8Data, value); } } public bool MFC1IsEnabled { get { return m_MFC1IsEnabled; } set { SetProperty(ref m_MFC1IsEnabled, value); } } public bool MFC2IsEnabled { get { return m_MFC2IsEnabled; } set { SetProperty(ref m_MFC2IsEnabled, value); } } public bool MFC3IsEnabled { get { return m_MFC3IsEnabled; } set { SetProperty(ref m_MFC3IsEnabled, value); } } public bool MFC4IsEnabled { get { return m_MFC4IsEnabled; } set { SetProperty(ref m_MFC4IsEnabled, value); } } public bool MFC5IsEnabled { get { return m_MFC5IsEnabled; } set { SetProperty(ref m_MFC5IsEnabled, value); } } public bool MFC6IsEnabled { get { return m_MFC6IsEnabled; } set { SetProperty(ref m_MFC6IsEnabled, value); } } public bool MFC7IsEnabled { get { return m_MFC7IsEnabled; } set { SetProperty(ref m_MFC7IsEnabled, value); } } public bool MFC8IsEnabled { get { return m_MFC8IsEnabled; } set { SetProperty(ref m_MFC8IsEnabled, 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 KeplerPartialPressureViewModel() { GasTime = 60; //m_GasIndex = 1; //for (int i = 1; i < 11; i++) //{ // GasFlows.Add((10 * i).ToString()); //} 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) { CurrentGasFlows.Clear(); GasFlows.Clear(); value = $"MfcGas{obj}"; CurrentGas = value; 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((maxScale * xishu / 10 * i).ToString()); } GasFlows = CurrentGasFlows; //m_GasIndex = Convert.ToInt32(obj); } private void OnStart() { mfcQueue.Clear(); if (MFC1IsEnabled && (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas1.Enable")) { mfcQueue.Enqueue(1); } if (MFC2IsEnabled && (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas2.Enable")) { mfcQueue.Enqueue(2); } if (MFC3IsEnabled && (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas3.Enable")) { mfcQueue.Enqueue(3); } if (MFC4IsEnabled && (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas4.Enable")) { mfcQueue.Enqueue(4); } if (MFC5IsEnabled && (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas5.Enable")) { mfcQueue.Enqueue(5); } if (MFC6IsEnabled && (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas6.Enable")) { mfcQueue.Enqueue(6); } if (MFC7IsEnabled && (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas7.Enable")) { mfcQueue.Enqueue(7); } if (MFC8IsEnabled && (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName}.MfcGas8.Enable")) { mfcQueue.Enqueue(8); } if (mfcQueue.Count > 0) { timer.Start(); } else { return; } var item = mfcQueue.Dequeue(); InvokeClient.Instance.Service.DoOperation($"{ModuleName}.PartialPressureTest", item, 1000 * GasTime); OnSelectGas(item); } 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", ModuleName); 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(); mfcQueue.Clear(); 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)); } }); PMState currentState = (PMState)QueryDataClient.Instance.Service.GetData($"{ModuleName}.FsmState"); if (currentState == PMState.Error) { timer.Stop(); mfcQueue.Clear(); } if (currentState==PMState.Idle && mfcQueue.Count==0) { timer.Stop(); } if ( mfcQueue.Count > 0 && currentState == PMState.Idle) { var item = mfcQueue.Dequeue(); timer.Start(); InvokeClient.Instance.Service.DoOperation($"{ModuleName}.PartialPressureTest", item, 1000 * GasTime); OnSelectGas(item); } } public void Init() { } public void EnterExitView(bool isEnter) { if (isEnter) { IsAutoMode = (bool)QueryDataClient.Instance.Service.GetData($"{ModuleName}.IsOnline"); MFC1Data = (AITMfcData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.MfcGas1"); MFC2Data = (AITMfcData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.MfcGas2"); MFC3Data = (AITMfcData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.MfcGas3"); MFC4Data = (AITMfcData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.MfcGas4"); MFC5Data = (AITMfcData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.MfcGas5"); MFC6Data = (AITMfcData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.MfcGas6"); MFC7Data = (AITMfcData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.MfcGas7"); MFC8Data = (AITMfcData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.MfcGas8"); } } #endregion } }