| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976 | 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.Loader;using MECF.Framework.Common.CommonData.PUF;using MECF.Framework.Common.DataCenter;using MECF.Framework.Common.Equipment;using MECF.Framework.Common.OperationCenter;using MECF.Framework.Common.Utilities;using OpenSEMI.ClientBase;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;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Threading;using WaferInfo = OpenSEMI.ClientBase.WaferInfo;namespace CyberX8_MainPages.ViewModels{    public class LoaderSetupViewModel : BindableBase    {        #region 常量         private const string MOTION_DATA = "MotionData";        private const string IS_SWITCH_ON = "IsSwitchOn";        private const string CURRENT_STATION = "CurrentStation";        private const string SIDE_DATA = "SideData";        private const string COMMON_DATA = "CommonData";        private const string MOTOR_POSITION = "MotorPosition";        private const string CURRENT_OPERATION = "CurrentOperation";        private const double LOADER_ROTATION_DIFFER = 90;        #endregion        #region 内部变量        #region shuttleA        /// <summary>        /// shuttleA模块名称        /// </summary>        private string _shuttleAModuleName;        /// <summary>        /// shuttleA运动数据        /// </summary>        private CommandMotionData _shuttleAMotorData;        /// <summary>        /// shuttleA当前位置        /// </summary>        private string _shuttleACurrentStation;        #endregion        #region TiltA        /// <summary>        /// tiltA模块名称        /// </summary>        private string _tiltAModuleName;        /// <summary>        /// tiltA运动数据        /// </summary>        private CommandMotionData _tiltAMotorData;        /// <summary>        /// tiltA当前位置        /// </summary>        private string _tiltACurrentStation;        /// <summary>        /// Loader1 TiltA实际位置数据        /// </summary>        private double _loader1TiltAMotorPosition;               #endregion        #region CRSA        /// <summary>        /// crsA模块名称        /// </summary>        private string _crsAModuleName;        /// <summary>        /// CRSA运动数据        /// </summary>        private CommandMotionData _crsAMotorData;        /// <summary>        /// crsA当前位置        /// </summary>        private string _crsACurrentStation;        #endregion        #region Rotation        /// <summary>        /// rotation模块名称        /// </summary>        private string _rotationModuleName;        /// <summary>        /// rotation运动数据        /// </summary>        private CommandMotionData _rotationMotorData;        /// <summary>        /// rotation当前位置        /// </summary>        private string _rotationCurrentStation;        /// <summary>        /// Loader1 Rotation UI对应位置        /// </summary>        private double _loader1RotationPosition;        /// <summary>        /// Loader1 Rotation实际位置数据        /// </summary>        private double _loader1RotationMotorPosition;                #endregion        #region shuttleB        /// <summary>        /// shuttleB模块名称        /// </summary>        private string _shuttleBModuleName;        /// <summary>        /// shuttleB运动数据        /// </summary>        private CommandMotionData _shuttleBMotorData;        /// <summary>        /// shuttleB当前位置        /// </summary>        private string _shuttleBCurrentStation;        #endregion        #region TiltB        /// <summary>        /// tiltB模块名称        /// </summary>        private string _tiltBModuleName;        /// <summary>        /// tiltB运动数据        /// </summary>        private CommandMotionData _tiltBMotorData;        /// <summary>        /// tiltB当前位置        /// </summary>        private string _tiltBCurrentStation;        /// <summary>        /// Loader1 TiltB实际位置数据        /// </summary>        private double _loader1TiltBMotorPosition;        #endregion        #region CRSB        /// <summary>        /// crsB模块名称        /// </summary>        private string _crsBModuleName;        /// <summary>        /// crsB运动数据        /// </summary>        private CommandMotionData _crsBMotorData;        /// <summary>        /// crsB当前位置        /// </summary>        private string _crsBCurrentStation;        #endregion        #region SideA        /// <summary>        /// Side A模块名称        /// </summary>        private string _sideAModuleName;        /// <summary>        /// Side A数据        /// </summary>        private LoaderSideData _sideAData;        #endregion        #region SideB        /// <summary>        /// Side B模块名称        /// </summary>        private string _sideBModuleName;        /// <summary>        /// Side B数据        /// </summary>        private LoaderSideData _sideBData;        #endregion        #region Common        /// <summary>        /// Common模块名称        /// </summary>        private string _commonModuleName;        /// <summary>        /// 公共模块数据        /// </summary>        public LoaderCommonData _commonData;        #endregion        #region 系统数据        /// <summary>        /// WaferA尺寸        /// </summary>        private int _waferSizeA = 100;        /// <summary>        /// WaferB尺寸        /// </summary>        private int _waferSizeB = 100;        /// <summary>        /// 查询后台数据集合        /// </summary>        private List<string> _rtDataKeys = new List<string>();        /// <summary>        /// Busy状态        /// </summary>        private bool _isBusy;        /// <summary>        /// CRSH状态        /// </summary>        private bool _isCRSH;        /// <summary>        /// label系列        /// </summary>        private ChartValues<string> _labelSeries;        /// <summary>        /// Value系列        /// </summary>        private ChartValues<double> _valueSeries;        /// <summary>        /// 定时器        /// </summary>        DispatcherTimer _timer;        /// <summary>        /// rt查询key数值字典        /// </summary>        private Dictionary<string, object> _rtDataValueDic = new Dictionary<string, object>();        /// <summary>        /// PlateOutCamera Enable        /// </summary>        private Visibility _plateOutCameraVisibility = Visibility.Hidden;        /// <summary>        /// Loader的sideA开启状态        /// </summary>        private bool m_loaderWaferVisibleA = false;        /// <summary>        /// Loader的sideB开启状态        /// </summary>        private bool m_loaderWaferVisibleB = false;        /// <summary>        /// WaferA信息        /// </summary>        private WaferInfo m_loaderWaferA;        /// <summary>        /// WaferB信息        /// </summary>        private WaferInfo m_loaderWaferB;        /// <summary>        /// Loader模块信息        /// </summary>        private ModuleInfo _loaderModuleInfo;        /// <summary>        /// Loader是否安装        /// </summary>        private bool _loaderInstalled;        /// <summary>        /// 当前SideA操作        /// </summary>        private string _currentSideAOperation;        /// <summary>        /// 当前SideA操作        /// </summary>        private string _currentSideBOperation;        #endregion        #endregion        #region 属性        #region 系统数据        public string Module { get; set; }        /// <summary>        /// WaferA尺寸大小        /// </summary>        public int WaferSizeA { get { return _waferSizeA; } set { SetProperty(ref _waferSizeA, value); } }        /// <summary>        /// WaferA尺寸大小        /// </summary>        public int WaferSizeB { get { return _waferSizeB; } set { SetProperty(ref _waferSizeB, value); } }        /// <summary>        /// Busy状态        /// </summary>        public bool IsBusy { get { return _isBusy; } set { SetProperty(ref _isBusy, value); } }        /// <summary>        /// CRSH状态        /// </summary>        public bool IsCRSH { get { return _isCRSH; } set { SetProperty(ref _isCRSH, value); } }        /// <summary>        /// Label系列        /// </summary>        public ChartValues<string> LabelSeries { get { return _labelSeries; } set { SetProperty(ref _labelSeries, value); } }        /// <summary>        /// Value系列        /// </summary>        public ChartValues<double> ValueSeries { get { return _valueSeries; } set { SetProperty(ref _valueSeries, value); } }        /// <summary>        /// Loader的sideA开启状态        /// </summary>        public bool LoaderWaferVisibleA        {            get { return m_loaderWaferVisibleA; }            set { SetProperty(ref m_loaderWaferVisibleA, value); }        }        /// <summary>        /// Loader的sideB开启状态        /// </summary>        public bool LoaderWaferVisibleB        {            get { return m_loaderWaferVisibleB; }            set { SetProperty(ref m_loaderWaferVisibleB, value); }        }        /// <summary>        /// WaferA信息        /// </summary>        public WaferInfo LoaderWaferA        {            get { return m_loaderWaferA; }            set { SetProperty(ref m_loaderWaferA, value); }        }        /// <summary>        /// WaferB信息        /// </summary>        public WaferInfo LoaderWaferB        {            get { return m_loaderWaferB; }            set { SetProperty(ref m_loaderWaferB, value); }        }        /// <summary>        /// Loader模块信息        /// </summary>        public ModuleInfo LoaderModuleInfo        {            get { return _loaderModuleInfo; }            set { SetProperty(ref _loaderModuleInfo, value); }        }        /// <summary>        /// Loader是否安装        /// </summary>        public bool LoaderIsInstalled        {            get { return _loaderInstalled; }            set { SetProperty(ref _loaderInstalled, value); }        }        /// <summary>        /// 当前SideA操作        /// </summary>        public string CurrentSideAOperation        {            get { return _currentSideAOperation; }            set { SetProperty(ref _currentSideAOperation, value); }        }        /// <summary>        /// 当前SideB操作        /// </summary>        public string CurrentSideBOperation        {            get { return _currentSideBOperation; }            set { SetProperty(ref _currentSideBOperation, value); }        }        #endregion        #region shuttleA        /// <summary>        /// shuttleA名称        /// </summary>        public string ShuttleAModuleName        {            get { return _shuttleAModuleName; }            set { SetProperty(ref _shuttleAModuleName, value); }        }        /// <summary>        /// shuttleA运动数据        /// </summary>        public CommandMotionData ShuttleAMotionData        {            get { return _shuttleAMotorData; }            set { SetProperty(ref _shuttleAMotorData, value); }        }        /// <summary>        /// shuttleA当前位置        /// </summary>        public string ShuttleACurrentStation        {            get { return _shuttleACurrentStation; }            set { SetProperty(ref _shuttleACurrentStation, value); }        }        #endregion        #region TiltA        /// <summary>        /// TiltA名称        /// </summary>        public string TiltAModuleName        {            get { return _tiltAModuleName; }            set { SetProperty(ref _tiltAModuleName, value); }        }        /// <summary>        /// TiltA运动数据        /// </summary>        public CommandMotionData TiltAMotionData        {            get { return _tiltAMotorData; }            set { SetProperty(ref _tiltAMotorData, value); }        }        /// <summary>        /// TiltA当前位置        /// </summary>        public string TiltACurrentStation        {            get { return _tiltACurrentStation; }            set { SetProperty(ref _tiltACurrentStation, value); }        }        /// <summary>        /// Loader1 TiltA实际位置数据        /// </summary>        public double Loader1TiltAMotorPosition        {            get { return _loader1TiltAMotorPosition; }            set { SetProperty(ref _loader1TiltAMotorPosition, value); }        }        #endregion        #region CRSA        /// <summary>        /// CRSA名称        /// </summary>        public string CRSAModuleName        {            get { return _crsAModuleName; }            set { SetProperty(ref _crsAModuleName, value); }        }        /// <summary>        /// CRSA运动数据        /// </summary>        public CommandMotionData CRSAMotionData        {            get { return _crsAMotorData; }            set { SetProperty(ref _crsAMotorData, value); }        }        /// <summary>        /// CRSA当前位置        /// </summary>        public string CRSACurrentStation        {            get { return _crsACurrentStation; }            set { SetProperty(ref _crsACurrentStation, value); }        }        #endregion        #region Rotation        /// <summary>        /// Rotation名称        /// </summary>        public string RotationModuleName        {            get { return _rotationModuleName; }            set { SetProperty(ref _rotationModuleName, value); }        }        /// <summary>        /// Rotation运动数据        /// </summary>        public CommandMotionData RotationMotionData        {            get { return _rotationMotorData; }            set { SetProperty(ref _rotationMotorData, value); }        }        /// <summary>        /// Loader1 Rotation UI对应位置             /// </summary>        public double Loader1RotationPosition        {            get { return _loader1RotationPosition; }            set { SetProperty(ref _loader1RotationPosition, value); }        }        /// <summary>        /// Rotation当前位置        /// </summary>        public string RotationCurrentStation        {            get { return _rotationCurrentStation; }            set { SetProperty(ref _rotationCurrentStation, value); }        }        /// <summary>        /// Loader1 Rotation实际位置数据        /// </summary>        public double Loader1RotationMotorPosition        {            get { return _loader1RotationMotorPosition; }            set { SetProperty(ref _loader1RotationMotorPosition, value); }        }                       #endregion        #region shuttleB        /// <summary>        /// shuttleB名称        /// </summary>        public string ShuttleBModuleName        {            get { return _shuttleBModuleName; }            set { SetProperty(ref _shuttleBModuleName, value); }        }        /// <summary>        /// shuttleB运动数据        /// </summary>        public CommandMotionData ShuttleBMotionData        {            get { return _shuttleBMotorData; }            set { SetProperty(ref _shuttleBMotorData, value); }        }        /// <summary>        /// shuttleB当前位置        /// </summary>        public string ShuttleBCurrentStation        {            get { return _shuttleBCurrentStation; }            set { SetProperty(ref _shuttleBCurrentStation, value); }        }        #endregion        #region TiltB        /// <summary>        /// TiltB名称        /// </summary>        public string TiltBModuleName        {            get { return _tiltBModuleName; }            set { SetProperty(ref _tiltBModuleName, value); }        }        /// <summary>        /// TiltB运动数据        /// </summary>        public CommandMotionData TiltBMotionData        {            get { return _tiltBMotorData; }            set { SetProperty(ref _tiltBMotorData, value); }        }        /// <summary>        /// TiltB当前位置        /// </summary>        public string TiltBCurrentStation        {            get { return _tiltBCurrentStation; }            set { SetProperty(ref _tiltBCurrentStation, value); }        }        /// <summary>        /// Loader1 TiltB实际位置数据        /// </summary>        public double Loader1TiltBMotorPosition        {            get { return _loader1TiltBMotorPosition; }            set { SetProperty(ref _loader1TiltBMotorPosition, value); }        }        #endregion        #region CRSB        /// <summary>        /// CRSB名称        /// </summary>        public string CRSBModuleName        {            get { return _crsBModuleName; }            set { SetProperty(ref _crsBModuleName, value); }        }        /// <summary>        /// CRSB运动数据        /// </summary>        public CommandMotionData CRSBMotionData        {            get { return _crsBMotorData; }            set { SetProperty(ref _crsBMotorData, value); }        }        /// <summary>        /// CRSB当前位置        /// </summary>        public string CRSBCurrentStation        {            get { return _crsBCurrentStation; }            set { SetProperty(ref _crsBCurrentStation, value); }        }        #endregion        #region Side A        /// <summary>        /// Side A模块名称        /// </summary>        public string SideAModuleName        {            get { return _sideAModuleName; }            set { SetProperty(ref _sideAModuleName, value); }        }        /// <summary>        /// Side A数据        /// </summary>        public LoaderSideData SideAData        {            get { return _sideAData; }            set { SetProperty(ref _sideAData, value); }        }        #endregion        #region Side B        /// <summary>        /// Side B模块名称        /// </summary>        public string SideBModuleName        {            get { return _sideBModuleName; }            set { SetProperty(ref _sideBModuleName, value); }        }        /// <summary>        /// Side B数据        /// </summary>        public LoaderSideData SideBData        {            get { return _sideBData; }            set { SetProperty(ref _sideBData, value); }        }        #endregion        #region Common        /// <summary>        /// Common模块名称        /// </summary>        public string CommonModuleName        {            get { return _commonModuleName; }            set { SetProperty(ref _commonModuleName, value); }        }        /// <summary>        /// 公共数据        /// </summary>        public LoaderCommonData CommonData        {            get { return _commonData; }            set { SetProperty(ref _commonData, value);}        }        /// <summary>        /// PlateOut Camera Enable        /// </summary>        public Visibility PlateOutCameraVisibility        {            get { return _plateOutCameraVisibility; }            set { SetProperty(ref _plateOutCameraVisibility, value);}        }        #endregion        #endregion        #region 指令        [IgnorePropertyChange]        public ICommand SideALoadCommand        {            get;            private set;        }        [IgnorePropertyChange]        public ICommand SideAUnloadCommand        {            get;            private set;        }        [IgnorePropertyChange]        public ICommand SideAInstallCRSCommand        {            get;private set;        }        [IgnorePropertyChange]        public ICommand SideBLoadCommand        {            get;            private set;        }        [IgnorePropertyChange]        public ICommand SideBUnloadCommand        {            get;            private set;        }        [IgnorePropertyChange]        public ICommand SideBInstallCRSCommand        {            get; private set;        }        #endregion        /// <summary>        /// 构造函数        /// </summary>        public LoaderSetupViewModel()        {            SideALoadCommand=new DelegateCommand<object>(SideALoadAction);            SideAUnloadCommand = new DelegateCommand<object>(SideAUnloadAction);            SideAInstallCRSCommand = new DelegateCommand<object>(SideAInstallCRSAction);            SideBLoadCommand = new DelegateCommand<object>(SideBLoadAction);            SideBUnloadCommand = new DelegateCommand<object>(SideBUnloadAction);            SideBInstallCRSCommand = new DelegateCommand<object>(SideBInstallCRSAction);        }        /// <summary>        /// 加载数据        /// </summary>        public void LoadData(string systemName)        {            Module = systemName;            ShuttleAModuleName = $"{Module}.ShuttleA";            TiltAModuleName = $"{Module}.TiltA";            CRSAModuleName = $"{Module}.LSA";            RotationModuleName = $"{Module}.Rotation";            ShuttleBModuleName = $"{Module}.ShuttleB";            TiltBModuleName = $"{Module}.TiltB";            CRSBModuleName = $"{Module}.LSB";            SideAModuleName = $"{Module}.SideA";            SideBModuleName = $"{Module}.SideB";            CommonModuleName = $"{Module}.Common";                      bool plateOutCameraEnable= (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName.Loader1}.PlateOutCameraEnable");            if(plateOutCameraEnable)            {                PlateOutCameraVisibility = Visibility.Visible;            }            else            {                PlateOutCameraVisibility = Visibility.Hidden;            }            //LoaderIsinstalled            Dictionary<string, object> allModulesDictionary = QueryDataClient.Instance.Service.PollData(new List<string>() { "System.InstalledModules" });            if (allModulesDictionary != null)            {                List<string> allModules = CommonFunction.GetValue<List<string>>(allModulesDictionary, "System.InstalledModules");                                LoaderIsInstalled = allModules.Contains(ModuleName.Loader1.ToString());            }            WaferSizeA = (int)QueryDataClient.Instance.Service.GetConfig("Loader1.SideAWaferSize");            WaferSizeB = (int)QueryDataClient.Instance.Service.GetConfig("Loader1.SideBWaferSize");            AddDataKeys();            ValueSeries = new ChartValues<double>();            LabelSeries = new ChartValues<string>();            if (_timer == null)            {                _timer = new DispatcherTimer();                _timer.Interval = TimeSpan.FromMilliseconds(100);                _timer.Tick += Timer_Tick;            }            _timer.Start();        }        /// <summary>        /// 定时器        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void Timer_Tick(object sender, EventArgs e)        {            LoaderModuleInfo = ModuleManager.ModuleInfos["Loader1"];            if (LoaderIsInstalled && LoaderModuleInfo != null)            {                if (LoaderModuleInfo.WaferManager.Wafers.Count != 0)                {                    LoaderWaferA = LoaderModuleInfo.WaferManager.Wafers[0];                }                if (LoaderModuleInfo.WaferManager.Wafers.Count != 0)                {                    LoaderWaferB = LoaderModuleInfo.WaferManager.Wafers[1];                }            }            if (_rtDataKeys.Count != 0)            {                _rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys);                if (_rtDataValueDic != null)                {                    //SRD Wafer信息                    if (ModuleManager.ModuleInfos[$"{Module}"].WaferManager.Wafers.Count != 0)                    {                        LoaderWaferA = ModuleManager.ModuleInfos[$"{Module}"].WaferManager.Wafers[0];                        LoaderWaferB = ModuleManager.ModuleInfos[$"{Module}"].WaferManager.Wafers[1];                    }                    ShuttleAMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{ShuttleAModuleName}.{MOTION_DATA}");                    ShuttleACurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{ShuttleAModuleName}.{CURRENT_STATION}"), ShuttleAModuleName);                    ShuttleBMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{ShuttleBModuleName}.{MOTION_DATA}");                    ShuttleBCurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{ShuttleBModuleName}.{CURRENT_STATION}"), ShuttleBModuleName);                    TiltAMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{TiltAModuleName}.{MOTION_DATA}");                    TiltACurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{TiltAModuleName}.{CURRENT_STATION}"), TiltAModuleName);                    TiltBMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{TiltBModuleName}.{MOTION_DATA}");                    TiltBCurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{TiltBModuleName}.{CURRENT_STATION}"), TiltBModuleName);                    CRSAMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{CRSAModuleName}.{MOTION_DATA}");                    CRSACurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{CRSAModuleName}.{CURRENT_STATION}"), CRSAModuleName);                    CRSBMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{CRSBModuleName}.{MOTION_DATA}");                    CRSBCurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{CRSBModuleName}.{CURRENT_STATION}"), CRSBModuleName);                    RotationMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{RotationModuleName}.{MOTION_DATA}");                    RotationCurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{RotationModuleName}.{CURRENT_STATION}"), RotationModuleName);                    SideAData = CommonFunction.GetValue<LoaderSideData>(_rtDataValueDic, $"{SideAModuleName}.{SIDE_DATA}");                    SideBData = CommonFunction.GetValue<LoaderSideData>(_rtDataValueDic, $"{SideBModuleName}.{SIDE_DATA}");                    CommonData = CommonFunction.GetValue<LoaderCommonData>(_rtDataValueDic, $"{Module}.{COMMON_DATA}");                    if (CommonData!=null&&CommonData.FlowValues != null && CommonData.FlowValues.Count != 0)                    {                        if (ValueSeries.Count < CommonData.FlowValues.Count)                        {                            InitialValueSeries(CommonData.FlowValues);                        }                    }                    else                    {                        ValueSeries.Clear();                        LabelSeries.Clear();                    }                    Loader1TiltAMotorPosition = TiltBMotionData.MotorPosition;                    Loader1TiltBMotorPosition = TiltAMotionData.MotorPosition;                    Loader1RotationMotorPosition = RotationMotionData.MotorPosition;                    //计Loader Rotation UI位置                    Loader1RotationPosition = -Loader1RotationMotorPosition - LOADER_ROTATION_DIFFER;                    //判断Loader1的TiltA水平状态                                      if (TiltACurrentStation == "HORI")                    {                        LoaderWaferVisibleA = true;                    }                    else if (TiltACurrentStation == "VERT")                    {                        LoaderWaferVisibleA = false;                    }                    //判断Loader1的TiltB水平状态                    if (TiltBCurrentStation == "HORI")                    {                        LoaderWaferVisibleB = true;                    }                    else if (TiltBCurrentStation == "VERT")                    {                        LoaderWaferVisibleB = false;                    }                    CurrentSideAOperation = CommonFunction.GetValue<string>(_rtDataValueDic, $"{SideAModuleName}.{CURRENT_OPERATION}");                    CurrentSideBOperation = CommonFunction.GetValue<string>(_rtDataValueDic, $"{SideBModuleName}.{CURRENT_OPERATION}");                }            }        }        /// <summary>        /// 隐藏        /// </summary>        public void Hide()        {            if (_timer != null)            {                _timer.Stop();            }        }        /// <summary>        /// 初始化查询数据集合        /// </summary>        private void AddDataKeys()        {            _rtDataKeys.Clear();            _rtDataKeys.Add($"{ShuttleAModuleName}.{MOTION_DATA}");            _rtDataKeys.Add($"{ShuttleAModuleName}.{IS_SWITCH_ON}");            _rtDataKeys.Add($"{ShuttleAModuleName}.{CURRENT_STATION}");            _rtDataKeys.Add($"{ShuttleBModuleName}.{MOTION_DATA}");            _rtDataKeys.Add($"{ShuttleBModuleName}.{IS_SWITCH_ON}");            _rtDataKeys.Add($"{ShuttleBModuleName}.{CURRENT_STATION}");            _rtDataKeys.Add($"{TiltAModuleName}.{MOTION_DATA}");            _rtDataKeys.Add($"{TiltAModuleName}.{IS_SWITCH_ON}");            _rtDataKeys.Add($"{TiltAModuleName}.{CURRENT_STATION}");            _rtDataKeys.Add($"{TiltBModuleName}.{MOTION_DATA}");            _rtDataKeys.Add($"{TiltBModuleName}.{IS_SWITCH_ON}");            _rtDataKeys.Add($"{TiltBModuleName}.{CURRENT_STATION}");            _rtDataKeys.Add($"{CRSAModuleName}.{MOTION_DATA}");            _rtDataKeys.Add($"{CRSAModuleName}.{IS_SWITCH_ON}");            _rtDataKeys.Add($"{CRSAModuleName}.{CURRENT_STATION}");            _rtDataKeys.Add($"{CRSBModuleName}.{MOTION_DATA}");            _rtDataKeys.Add($"{CRSBModuleName}.{IS_SWITCH_ON}");            _rtDataKeys.Add($"{CRSBModuleName}.{CURRENT_STATION}");            _rtDataKeys.Add($"{RotationModuleName}.{MOTION_DATA}");            _rtDataKeys.Add($"{RotationModuleName}.{IS_SWITCH_ON}");            _rtDataKeys.Add($"{RotationModuleName}.{CURRENT_STATION}");            _rtDataKeys.Add($"{SideAModuleName}.{SIDE_DATA}");            _rtDataKeys.Add($"{SideBModuleName}.{SIDE_DATA}");            _rtDataKeys.Add($"{Module}.{COMMON_DATA}");            _rtDataKeys.Add($"{SideAModuleName}.{CURRENT_OPERATION}");            _rtDataKeys.Add($"{SideBModuleName}.{CURRENT_OPERATION}");        }        private void InitialValueSeries(List<LoaderFlowLotTrackData> datas)        {            foreach(LoaderFlowLotTrackData item in datas)            {                ValueSeries.Add(item.FlowValue);                LabelSeries.Add(item.Time);            }        }        #region 指令Action        /// <summary>        /// Load Action        /// </summary>        /// <param name="obj"></param>        private void SideALoadAction(object obj)        {            InvokeClient.Instance.Service.DoOperation($"{Module}.SideA.Load");        }        /// <summary>        /// Unload Action        /// </summary>        /// <param name="obj"></param>        private void SideAUnloadAction(object obj)        {            InvokeClient.Instance.Service.DoOperation($"{Module}.SideA.Unload");        }        /// <summary>        /// Install CRS Action        /// </summary>        /// <param name="obj"></param>        private void SideAInstallCRSAction(object obj)         {             InvokeClient.Instance.Service.DoOperation($"{Module}.SideA.InstallCRS");        }        /// <summary>        /// SideB Load Action        /// </summary>        /// <param name="obj"></param>        private void SideBLoadAction(object obj)        {            InvokeClient.Instance.Service.DoOperation($"{Module}.SideB.Load");        }        /// <summary>        /// SideB Unload Action        /// </summary>        /// <param name="obj"></param>        private void SideBUnloadAction(object obj)        {            InvokeClient.Instance.Service.DoOperation($"{Module}.SideB.Unload");        }        /// <summary>        /// SideB Install CRS Action        /// </summary>        /// <param name="obj"></param>        private void SideBInstallCRSAction(object obj)        {            InvokeClient.Instance.Service.DoOperation($"{Module}.SideB.InstallCRS");        }        #endregion    }}
 |