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); } } /// /// Is Loader Moving /// 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); } } /// /// Is Pufs Moving /// 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); } } /// /// Is SRDs Moving /// 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); } } /// /// Is LoaderTransporters Moving /// 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); } } /// /// Is ProcessTransporters Moving /// public bool IsProcessTransMoving { get { return _isProcessTransMoving; } set { SetProperty(ref _isProcessTransMoving, value); } } #endregion #endregion /// /// 定时器 /// DispatcherTimer _timer; /// /// 查询后台数据集合 /// private List _rtDataKeys = new List(); /// /// rt查询key数值字典 /// private Dictionary _rtDataValueDic = new Dictionary(); #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 /// /// 构造函数 /// public SystemSafetyViewModel() { PauseCommand = new DelegateCommand(PauseAction); ResumeCommand = new DelegateCommand(ResumeAction); ResetCommand = new DelegateCommand(ResetAction); LockLoaderDoorsCommand = new DelegateCommand(LockLoaderDoorsAction); UnlockLoaderDoorsCommand = new DelegateCommand(UnlockLoaderDoorsAction); LockBufferDoorsCommand = new DelegateCommand(LockBufferDoorsAction); UnlockBufferDoorsCommand = new DelegateCommand(UnlockBufferDoorsAction); LockProcessDoorsCommand = new DelegateCommand(LockProcessDoorsAction); UnlockProcessDoorsCommand = new DelegateCommand(UnlockProcessDoorsAction); AllOnCommand = new DelegateCommand(AllOnAction); } /// /// 初始化Keys /// 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}"); } /// /// 加载数据 /// public void LoadData(string systemName) { InitialKeys(); if (_timer == null) { _timer = new DispatcherTimer(); _timer.Interval = TimeSpan.FromMilliseconds(200); _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) { CommonSafetyData = CommonFunction.GetValue(_rtDataValueDic, $"Safety.{SAFETY_DATA}"); IsLoaderRotationOn = CommonFunction.GetValue(_rtDataValueDic, $"Loader1.Rotation.{IS_SWITCH_ON}"); IsLoaderASwingOn = CommonFunction.GetValue(_rtDataValueDic, $"Loader1.ShuttleA.{IS_SWITCH_ON}"); IsLoaderATiltOn = CommonFunction.GetValue(_rtDataValueDic, $"Loader1.TiltA.{IS_SWITCH_ON}"); IsLoaderBSwingOn = CommonFunction.GetValue(_rtDataValueDic, $"Loader1.ShuttleB.{IS_SWITCH_ON}"); IsLoaderBTiltOn = CommonFunction.GetValue(_rtDataValueDic, $"Loader1.TiltB.{IS_SWITCH_ON}"); IsSrd1ArmOn = CommonFunction.GetValue(_rtDataValueDic, $"SRD1.Arm.{IS_SWITCH_ON}"); IsSrd1RotationOn = CommonFunction.GetValue(_rtDataValueDic, $"SRD1.Rotation.{IS_SWITCH_ON}"); IsSrd2ArmOn = CommonFunction.GetValue(_rtDataValueDic, $"SRD2.Arm.{IS_SWITCH_ON}"); IsSrd2RotationOn = CommonFunction.GetValue(_rtDataValueDic, $"SRD2.Rotation.{IS_SWITCH_ON}"); IsPuf1VerticalOn = CommonFunction.GetValue(_rtDataValueDic, $"PUF1.Vertical.{IS_SWITCH_ON}"); IsPuf1RotationOn = CommonFunction.GetValue(_rtDataValueDic, $"PUF1.Rotation.{IS_SWITCH_ON}"); IsPuf1FlipOn = CommonFunction.GetValue(_rtDataValueDic, $"PUF1.Flip.{IS_SWITCH_ON}"); IsPuf2VerticalOn = CommonFunction.GetValue(_rtDataValueDic, $"PUF2.Vertical.{IS_SWITCH_ON}"); IsPuf2RotationOn = CommonFunction.GetValue(_rtDataValueDic, $"PUF2.Rotation.{IS_SWITCH_ON}"); IsPuf2FlipOn = CommonFunction.GetValue(_rtDataValueDic, $"PUF2.Flip.{IS_SWITCH_ON}"); IsLoaderGantryOn = CommonFunction.GetValue(_rtDataValueDic, $"Transporter2.Gantry.{IS_SWITCH_ON}"); IsLoaderElevatorOn = CommonFunction.GetValue(_rtDataValueDic, $"Transporter2.Elevator.{IS_SWITCH_ON}"); IsProcessGantryOn = CommonFunction.GetValue(_rtDataValueDic, $"Transporter1.Gantry.{IS_SWITCH_ON}"); IsProcessElevatorOn = CommonFunction.GetValue(_rtDataValueDic, $"Transporter1.Elevator.{IS_SWITCH_ON}"); //判断电机Moving状态 JudgeMoving(); } } } /// /// 隐藏 /// public void Hide() { if (_timer != null) { _timer.Stop(); } } #region 指令Action /// /// Pause /// /// private void PauseAction(object param) { throw new NotImplementedException(); } /// /// Resume /// /// private void ResumeAction(object param) { throw new NotImplementedException(); } /// /// AllOn /// /// private void AllOnAction(object param) { InvokeClient.Instance.Service.DoOperation("Safety.AllOnOperation"); } /// /// Reset /// /// private void ResetAction(object param) { InvokeClient.Instance.Service.DoOperation("Safety.ResetOperation"); } /// /// LockLoaderDoors /// /// private void LockLoaderDoorsAction(object param) { InvokeClient.Instance.Service.DoOperation("Safety.LockLoaderDoors"); } /// /// UnlockLoaderDoors /// /// private void UnlockLoaderDoorsAction(object param) { InvokeClient.Instance.Service.DoOperation("Safety.UnlockLoaderDoors"); } /// /// LockBufferDoors /// /// private void LockBufferDoorsAction(object param) { InvokeClient.Instance.Service.DoOperation("Safety.LockBufferDoors"); } /// /// UnlockBufferDoors /// /// private void UnlockBufferDoorsAction(object param) { InvokeClient.Instance.Service.DoOperation("Safety.UnlockBufferDoors"); } /// /// LockProcessDoors /// /// private void LockProcessDoorsAction(object param) { InvokeClient.Instance.Service.DoOperation("Safety.LockProcessDoors"); } /// /// UnlockProcessDoors /// /// private void UnlockProcessDoorsAction(object param) { InvokeClient.Instance.Service.DoOperation("Safety.UnlockProcessDoors"); } /// /// 判断各个电机Moving状态 /// /// private void JudgeMoving() { //检测LoaderTransporter是否运动 bool gantryMoving = CommonFunction.GetValue(_rtDataValueDic, $"Transporter2.Gantry.{IS_MOVING}"); bool elevatorMoving = CommonFunction.GetValue(_rtDataValueDic, $"Transporter2.Elevator.{IS_MOVING}"); if (gantryMoving || elevatorMoving) { IsLoaderTransMoving = true; } else { IsLoaderTransMoving = false; } //检测ProcessTransporter是否运动 gantryMoving = CommonFunction.GetValue(_rtDataValueDic, $"Transporter1.Gantry.{IS_MOVING}"); elevatorMoving = CommonFunction.GetValue(_rtDataValueDic, $"Transporter1.Elevator.{IS_MOVING}"); if (gantryMoving || elevatorMoving) { IsProcessTransMoving = true; } else { IsProcessTransMoving = false; } //检测Pufs是否运动 bool puf1VerticalMoving = CommonFunction.GetValue(_rtDataValueDic, $"PUF1.Vertical.{IS_MOVING}"); bool puf1RotationMoving = CommonFunction.GetValue(_rtDataValueDic, $"PUF1.Rotation.{IS_MOVING}"); bool puf1FlipMoving = CommonFunction.GetValue(_rtDataValueDic, $"PUF1.Flip.{IS_MOVING}"); bool puf2VerticalMoving = CommonFunction.GetValue(_rtDataValueDic, $"PUF2.Vertical.{IS_MOVING}"); bool puf2RotationMoving = CommonFunction.GetValue(_rtDataValueDic, $"PUF2.Rotation.{IS_MOVING}"); bool puf2FlipMoving = CommonFunction.GetValue(_rtDataValueDic, $"PUF2.Flip.{IS_MOVING}"); if (puf1VerticalMoving || puf1RotationMoving || puf1FlipMoving || puf2VerticalMoving || puf2RotationMoving || puf2FlipMoving) { IsPufsMoving = true; } else { IsPufsMoving = false; } //检测Loader是否运动 bool loaderRotationMoving = CommonFunction.GetValue(_rtDataValueDic, $"Loader1.Rotation.{IS_MOVING}"); bool loaderSwingAMoving = CommonFunction.GetValue(_rtDataValueDic, $"Loader1.ShuttleA.{IS_MOVING}"); bool loaderSwingBMoving = CommonFunction.GetValue(_rtDataValueDic, $"Loader1.ShuttleB.{IS_MOVING}"); bool loaderTiltAMoving = CommonFunction.GetValue(_rtDataValueDic, $"Loader1.TiltA.{IS_MOVING}"); bool loaderTiltBMoving = CommonFunction.GetValue(_rtDataValueDic, $"Loader1.TiltB.{IS_MOVING}"); if (loaderRotationMoving || loaderSwingAMoving || loaderSwingBMoving || loaderTiltAMoving || loaderTiltBMoving) { IsLoaderMoving = true; } else { IsLoaderMoving = false; } //检测SRDs是否运动 bool srd1RotationMoving = CommonFunction.GetValue(_rtDataValueDic, $"SRD1.Rotation.{IS_MOVING}"); bool srd1ArmMoving = CommonFunction.GetValue(_rtDataValueDic, $"SRD1.Arm.{IS_MOVING}"); bool srd2RotationMoving = CommonFunction.GetValue(_rtDataValueDic, $"SRD2.Rotation.{IS_MOVING}"); bool srd2ArmMoving = CommonFunction.GetValue(_rtDataValueDic, $"SRD2.Arm.{IS_MOVING}"); if (srd1RotationMoving || srd1ArmMoving || srd2RotationMoving || srd2ArmMoving) { IsSRDsMoving = true; } else { IsSRDsMoving = false; } } #endregion } }