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 ShuttleA
///
/// shuttleA moduleName
///
private string _shuttleAModuleName;
///
/// shuttleA数据
///
private CommandMotionData _shuttleAMotionData;
#endregion
#region shuttleB
///
/// shuttleB moduleName
///
private string _shuttleBModuleName;
///
/// shuttleB数据
///
private CommandMotionData _shuttleBMotionData;
#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 shuttleA
///
/// shuttleA ModuleName
///
public string ShuttleAModuleName { get { return _shuttleAModuleName; } set { SetProperty(ref _shuttleAModuleName, value); } }
///
/// shuttleA 数据
///
public CommandMotionData ShuttleAMotionData { get { return _shuttleAMotionData; } set { SetProperty(ref _shuttleAMotionData, value); } }
#endregion
#region shuttleB
///
/// shuttleB ModuleName
///
public string ShuttleBModuleName { get { return _shuttleBModuleName; } set { SetProperty(ref _shuttleBModuleName, value); } }
///
/// shuttleB 数据
///
public CommandMotionData ShuttleBMotionData { get { return _shuttleBMotionData; } set { SetProperty(ref _shuttleBMotionData, 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;
ShuttleAModuleName = $"{Module}.ShuttleA";
ShuttleBModuleName = $"{Module}.ShuttleB";
TiltAModuleName = $"{Module}.TiltA";
TiltBModuleName = $"{Module}.TiltB";
CRSAModuleName = $"{Module}.LSA";
CRSBModuleName = $"{Module}.LSB";
RotationModuleName = $"{Module}.Rotation";
_rtDataKeys.Clear();
_rtDataKeys.Add($"{ShuttleAModuleName}.IsHomed");
_rtDataKeys.Add($"{ShuttleAModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{ShuttleAModuleName}.{MOTION_DATA}");
_rtDataKeys.Add($"{ShuttleBModuleName}.IsHomed");
_rtDataKeys.Add($"{ShuttleBModuleName}.IsSwitchOn");
_rtDataKeys.Add($"{ShuttleBModuleName}.{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)
{
ShuttleAMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{ShuttleAModuleName}.{MOTION_DATA}");
ShuttleBMotionData = CommonFunction.GetValue(_rtDataValueDic, $"{ShuttleBModuleName}.{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();
}
}
}
}