using Aitex.Core.Common;
using Aitex.Core.UI.MVVM;
using Aitex.Core.Util;
using Aitex.Core.Utilities;
using LiveCharts;
using MECF.Framework.Common.Beckhoff.AxisProvider;
using MECF.Framework.Common.Beckhoff.Station;
using MECF.Framework.Common.CommonData.PUF;
using MECF.Framework.Common.DataCenter;
using MECF.Framework.Common.OperationCenter;
using MECF.Framework.Common.Utilities;
using CyberX8_MainPages.Unity;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Input;
using System.Windows.Threading;
namespace CyberX8_MainPages.ViewModels
{
public class LoaderMotionViewModel : BindableBase
{
#region 常量
private const string MOTION_DATA = "MotionData";
#endregion
#region 内部变量
///
/// 模块名称
///
private string _module = "";
///
/// 增加
///
private double _incrementValue = 0.01;
///
/// 定时器
///
private DispatcherTimer _timer;
///
/// RT查询key集合
///
private List _rtDataKeys = new List();
///
/// rt查询key数值字典
///
private Dictionary _rtDataValueDic = new Dictionary();
#region SwingA
///
/// swingA moduleName
///
private string _swingAModuleName;
///
/// SwingA数据
///
private CommandMotionData _swingAMotionData;
#endregion
#region SwingB
///
/// swingB moduleName
///
private string _swingBModuleName;
///
/// SwingB数据
///
private CommandMotionData _swingBMotionData;
#endregion
#region TiltA
///
/// TiltA moduleName
///
private string _tiltAModuleName;
///
/// TiltA数据
///
private CommandMotionData _tiltAMotionData;
#endregion
#region TiltB
///
/// tiltB moduleName
///
private string _tiltBModuleName;
///
/// TiltB数据
///
private CommandMotionData _tiltBMotionData;
#endregion
#region CRSA
///
/// CRSA moduleName
///
private string _crsAModuleName;
///
/// CRSA数据
///
private CommandMotionData _crsAMotionData;
#endregion
#region CRSB
///
/// crsB moduleName
///
private string _crsBModuleName;
///
/// CRSB数据
///
private CommandMotionData _crsBMotionData;
#endregion
#region Rotation
///
/// Rotation moduleName
///
private string _rotationModuleName;
///
/// Rotation数据
///
private CommandMotionData _rotationMotionData;
#endregion
#endregion
#region 属性
///
/// 模块名称
///
public string Module
{
get { return _module; }
set { SetProperty(ref _module, value); }
}
///
/// 步进
///
public double IncrementValue
{
get { return _incrementValue; }
set { SetProperty(ref _incrementValue, value); }
}
#region SwingA
///
/// SwingA ModuleName
///
public string SwingAModuleName { get { return _swingAModuleName; } set { SetProperty(ref _swingAModuleName, value); } }
///
/// SwingA 数据
///
public CommandMotionData SwingAMotionData { get { return _swingAMotionData; } set { SetProperty(ref _swingAMotionData, value); } }
#endregion
#region SwingB
///
/// SwingB ModuleName
///
public string SwingBModuleName { get { return _swingBModuleName; } set { SetProperty(ref _swingBModuleName, value); } }
///
/// SwingB 数据
///
public CommandMotionData SwingBMotionData { get { return _swingBMotionData; } set { SetProperty(ref _swingBMotionData, value); } }
#endregion
#region TiltA
///
/// TiltA ModuleName
///
public string TiltAModuleName { get { return _tiltAModuleName; } set { SetProperty(ref _tiltAModuleName, value); } }
///
/// TiltA 数据
///
public CommandMotionData TiltAMotionData { get { return _tiltAMotionData; } set { SetProperty(ref _tiltAMotionData, value); } }
#endregion
#region TiltB
///
/// TiltB ModuleName
///
public string TiltBModuleName { get { return _tiltBModuleName; } set { SetProperty(ref _tiltBModuleName, value); } }
///
/// TiltB 数据
///
public CommandMotionData TiltBMotionData { get { return _tiltBMotionData; } set { SetProperty(ref _tiltBMotionData, value); } }
#endregion
#region CRSA
///
/// CRSA ModuleName
///
public string CRSAModuleName { get { return _crsAModuleName; } set { SetProperty(ref _crsAModuleName, value); } }
///
/// CRSA 数据
///
public CommandMotionData CRSAMotionData { get { return _crsAMotionData; } set { SetProperty(ref _crsAMotionData, value); } }
#endregion
#region CRSB
///
/// CRSB ModuleName
///
public string CRSBModuleName { get { return _crsBModuleName; } set { SetProperty(ref _crsBModuleName, value); } }
///
/// CRSB 数据
///
public CommandMotionData CRSBMotionData { get { return _crsBMotionData; } set { SetProperty(ref _crsBMotionData, value); } }
#endregion
#region Rotation
///
/// Rotation ModuleName
///
public string RotationModuleName { get { return _rotationModuleName; } set { SetProperty(ref _rotationModuleName, value); } }
///
/// Rotation 数据
///
public CommandMotionData RotationMotionData { get { return _rotationMotionData; } set { SetProperty(ref _rotationMotionData, value); } }
#endregion
#endregion
///
/// 构造函数
///
public LoaderMotionViewModel()
{
}
///
/// 加载数据
///
public void LoadData(string systemName)
{
Module = systemName;
SwingAModuleName = $"{Module}.SwingA";
SwingBModuleName = $"{Module}.SwingB";
TiltAModuleName = $"{Module}.TiltA";
TiltBModuleName = $"{Module}.TiltB";
CRSAModuleName = $"{Module}.LSA";
CRSBModuleName = $"{Module}.LSB";
RotationModuleName = $"{Module}.Rotation";
_rtDataKeys.Clear();
_rtDataKeys.Add($"{SwingAModuleName}.IsHomed");
_rtDataKeys.Add($"{SwingAModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{SwingAModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{SwingBModuleName}.IsHomed");
_rtDataKeys.Add($"{SwingBModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{SwingBModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{TiltAModuleName}.IsHomed");
_rtDataKeys.Add($"{TiltAModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{TiltAModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{TiltBModuleName}.IsHomed");
_rtDataKeys.Add($"{TiltBModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{TiltBModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{CRSAModuleName}.IsHomed");
_rtDataKeys.Add($"{CRSAModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{CRSAModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{CRSBModuleName}.IsHomed");
_rtDataKeys.Add($"{CRSBModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{CRSBModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{RotationModuleName}.IsHomed");
_rtDataKeys.Add($"{RotationModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{RotationModuleName}.{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)
{
SwingAMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{SwingAModuleName}.{MOTION_DATA}");
SwingBMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{SwingBModuleName}.{MOTION_DATA}");
TiltAMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{TiltAModuleName}.{MOTION_DATA}");
TiltBMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{TiltBModuleName}.{MOTION_DATA}");
CRSAMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{CRSAModuleName}.{MOTION_DATA}");
CRSBMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{CRSBModuleName}.{MOTION_DATA}");
RotationMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{RotationModuleName}.{MOTION_DATA}");
}
}
}
///
/// 隐藏
///
public void Hide()
{
if (_timer != null)
{
_timer.Stop();
}
}
}
}