| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 | using Aitex.Core.UI.MVVM;using MECF.Framework.Common.CommonData;using MECF.Framework.Common.DataCenter;using MECF.Framework.Common.Device.Safety;using MECF.Framework.Common.Equipment;using MECF.Framework.Common.OperationCenter;using MECF.Framework.Common.Utilities;using OpenSEMI.ClientBase.Command;using Prism.Mvvm;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Input;using System.Windows.Threading;namespace CyberX8_MainPages.ViewModels{    public class SystemSafetyViewModel : BindableBase    {        #region 常量        private const string SAFETY_DATA = "SafetyData";        private const string IS_SWITCH_ON = "IsSwitchOn";        private const string IS_INITIALIZED = "IsInitialized";        private const string IS_MOVING = "IsMoving";        #endregion        #region 内部变量        private SafetyData _commonSafetyData;        #region Loader        private bool _isLoaderRotationOn;        private bool _isLoaderASwingOn;        private bool _isLoaderATiltOn;        private bool _isLoaderBSwingOn;        private bool _isLoaderBTiltOn;        private bool _isLoaderMoving;        #endregion        #region PUFs        private bool _isPuf1VerticalOn;        private bool _isPuf1RotationOn;        private bool _isPuf1FlipOn;        private bool _isPuf2VerticalOn;        private bool _isPuf2RotationOn;        private bool _isPuf2FlipOn;        private bool _isPufsMoving;        #endregion        #region SRD        private bool _isSrd1ArmOn;        private bool _isSrd1RotationOn;        private bool _isSrd2ArmOn;        private bool _isSrd2RotationOn;        private bool _isSRDsMoving;        #endregion        #region Transporters        private bool _isLoaderGantryOn;        private bool _isLoaderElevatorOn;        private bool _isLoaderTransMoving;        private bool _isProcessGantryOn;        private bool _isProcessElevatorOn;        private bool _isProcessTransMoving;        #endregion        #endregion        #region 属性        public SafetyData CommonSafetyData { get { return _commonSafetyData; } set { SetProperty(ref _commonSafetyData, value); } }        #region Loader        public bool IsLoaderRotationOn { get { return _isLoaderRotationOn; } set { SetProperty(ref _isLoaderRotationOn, value); } }        public bool IsLoaderASwingOn { get { return _isLoaderASwingOn; } set { SetProperty(ref _isLoaderASwingOn, value); } }        public bool IsLoaderATiltOn { get { return _isLoaderATiltOn; } set { SetProperty(ref _isLoaderATiltOn, value); } }        public bool IsLoaderBSwingOn { get { return _isLoaderBSwingOn; } set { SetProperty(ref _isLoaderBSwingOn, value); } }        public bool IsLoaderBTiltOn { get { return _isLoaderBTiltOn; } set { SetProperty(ref _isLoaderBTiltOn, value); } }        /// <summary>        /// Is Loader Moving        /// </summary>        public bool IsLoaderMoving { get { return _isLoaderMoving; } set { SetProperty(ref _isLoaderMoving, value); } }        #endregion        #region PUFs        public bool IsPuf1VerticalOn { get { return _isPuf1VerticalOn; } set { SetProperty(ref _isPuf1VerticalOn, value); } }        public bool IsPuf1RotationOn { get { return _isPuf1RotationOn; } set { SetProperty(ref _isPuf1RotationOn, value); } }        public bool IsPuf1FlipOn { get { return _isPuf1FlipOn; } set { SetProperty(ref _isPuf1FlipOn, value); } }        public bool IsPuf2VerticalOn { get { return _isPuf2VerticalOn; } set { SetProperty(ref _isPuf2VerticalOn, value); } }        public bool IsPuf2RotationOn { get { return _isPuf2RotationOn; } set { SetProperty(ref _isPuf2RotationOn, value); } }        public bool IsPuf2FlipOn { get { return _isPuf2FlipOn; } set { SetProperty(ref _isPuf2FlipOn, value); } }        /// <summary>        /// Is Pufs Moving        /// </summary>        public bool IsPufsMoving { get { return _isPufsMoving; } set { SetProperty(ref _isPufsMoving, value); } }        #endregion        #region SRD        public bool IsSrd1ArmOn { get { return _isSrd1ArmOn; } set { SetProperty(ref _isSrd1ArmOn, value); } }        public bool IsSrd1RotationOn { get { return _isSrd1RotationOn; } set { SetProperty(ref _isSrd1RotationOn, value);}}        public bool IsSrd2ArmOn { get { return _isSrd2ArmOn; } set { SetProperty(ref _isSrd2ArmOn, value); } }        public bool IsSrd2RotationOn { get { return _isSrd2RotationOn; } set { SetProperty(ref _isSrd2RotationOn, value); } }        /// <summary>        /// Is SRDs Moving        /// </summary>        public bool IsSRDsMoving { get { return _isSRDsMoving; } set { SetProperty(ref _isSRDsMoving, value); } }        #endregion        #region Transporters        public bool IsLoaderGantryOn { get { return _isLoaderGantryOn; } set { SetProperty(ref _isLoaderGantryOn, value); } }        public bool IsLoaderElevatorOn { get { return _isLoaderElevatorOn; } set { SetProperty(ref _isLoaderElevatorOn, value); } }        /// <summary>        /// Is LoaderTransporters Moving        /// </summary>        public bool IsLoaderTransMoving { get { return _isLoaderTransMoving; } set { SetProperty(ref _isLoaderTransMoving, value); }}        public bool IsProcessGantryOn { get { return _isProcessGantryOn; } set { SetProperty(ref _isProcessGantryOn, value); } }        public bool IsProcessElevatorOn { get { return _isProcessElevatorOn; } set { SetProperty(ref _isProcessElevatorOn, value); } }        /// <summary>        /// Is ProcessTransporters Moving        /// </summary>        public bool IsProcessTransMoving { get { return _isProcessTransMoving; } set { SetProperty(ref _isProcessTransMoving, value); } }        #endregion        #endregion        /// <summary>        /// 定时器        /// </summary>        DispatcherTimer _timer;        /// <summary>        /// 查询后台数据集合        /// </summary>        private List<string> _rtDataKeys = new List<string>();        /// <summary>        /// rt查询key数值字典        /// </summary>        private Dictionary<string, object> _rtDataValueDic = new Dictionary<string, object>();        #region 指令        public ICommand PauseCommand { get; private set; }        public ICommand ResumeCommand { get; private set; }        public ICommand ResetCommand { get; private set; }        public ICommand LockLoaderDoorsCommand { get; private set; }        public ICommand UnlockLoaderDoorsCommand { get; private set; }        public ICommand LockBufferDoorsCommand { get; private set; }        public ICommand UnlockBufferDoorsCommand { get; private set; }        public ICommand LockProcessDoorsCommand { get; private set; }        public ICommand UnlockProcessDoorsCommand { get; private set; }        public ICommand AllOnCommand { get; private set; }        #endregion        /// <summary>        /// 构造函数        /// </summary>        public SystemSafetyViewModel()        {            PauseCommand = new DelegateCommand<Object>(PauseAction);            ResumeCommand = new DelegateCommand<Object>(ResumeAction);            ResetCommand = new DelegateCommand<Object>(ResetAction);            LockLoaderDoorsCommand = new DelegateCommand<Object>(LockLoaderDoorsAction);            UnlockLoaderDoorsCommand = new DelegateCommand<Object>(UnlockLoaderDoorsAction);            LockBufferDoorsCommand = new DelegateCommand<Object>(LockBufferDoorsAction);            UnlockBufferDoorsCommand = new DelegateCommand<Object>(UnlockBufferDoorsAction);            LockProcessDoorsCommand = new DelegateCommand<Object>(LockProcessDoorsAction);            UnlockProcessDoorsCommand = new DelegateCommand<Object>(UnlockProcessDoorsAction);            AllOnCommand = new DelegateCommand<Object>(AllOnAction);        }        /// <summary>        /// 初始化Keys        /// </summary>        private void InitialKeys()        {            _rtDataKeys.Clear();            _rtDataKeys.Add($"Safety.{SAFETY_DATA}");            _rtDataKeys.Add($"Safety.{IS_INITIALIZED}");                        _rtDataKeys.Add($"Loader1.Rotation.{IS_SWITCH_ON}");            _rtDataKeys.Add($"Loader1.ShuttleA.{IS_SWITCH_ON}");            _rtDataKeys.Add($"Loader1.TiltA.{IS_SWITCH_ON}");            _rtDataKeys.Add($"Loader1.ShuttleB.{IS_SWITCH_ON}");            _rtDataKeys.Add($"Loader1.TiltB.{IS_SWITCH_ON}");                        _rtDataKeys.Add($"SRD1.Arm.{IS_SWITCH_ON}");            _rtDataKeys.Add($"SRD1.Rotation.{IS_SWITCH_ON}");            _rtDataKeys.Add($"SRD2.Arm.{IS_SWITCH_ON}");            _rtDataKeys.Add($"SRD2.Rotation.{IS_SWITCH_ON}");                        _rtDataKeys.Add($"PUF1.Vertical.{IS_SWITCH_ON}");            _rtDataKeys.Add($"PUF1.Rotation.{IS_SWITCH_ON}");            _rtDataKeys.Add($"PUF1.Flip.{IS_SWITCH_ON}");            _rtDataKeys.Add($"PUF2.Vertical.{IS_SWITCH_ON}");            _rtDataKeys.Add($"PUF2.Rotation.{IS_SWITCH_ON}");            _rtDataKeys.Add($"PUF2.Flip.{IS_SWITCH_ON}");            _rtDataKeys.Add($"Transporter2.Gantry.{IS_SWITCH_ON}");            _rtDataKeys.Add($"Transporter2.Elevator.{IS_SWITCH_ON}");            _rtDataKeys.Add($"Transporter1.Gantry.{IS_SWITCH_ON}");            _rtDataKeys.Add($"Transporter1.Elevator.{IS_SWITCH_ON}");            //Is Moving            _rtDataKeys.Add($"Loader1.Rotation.{IS_MOVING}");            _rtDataKeys.Add($"Loader1.ShuttleA.{IS_MOVING}");            _rtDataKeys.Add($"Loader1.TiltA.{IS_MOVING}");            _rtDataKeys.Add($"Loader1.ShuttleB.{IS_MOVING}");            _rtDataKeys.Add($"Loader1.TiltB.{IS_MOVING}");            _rtDataKeys.Add($"SRD1.Arm.{IS_MOVING}");            _rtDataKeys.Add($"SRD1.Rotation.{IS_MOVING}");            _rtDataKeys.Add($"SRD2.Arm.{IS_MOVING}");            _rtDataKeys.Add($"SRD2.Rotation.{IS_MOVING}");            _rtDataKeys.Add($"PUF1.Vertical.{IS_MOVING}");            _rtDataKeys.Add($"PUF1.Rotation.{IS_MOVING}");            _rtDataKeys.Add($"PUF1.Flip.{IS_MOVING}");            _rtDataKeys.Add($"PUF2.Vertical.{IS_MOVING}");            _rtDataKeys.Add($"PUF2.Rotation.{IS_MOVING}");            _rtDataKeys.Add($"PUF2.Flip.{IS_MOVING}");            _rtDataKeys.Add($"Transporter2.Gantry.{IS_MOVING}");            _rtDataKeys.Add($"Transporter2.Elevator.{IS_MOVING}");            _rtDataKeys.Add($"Transporter1.Gantry.{IS_MOVING}");            _rtDataKeys.Add($"Transporter1.Elevator.{IS_MOVING}");            _rtDataKeys.Add($"SRD1.Rotation.{IS_MOVING}");            _rtDataKeys.Add($"SRD1.Arm.{IS_MOVING}");            _rtDataKeys.Add($"SRD2.Rotation.{IS_MOVING}");            _rtDataKeys.Add($"SRD2.Arm.{IS_MOVING}");        }                /// <summary>        /// 加载数据        /// </summary>        public void LoadData(string systemName)        {            InitialKeys();            if (_timer == null)            {                _timer = new DispatcherTimer();                _timer.Interval = TimeSpan.FromMilliseconds(200);                _timer.Tick += Timer_Tick; ;            }            _timer.Start();        }        /// <summary>        /// 定时器执行        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        /// <exception cref="NotImplementedException"></exception>        private void Timer_Tick(object sender, EventArgs e)        {            if (_rtDataKeys.Count != 0)            {                _rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys);                if (_rtDataValueDic != null)                {                    CommonSafetyData = CommonFunction.GetValue<SafetyData>(_rtDataValueDic, $"Safety.{SAFETY_DATA}");                    IsLoaderRotationOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.Rotation.{IS_SWITCH_ON}");                    IsLoaderASwingOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.ShuttleA.{IS_SWITCH_ON}");                    IsLoaderATiltOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.TiltA.{IS_SWITCH_ON}");                    IsLoaderBSwingOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.ShuttleB.{IS_SWITCH_ON}");                    IsLoaderBTiltOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.TiltB.{IS_SWITCH_ON}");                    IsSrd1ArmOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD1.Arm.{IS_SWITCH_ON}");                    IsSrd1RotationOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD1.Rotation.{IS_SWITCH_ON}");                    IsSrd2ArmOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD2.Arm.{IS_SWITCH_ON}");                    IsSrd2RotationOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD2.Rotation.{IS_SWITCH_ON}");                    IsPuf1VerticalOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Vertical.{IS_SWITCH_ON}");                    IsPuf1RotationOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Rotation.{IS_SWITCH_ON}");                    IsPuf1FlipOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Flip.{IS_SWITCH_ON}");                    IsPuf2VerticalOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Vertical.{IS_SWITCH_ON}");                    IsPuf2RotationOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Rotation.{IS_SWITCH_ON}");                    IsPuf2FlipOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Flip.{IS_SWITCH_ON}");                    IsLoaderGantryOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter2.Gantry.{IS_SWITCH_ON}");                    IsLoaderElevatorOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter2.Elevator.{IS_SWITCH_ON}");                    IsProcessGantryOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter1.Gantry.{IS_SWITCH_ON}");                    IsProcessElevatorOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter1.Elevator.{IS_SWITCH_ON}");                    //判断电机Moving状态                    JudgeMoving();                }            }        }        /// <summary>        /// 隐藏        /// </summary>        public void Hide()        {            if (_timer != null)            {                _timer.Stop();            }        }        #region 指令Action        /// <summary>        /// Pause        /// </summary>        /// <param name="param"></param>        private void PauseAction(object param)        {            throw new NotImplementedException();        }        /// <summary>        /// Resume        /// </summary>        /// <param name="param"></param>        private void ResumeAction(object param)        {            throw new NotImplementedException();        }        /// <summary>        /// AllOn        /// </summary>        /// <param name="param"></param>        private void AllOnAction(object param)        {            InvokeClient.Instance.Service.DoOperation("Safety.AllOnOperation");        }        /// <summary>        /// Reset        /// </summary>        /// <param name="param"></param>        private void ResetAction(object param)        {            InvokeClient.Instance.Service.DoOperation("Safety.ResetOperation");        }        /// <summary>        /// LockLoaderDoors        /// </summary>        /// <param name="param"></param>        private void LockLoaderDoorsAction(object param)        {            InvokeClient.Instance.Service.DoOperation("Safety.LockLoaderDoors");        }        /// <summary>        /// UnlockLoaderDoors        /// </summary>        /// <param name="param"></param>        private void UnlockLoaderDoorsAction(object param)        {            InvokeClient.Instance.Service.DoOperation("Safety.UnlockLoaderDoors");        }        /// <summary>        /// LockBufferDoors        /// </summary>        /// <param name="param"></param>        private void LockBufferDoorsAction(object param)        {            InvokeClient.Instance.Service.DoOperation("Safety.LockBufferDoors");        }        /// <summary>        /// UnlockBufferDoors        /// </summary>        /// <param name="param"></param>        private void UnlockBufferDoorsAction(object param)        {            InvokeClient.Instance.Service.DoOperation("Safety.UnlockBufferDoors");        }        /// <summary>        /// LockProcessDoors        /// </summary>        /// <param name="param"></param>        private void LockProcessDoorsAction(object param)        {            InvokeClient.Instance.Service.DoOperation("Safety.LockProcessDoors");        }        /// <summary>        /// UnlockProcessDoors        /// </summary>        /// <param name="param"></param>        private void UnlockProcessDoorsAction(object param)        {            InvokeClient.Instance.Service.DoOperation("Safety.UnlockProcessDoors");        }        /// <summary>        /// 判断各个电机Moving状态        /// </summary>        /// <param name="param"></param>        private void JudgeMoving()        {            //检测LoaderTransporter是否运动            bool gantryMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter2.Gantry.{IS_MOVING}");            bool elevatorMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter2.Elevator.{IS_MOVING}");            if (gantryMoving || elevatorMoving)            {                IsLoaderTransMoving = true;            }            else            {                IsLoaderTransMoving = false;            }            //检测ProcessTransporter是否运动            gantryMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter1.Gantry.{IS_MOVING}");            elevatorMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter1.Elevator.{IS_MOVING}");            if (gantryMoving || elevatorMoving)            {                IsProcessTransMoving = true;            }            else            {                IsProcessTransMoving = false;            }            //检测Pufs是否运动            bool puf1VerticalMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Vertical.{IS_MOVING}");            bool puf1RotationMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Rotation.{IS_MOVING}");            bool puf1FlipMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Flip.{IS_MOVING}");            bool puf2VerticalMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Vertical.{IS_MOVING}");            bool puf2RotationMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Rotation.{IS_MOVING}");            bool puf2FlipMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Flip.{IS_MOVING}");            if (puf1VerticalMoving || puf1RotationMoving || puf1FlipMoving || puf2VerticalMoving || puf2RotationMoving || puf2FlipMoving)            {                IsPufsMoving = true;            }            else            {                IsPufsMoving = false;            }            //检测Loader是否运动            bool loaderRotationMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.Rotation.{IS_MOVING}");            bool loaderSwingAMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.ShuttleA.{IS_MOVING}");            bool loaderSwingBMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.ShuttleB.{IS_MOVING}");            bool loaderTiltAMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.TiltA.{IS_MOVING}");            bool loaderTiltBMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.TiltB.{IS_MOVING}");            if (loaderRotationMoving || loaderSwingAMoving || loaderSwingBMoving || loaderTiltAMoving || loaderTiltBMoving)            {                IsLoaderMoving = true;            }            else            {                IsLoaderMoving = false;            }            //检测SRDs是否运动            bool srd1RotationMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD1.Rotation.{IS_MOVING}");            bool srd1ArmMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD1.Arm.{IS_MOVING}");            bool srd2RotationMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD2.Rotation.{IS_MOVING}");            bool srd2ArmMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD2.Arm.{IS_MOVING}");            if (srd1RotationMoving || srd1ArmMoving || srd2RotationMoving || srd2ArmMoving)            {                IsSRDsMoving = true;            }            else            {                IsSRDsMoving = false;            }        }        #endregion    }}
 |