using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.OperationCenter; using Prism.Commands; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Threading; namespace Venus_MainPages.ViewModels { public class ButterflyValveViewModel : BindableBase { #region 私有字段 private string ModuleName = "PMA"; private string m_DeviceName = "PendulumValve"; private bool m_IsPositionMode; private int m_SetValue; private int? m_FeedBackValue; private List m_RtDataKeys; private Dictionary m_RtDataValues; #endregion #region 属性 public bool IsPositionMode { get { return m_IsPositionMode; } set { if (SetValue > 1000&&value==true) { SetValue = 1000; } SetProperty(ref m_IsPositionMode, value); } } public int SetValue { get { return m_SetValue; } set { if (value > 1000 && IsPositionMode==true) { value = 1000; } if (value < 0 && IsPositionMode == true) { value = 0; } SetProperty(ref m_SetValue, value); } } public int? FeedBackValue { get { return m_FeedBackValue; } set { SetProperty(ref m_FeedBackValue, value); } } public string DeviceName { get { return m_DeviceName; } set { SetProperty(ref m_DeviceName, value); } } public Dictionary RtDataValues { get { return m_RtDataValues; } set { SetProperty(ref m_RtDataValues, value); } } #endregion #region 命令 private DelegateCommand _SetCommand; public DelegateCommand SetCommand => _SetCommand ?? (_SetCommand = new DelegateCommand(OnSet)); #endregion public ButterflyValveViewModel() { m_RtDataKeys = new List(); m_RtDataKeys.Add($"{ModuleName}.PendulumValve.Position"); m_RtDataKeys.Add($"{ModuleName}.PendulumValve.Pressure"); DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromSeconds(1); timer.Tick += timer_Tick; timer.Start(); } #region 命令方法 private void OnSet() { if (IsPositionMode == true) { InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetPVPostion",SetValue); } else { InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetPVPressure",SetValue); } } void timer_Tick(object sender, EventArgs e) { RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys); if (IsPositionMode == true) { FeedBackValue = (int)RtDataValues[$"{ModuleName}.PendulumValve.Position"]; ////SetValue = (SetValue > 1000||SetValue<0) ? 0 : SetValue; //if (SetValue > 1000) //{ //SetValue = 1000; //} } else { FeedBackValue = (int)RtDataValues[$"{ModuleName}.PendulumValve.Pressure"]; } } #endregion } }