using Aitex.Core.UI.MVVM;
using Aitex.Core.Util;
using Aitex.Core.Utilities;
using ExcelLibrary.BinaryFileFormat;
using MECF.Framework.Common.Beckhoff.AxisProvider;
using MECF.Framework.Common.Beckhoff.IOAxis;
using MECF.Framework.Common.CommonData.PUF;
using MECF.Framework.Common.DataCenter;
using MECF.Framework.Common.OperationCenter;
using MECF.Framework.Common.Utilities;
using CyberX8_Core;
using CyberX8_MainPages.Model;
using CyberX8_MainPages.Unity;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Input;
using System.Windows.Threading;
namespace CyberX8_MainPages.ViewModels
{
public class PufMotionViewModel : BindableBase
{
#region 常量
private const string MOTION_DATA = "MotionData";
#endregion
#region 内部变量
#region flip
///
/// flip模块名称
///
private string _flipModuleName;
///
/// 数据
///
private CommandMotionData _flipMotionData;
#endregion
#region rotation
///
/// rotation模块名称
///
private string _rotationModuleName;
///
///
///
private CommandMotionData _rotationMotionData;
#endregion
#region Vertical
///
/// vertical模块名称
///
private string _verticalModuleName;
///
///
///
private CommandMotionData _verticalMotionData;
#endregion
///
/// 模块名称
///
private string _module = "";
///
/// 增加
///
private double _incrementValue = 0.01;
///
///
///
private PufDistanceData _distanceData;
///
/// 定时器
///
DispatcherTimer _timer;
///
/// RT查询key集合
///
private List _rtDataKeys = new List();
///
/// rt查询key数值字典
///
private Dictionary _rtDataValueDic = new Dictionary();
#endregion
#region 属性
#region Flip
///
/// Filp名称
///
public string FlipModuleName
{
get { return _flipModuleName; }
set { SetProperty(ref _flipModuleName, value); }
}
///
///
///
public CommandMotionData FlipMotionData
{
get { return _flipMotionData; }
set { SetProperty(ref _flipMotionData, value); }
}
#endregion
#region Rotation
///
/// Rotate名称
///
public string RotationModuleName
{
get { return _rotationModuleName; }
set { SetProperty(ref _rotationModuleName, value); }
}
public CommandMotionData RotationMotionData
{
get { return _rotationMotionData; }
set { SetProperty(ref _rotationMotionData, value); }
}
#endregion
#region Vertical
///
/// Vertical名称
///
public string VerticalModuleName
{
get { return _verticalModuleName; }
set { SetProperty(ref _verticalModuleName, value); }
}
///
///
///
public CommandMotionData VerticalMotionData
{
get { return _verticalMotionData; }
set { SetProperty(ref _verticalMotionData, value); }
}
#endregion
///
/// 模块名称
///
public string Module
{
get { return _module; }
set { SetProperty(ref _module, value); }
}
///
/// 步进
///
public double IncrementValue
{
get { return _incrementValue; }
set { SetProperty(ref _incrementValue, value); }
}
public PufDistanceData DistanceData
{
get { return _distanceData; }
set { SetProperty(ref _distanceData, value); }
}
#endregion
///
/// 构造函数
///
public PufMotionViewModel()
{
IncrementValue = (double)QueryDataClient.Instance.Service.GetConfig("System.Increment");
FlipMotionData = new CommandMotionData();
RotationMotionData = new CommandMotionData();
VerticalMotionData = new CommandMotionData();
}
///
/// 加载数据
///
public void LoadData(string systemName)
{
Module = systemName;
FlipModuleName = $"{Module}.Flip";
RotationModuleName = $"{Module}.Rotation";
VerticalModuleName = $"{Module}.Vertical";
_rtDataKeys.Clear();
_rtDataKeys.Add($"{FlipModuleName}.IsHomed");
_rtDataKeys.Add($"{FlipModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{FlipModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{RotationModuleName}.IsHomed");
_rtDataKeys.Add($"{RotationModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{RotationModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{VerticalModuleName}.IsHomed");
_rtDataKeys.Add($"{VerticalModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{VerticalModuleName}.{MOTION_DATA}");
if (_timer == null)
{
_timer = new DispatcherTimer();
_timer.Interval = TimeSpan.FromMilliseconds(100);
_timer.Tick += Timer_Tick; ;
}
_timer.Start();
}
///
/// 定时器执行
///
///
///
private void Timer_Tick(object sender, EventArgs e)
{
if (_rtDataKeys.Count != 0)
{
_rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys);
if (_rtDataValueDic != null)
{
FlipMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{FlipModuleName}.{MOTION_DATA}");
RotationMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{RotationModuleName}.{MOTION_DATA}");
VerticalMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{VerticalModuleName}.{MOTION_DATA}");
}
}
}
///
/// 隐藏
///
public void Hide()
{
_timer.Stop();
}
}
}