using MECF.Framework.Common.CommonData.DeviceData; 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 私有字段 public 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() { 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) { var pendulumValveData= (AITPendulumValveData)QueryDataClient.Instance.Service.GetData($"{ModuleName}.PendulumValve.DeviceData"); if (IsPositionMode == true) { FeedBackValue = pendulumValveData.Position; } else { FeedBackValue = pendulumValveData.Pressure; } } #endregion } }