using Aitex.Core.RT.ConfigCenter; using Aitex.Core.Util; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.Device.LinMot; using MECF.Framework.Common.Utilities; using Prism.Mvvm; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Timers; using System.Windows.Threading; namespace CyberX8_MainPages.ViewModels { public class LinMotOtherViewModel : BindableBase { #region 常量 private const string LINMOT_DEVICELIST = "LinMotDeviceList"; /// /// 控制字 /// private const string STATUS_WORD = "StatusWord"; /// /// 方向 /// private const string DIRECTION = "Direction"; /// /// 位置 /// private const string POSITION = "Position"; /// /// 当前Scan数 /// private const string SCAN_COUNT = "ScanCount"; #endregion #region 内部变量 /// /// 查询后台数据集合 /// private List _rtDataKeys = new List(); /// /// 查询后台的数据 /// private Dictionary _rtDataValues; /// /// 定时器 /// private DispatcherTimer _timer; /// /// LinMot设备配置 /// private LinmotDeviceConfig _linMotDeviceConfig; private string _module; #endregion #region 属性 /// /// 模块名称 /// public string Module { get { return _module; } set { SetProperty(ref _module, value); } } /// /// LinMot设备配置 /// public LinmotDeviceConfig LinmotDeviceConfig { get { return _linMotDeviceConfig; } set { SetProperty(ref _linMotDeviceConfig, value); } } #endregion /// /// 构造函数 /// public LinMotOtherViewModel() { } /// /// 加载数据 /// public void LoadData(string systemName) { Module = systemName; List lst = new List(); lst.Add($"{Module}.{LINMOT_DEVICELIST}"); _rtDataValues = QueryDataClient.Instance.Service.PollData(lst); if (_rtDataValues != null) { LinmotDeviceConfig = CommonFunction.GetValue(_rtDataValues, $"{Module}.{LINMOT_DEVICELIST}"); InitiRtDataKeys(); } if(_timer==null) { _timer = new DispatcherTimer(); _timer.Interval = TimeSpan.FromMilliseconds(500); _timer.Tick += Timer_Tick; } _timer.Start(); } /// /// 定时器 /// /// /// private void Timer_Tick(object sender, EventArgs e) { if (_rtDataKeys.Count != 0) { _rtDataValues = QueryDataClient.Instance.Service.PollData(_rtDataKeys); if (_rtDataValues != null && _rtDataValues.Count != 0) { foreach (LinMotDevice item in LinmotDeviceConfig.LinmotDevices) { item.StatusWord = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.{STATUS_WORD}"); item.Direction = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.{DIRECTION}"); item.Position = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.{POSITION}"); item.ScanCount = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.{SCAN_COUNT}"); item.IsConnected = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.IsConnectd"); item.LinMotDeviceData = CommonFunction.GetValue(_rtDataValues, $"{item.Name}.LinmotDeviceData"); item.LinMotDeviceData.UpMaxDeceleration = item.LinMotDeviceData.UpMaxDeceleration / 1000; item.LinMotDeviceData.UpMaxAcceleration = item.LinMotDeviceData.UpMaxAcceleration / 1000; item.LinMotDeviceData.DownMaxAcceleration = item.LinMotDeviceData.DownMaxAcceleration / 1000; item.LinMotDeviceData.DownMaxDeceleration = item.LinMotDeviceData.DownMaxDeceleration / 1000; item.LinMotDeviceData.DownMaxSpeed = item.LinMotDeviceData.DownMaxSpeed / 1000; item.LinMotDeviceData.UpMaxSpeed = item.LinMotDeviceData.UpMaxSpeed / 1000; } } } } /// /// 隐藏 /// public void Hide() { if (_timer != null) { _timer.Stop(); } } /// /// 初始化查询Key /// private void InitiRtDataKeys() { _rtDataKeys.Clear(); if (LinmotDeviceConfig != null) { foreach (LinMotDevice item in LinmotDeviceConfig.LinmotDevices) { _rtDataKeys.Add($"{item.Name}.{STATUS_WORD}"); _rtDataKeys.Add($"{item.Name}.{DIRECTION}"); _rtDataKeys.Add($"{item.Name}.{POSITION}"); _rtDataKeys.Add($"{item.Name}.{SCAN_COUNT}"); _rtDataKeys.Add($"{item.Name}.IsConnectd"); _rtDataKeys.Add($"{item.Name}.LinmotDeviceData"); } } } } }