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
- }
- }
|