SystemSafetyViewModel.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466
  1. using Aitex.Core.UI.MVVM;
  2. using MECF.Framework.Common.CommonData;
  3. using MECF.Framework.Common.DataCenter;
  4. using MECF.Framework.Common.Device.Safety;
  5. using MECF.Framework.Common.Equipment;
  6. using MECF.Framework.Common.OperationCenter;
  7. using MECF.Framework.Common.Utilities;
  8. using OpenSEMI.ClientBase.Command;
  9. using Prism.Mvvm;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Windows.Input;
  16. using System.Windows.Threading;
  17. namespace CyberX8_MainPages.ViewModels
  18. {
  19. public class SystemSafetyViewModel : BindableBase
  20. {
  21. #region 常量
  22. private const string SAFETY_DATA = "SafetyData";
  23. private const string IS_SWITCH_ON = "IsSwitchOn";
  24. private const string IS_INITIALIZED = "IsInitialized";
  25. private const string IS_MOVING = "IsMoving";
  26. #endregion
  27. #region 内部变量
  28. private SafetyData _commonSafetyData;
  29. #region Loader
  30. private bool _isLoaderRotationOn;
  31. private bool _isLoaderASwingOn;
  32. private bool _isLoaderATiltOn;
  33. private bool _isLoaderBSwingOn;
  34. private bool _isLoaderBTiltOn;
  35. private bool _isLoaderMoving;
  36. #endregion
  37. #region PUFs
  38. private bool _isPuf1VerticalOn;
  39. private bool _isPuf1RotationOn;
  40. private bool _isPuf1FlipOn;
  41. private bool _isPuf2VerticalOn;
  42. private bool _isPuf2RotationOn;
  43. private bool _isPuf2FlipOn;
  44. private bool _isPufsMoving;
  45. #endregion
  46. #region SRD
  47. private bool _isSrd1ArmOn;
  48. private bool _isSrd1RotationOn;
  49. private bool _isSrd2ArmOn;
  50. private bool _isSrd2RotationOn;
  51. private bool _isSRDsMoving;
  52. #endregion
  53. #region Transporters
  54. private bool _isLoaderGantryOn;
  55. private bool _isLoaderElevatorOn;
  56. private bool _isLoaderTransMoving;
  57. private bool _isProcessGantryOn;
  58. private bool _isProcessElevatorOn;
  59. private bool _isProcessTransMoving;
  60. #endregion
  61. #endregion
  62. #region 属性
  63. public SafetyData CommonSafetyData { get { return _commonSafetyData; } set { SetProperty(ref _commonSafetyData, value); } }
  64. #region Loader
  65. public bool IsLoaderRotationOn { get { return _isLoaderRotationOn; } set { SetProperty(ref _isLoaderRotationOn, value); } }
  66. public bool IsLoaderASwingOn { get { return _isLoaderASwingOn; } set { SetProperty(ref _isLoaderASwingOn, value); } }
  67. public bool IsLoaderATiltOn { get { return _isLoaderATiltOn; } set { SetProperty(ref _isLoaderATiltOn, value); } }
  68. public bool IsLoaderBSwingOn { get { return _isLoaderBSwingOn; } set { SetProperty(ref _isLoaderBSwingOn, value); } }
  69. public bool IsLoaderBTiltOn { get { return _isLoaderBTiltOn; } set { SetProperty(ref _isLoaderBTiltOn, value); } }
  70. /// <summary>
  71. /// Is Loader Moving
  72. /// </summary>
  73. public bool IsLoaderMoving { get { return _isLoaderMoving; } set { SetProperty(ref _isLoaderMoving, value); } }
  74. #endregion
  75. #region PUFs
  76. public bool IsPuf1VerticalOn { get { return _isPuf1VerticalOn; } set { SetProperty(ref _isPuf1VerticalOn, value); } }
  77. public bool IsPuf1RotationOn { get { return _isPuf1RotationOn; } set { SetProperty(ref _isPuf1RotationOn, value); } }
  78. public bool IsPuf1FlipOn { get { return _isPuf1FlipOn; } set { SetProperty(ref _isPuf1FlipOn, value); } }
  79. public bool IsPuf2VerticalOn { get { return _isPuf2VerticalOn; } set { SetProperty(ref _isPuf2VerticalOn, value); } }
  80. public bool IsPuf2RotationOn { get { return _isPuf2RotationOn; } set { SetProperty(ref _isPuf2RotationOn, value); } }
  81. public bool IsPuf2FlipOn { get { return _isPuf2FlipOn; } set { SetProperty(ref _isPuf2FlipOn, value); } }
  82. /// <summary>
  83. /// Is Pufs Moving
  84. /// </summary>
  85. public bool IsPufsMoving { get { return _isPufsMoving; } set { SetProperty(ref _isPufsMoving, value); } }
  86. #endregion
  87. #region SRD
  88. public bool IsSrd1ArmOn { get { return _isSrd1ArmOn; } set { SetProperty(ref _isSrd1ArmOn, value); } }
  89. public bool IsSrd1RotationOn { get { return _isSrd1RotationOn; } set { SetProperty(ref _isSrd1RotationOn, value);}}
  90. public bool IsSrd2ArmOn { get { return _isSrd2ArmOn; } set { SetProperty(ref _isSrd2ArmOn, value); } }
  91. public bool IsSrd2RotationOn { get { return _isSrd2RotationOn; } set { SetProperty(ref _isSrd2RotationOn, value); } }
  92. /// <summary>
  93. /// Is SRDs Moving
  94. /// </summary>
  95. public bool IsSRDsMoving { get { return _isSRDsMoving; } set { SetProperty(ref _isSRDsMoving, value); } }
  96. #endregion
  97. #region Transporters
  98. public bool IsLoaderGantryOn { get { return _isLoaderGantryOn; } set { SetProperty(ref _isLoaderGantryOn, value); } }
  99. public bool IsLoaderElevatorOn { get { return _isLoaderElevatorOn; } set { SetProperty(ref _isLoaderElevatorOn, value); } }
  100. /// <summary>
  101. /// Is LoaderTransporters Moving
  102. /// </summary>
  103. public bool IsLoaderTransMoving { get { return _isLoaderTransMoving; } set { SetProperty(ref _isLoaderTransMoving, value); }}
  104. public bool IsProcessGantryOn { get { return _isProcessGantryOn; } set { SetProperty(ref _isProcessGantryOn, value); } }
  105. public bool IsProcessElevatorOn { get { return _isProcessElevatorOn; } set { SetProperty(ref _isProcessElevatorOn, value); } }
  106. /// <summary>
  107. /// Is ProcessTransporters Moving
  108. /// </summary>
  109. public bool IsProcessTransMoving { get { return _isProcessTransMoving; } set { SetProperty(ref _isProcessTransMoving, value); } }
  110. #endregion
  111. #endregion
  112. /// <summary>
  113. /// 定时器
  114. /// </summary>
  115. DispatcherTimer _timer;
  116. /// <summary>
  117. /// 查询后台数据集合
  118. /// </summary>
  119. private List<string> _rtDataKeys = new List<string>();
  120. /// <summary>
  121. /// rt查询key数值字典
  122. /// </summary>
  123. private Dictionary<string, object> _rtDataValueDic = new Dictionary<string, object>();
  124. #region 指令
  125. public ICommand PauseCommand { get; private set; }
  126. public ICommand ResumeCommand { get; private set; }
  127. public ICommand ResetCommand { get; private set; }
  128. public ICommand LockLoaderDoorsCommand { get; private set; }
  129. public ICommand UnlockLoaderDoorsCommand { get; private set; }
  130. public ICommand LockBufferDoorsCommand { get; private set; }
  131. public ICommand UnlockBufferDoorsCommand { get; private set; }
  132. public ICommand LockProcessDoorsCommand { get; private set; }
  133. public ICommand UnlockProcessDoorsCommand { get; private set; }
  134. public ICommand AllOnCommand { get; private set; }
  135. #endregion
  136. /// <summary>
  137. /// 构造函数
  138. /// </summary>
  139. public SystemSafetyViewModel()
  140. {
  141. PauseCommand = new DelegateCommand<Object>(PauseAction);
  142. ResumeCommand = new DelegateCommand<Object>(ResumeAction);
  143. ResetCommand = new DelegateCommand<Object>(ResetAction);
  144. LockLoaderDoorsCommand = new DelegateCommand<Object>(LockLoaderDoorsAction);
  145. UnlockLoaderDoorsCommand = new DelegateCommand<Object>(UnlockLoaderDoorsAction);
  146. LockBufferDoorsCommand = new DelegateCommand<Object>(LockBufferDoorsAction);
  147. UnlockBufferDoorsCommand = new DelegateCommand<Object>(UnlockBufferDoorsAction);
  148. LockProcessDoorsCommand = new DelegateCommand<Object>(LockProcessDoorsAction);
  149. UnlockProcessDoorsCommand = new DelegateCommand<Object>(UnlockProcessDoorsAction);
  150. AllOnCommand = new DelegateCommand<Object>(AllOnAction);
  151. }
  152. /// <summary>
  153. /// 初始化Keys
  154. /// </summary>
  155. private void InitialKeys()
  156. {
  157. _rtDataKeys.Clear();
  158. _rtDataKeys.Add($"Safety.{SAFETY_DATA}");
  159. _rtDataKeys.Add($"Safety.{IS_INITIALIZED}");
  160. _rtDataKeys.Add($"Loader1.Rotation.{IS_SWITCH_ON}");
  161. _rtDataKeys.Add($"Loader1.ShuttleA.{IS_SWITCH_ON}");
  162. _rtDataKeys.Add($"Loader1.TiltA.{IS_SWITCH_ON}");
  163. _rtDataKeys.Add($"Loader1.ShuttleB.{IS_SWITCH_ON}");
  164. _rtDataKeys.Add($"Loader1.TiltB.{IS_SWITCH_ON}");
  165. _rtDataKeys.Add($"SRD1.Arm.{IS_SWITCH_ON}");
  166. _rtDataKeys.Add($"SRD1.Rotation.{IS_SWITCH_ON}");
  167. _rtDataKeys.Add($"SRD2.Arm.{IS_SWITCH_ON}");
  168. _rtDataKeys.Add($"SRD2.Rotation.{IS_SWITCH_ON}");
  169. _rtDataKeys.Add($"PUF1.Vertical.{IS_SWITCH_ON}");
  170. _rtDataKeys.Add($"PUF1.Rotation.{IS_SWITCH_ON}");
  171. _rtDataKeys.Add($"PUF1.Flip.{IS_SWITCH_ON}");
  172. _rtDataKeys.Add($"PUF2.Vertical.{IS_SWITCH_ON}");
  173. _rtDataKeys.Add($"PUF2.Rotation.{IS_SWITCH_ON}");
  174. _rtDataKeys.Add($"PUF2.Flip.{IS_SWITCH_ON}");
  175. _rtDataKeys.Add($"Transporter2.Gantry.{IS_SWITCH_ON}");
  176. _rtDataKeys.Add($"Transporter2.Elevator.{IS_SWITCH_ON}");
  177. _rtDataKeys.Add($"Transporter1.Gantry.{IS_SWITCH_ON}");
  178. _rtDataKeys.Add($"Transporter1.Elevator.{IS_SWITCH_ON}");
  179. //Is Moving
  180. _rtDataKeys.Add($"Loader1.Rotation.{IS_MOVING}");
  181. _rtDataKeys.Add($"Loader1.ShuttleA.{IS_MOVING}");
  182. _rtDataKeys.Add($"Loader1.TiltA.{IS_MOVING}");
  183. _rtDataKeys.Add($"Loader1.ShuttleB.{IS_MOVING}");
  184. _rtDataKeys.Add($"Loader1.TiltB.{IS_MOVING}");
  185. _rtDataKeys.Add($"SRD1.Arm.{IS_MOVING}");
  186. _rtDataKeys.Add($"SRD1.Rotation.{IS_MOVING}");
  187. _rtDataKeys.Add($"SRD2.Arm.{IS_MOVING}");
  188. _rtDataKeys.Add($"SRD2.Rotation.{IS_MOVING}");
  189. _rtDataKeys.Add($"PUF1.Vertical.{IS_MOVING}");
  190. _rtDataKeys.Add($"PUF1.Rotation.{IS_MOVING}");
  191. _rtDataKeys.Add($"PUF1.Flip.{IS_MOVING}");
  192. _rtDataKeys.Add($"PUF2.Vertical.{IS_MOVING}");
  193. _rtDataKeys.Add($"PUF2.Rotation.{IS_MOVING}");
  194. _rtDataKeys.Add($"PUF2.Flip.{IS_MOVING}");
  195. _rtDataKeys.Add($"Transporter2.Gantry.{IS_MOVING}");
  196. _rtDataKeys.Add($"Transporter2.Elevator.{IS_MOVING}");
  197. _rtDataKeys.Add($"Transporter1.Gantry.{IS_MOVING}");
  198. _rtDataKeys.Add($"Transporter1.Elevator.{IS_MOVING}");
  199. _rtDataKeys.Add($"SRD1.Rotation.{IS_MOVING}");
  200. _rtDataKeys.Add($"SRD1.Arm.{IS_MOVING}");
  201. _rtDataKeys.Add($"SRD2.Rotation.{IS_MOVING}");
  202. _rtDataKeys.Add($"SRD2.Arm.{IS_MOVING}");
  203. }
  204. /// <summary>
  205. /// 加载数据
  206. /// </summary>
  207. public void LoadData(string systemName)
  208. {
  209. InitialKeys();
  210. if (_timer == null)
  211. {
  212. _timer = new DispatcherTimer();
  213. _timer.Interval = TimeSpan.FromMilliseconds(200);
  214. _timer.Tick += Timer_Tick; ;
  215. }
  216. _timer.Start();
  217. }
  218. /// <summary>
  219. /// 定时器执行
  220. /// </summary>
  221. /// <param name="sender"></param>
  222. /// <param name="e"></param>
  223. /// <exception cref="NotImplementedException"></exception>
  224. private void Timer_Tick(object sender, EventArgs e)
  225. {
  226. if (_rtDataKeys.Count != 0)
  227. {
  228. _rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys);
  229. if (_rtDataValueDic != null)
  230. {
  231. CommonSafetyData = CommonFunction.GetValue<SafetyData>(_rtDataValueDic, $"Safety.{SAFETY_DATA}");
  232. IsLoaderRotationOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.Rotation.{IS_SWITCH_ON}");
  233. IsLoaderASwingOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.ShuttleA.{IS_SWITCH_ON}");
  234. IsLoaderATiltOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.TiltA.{IS_SWITCH_ON}");
  235. IsLoaderBSwingOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.ShuttleB.{IS_SWITCH_ON}");
  236. IsLoaderBTiltOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.TiltB.{IS_SWITCH_ON}");
  237. IsSrd1ArmOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD1.Arm.{IS_SWITCH_ON}");
  238. IsSrd1RotationOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD1.Rotation.{IS_SWITCH_ON}");
  239. IsSrd2ArmOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD2.Arm.{IS_SWITCH_ON}");
  240. IsSrd2RotationOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD2.Rotation.{IS_SWITCH_ON}");
  241. IsPuf1VerticalOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Vertical.{IS_SWITCH_ON}");
  242. IsPuf1RotationOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Rotation.{IS_SWITCH_ON}");
  243. IsPuf1FlipOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Flip.{IS_SWITCH_ON}");
  244. IsPuf2VerticalOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Vertical.{IS_SWITCH_ON}");
  245. IsPuf2RotationOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Rotation.{IS_SWITCH_ON}");
  246. IsPuf2FlipOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Flip.{IS_SWITCH_ON}");
  247. IsLoaderGantryOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter2.Gantry.{IS_SWITCH_ON}");
  248. IsLoaderElevatorOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter2.Elevator.{IS_SWITCH_ON}");
  249. IsProcessGantryOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter1.Gantry.{IS_SWITCH_ON}");
  250. IsProcessElevatorOn = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter1.Elevator.{IS_SWITCH_ON}");
  251. //判断电机Moving状态
  252. JudgeMoving();
  253. }
  254. }
  255. }
  256. /// <summary>
  257. /// 隐藏
  258. /// </summary>
  259. public void Hide()
  260. {
  261. if (_timer != null)
  262. {
  263. _timer.Stop();
  264. }
  265. }
  266. #region 指令Action
  267. /// <summary>
  268. /// Pause
  269. /// </summary>
  270. /// <param name="param"></param>
  271. private void PauseAction(object param)
  272. {
  273. throw new NotImplementedException();
  274. }
  275. /// <summary>
  276. /// Resume
  277. /// </summary>
  278. /// <param name="param"></param>
  279. private void ResumeAction(object param)
  280. {
  281. throw new NotImplementedException();
  282. }
  283. /// <summary>
  284. /// AllOn
  285. /// </summary>
  286. /// <param name="param"></param>
  287. private void AllOnAction(object param)
  288. {
  289. InvokeClient.Instance.Service.DoOperation("Safety.AllOnOperation");
  290. }
  291. /// <summary>
  292. /// Reset
  293. /// </summary>
  294. /// <param name="param"></param>
  295. private void ResetAction(object param)
  296. {
  297. InvokeClient.Instance.Service.DoOperation("Safety.ResetOperation");
  298. }
  299. /// <summary>
  300. /// LockLoaderDoors
  301. /// </summary>
  302. /// <param name="param"></param>
  303. private void LockLoaderDoorsAction(object param)
  304. {
  305. InvokeClient.Instance.Service.DoOperation("Safety.LockLoaderDoors");
  306. }
  307. /// <summary>
  308. /// UnlockLoaderDoors
  309. /// </summary>
  310. /// <param name="param"></param>
  311. private void UnlockLoaderDoorsAction(object param)
  312. {
  313. InvokeClient.Instance.Service.DoOperation("Safety.UnlockLoaderDoors");
  314. }
  315. /// <summary>
  316. /// LockBufferDoors
  317. /// </summary>
  318. /// <param name="param"></param>
  319. private void LockBufferDoorsAction(object param)
  320. {
  321. InvokeClient.Instance.Service.DoOperation("Safety.LockBufferDoors");
  322. }
  323. /// <summary>
  324. /// UnlockBufferDoors
  325. /// </summary>
  326. /// <param name="param"></param>
  327. private void UnlockBufferDoorsAction(object param)
  328. {
  329. InvokeClient.Instance.Service.DoOperation("Safety.UnlockBufferDoors");
  330. }
  331. /// <summary>
  332. /// LockProcessDoors
  333. /// </summary>
  334. /// <param name="param"></param>
  335. private void LockProcessDoorsAction(object param)
  336. {
  337. InvokeClient.Instance.Service.DoOperation("Safety.LockProcessDoors");
  338. }
  339. /// <summary>
  340. /// UnlockProcessDoors
  341. /// </summary>
  342. /// <param name="param"></param>
  343. private void UnlockProcessDoorsAction(object param)
  344. {
  345. InvokeClient.Instance.Service.DoOperation("Safety.UnlockProcessDoors");
  346. }
  347. /// <summary>
  348. /// 判断各个电机Moving状态
  349. /// </summary>
  350. /// <param name="param"></param>
  351. private void JudgeMoving()
  352. {
  353. //检测LoaderTransporter是否运动
  354. bool gantryMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter2.Gantry.{IS_MOVING}");
  355. bool elevatorMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter2.Elevator.{IS_MOVING}");
  356. if (gantryMoving || elevatorMoving)
  357. {
  358. IsLoaderTransMoving = true;
  359. }
  360. else
  361. {
  362. IsLoaderTransMoving = false;
  363. }
  364. //检测ProcessTransporter是否运动
  365. gantryMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter1.Gantry.{IS_MOVING}");
  366. elevatorMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Transporter1.Elevator.{IS_MOVING}");
  367. if (gantryMoving || elevatorMoving)
  368. {
  369. IsProcessTransMoving = true;
  370. }
  371. else
  372. {
  373. IsProcessTransMoving = false;
  374. }
  375. //检测Pufs是否运动
  376. bool puf1VerticalMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Vertical.{IS_MOVING}");
  377. bool puf1RotationMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Rotation.{IS_MOVING}");
  378. bool puf1FlipMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF1.Flip.{IS_MOVING}");
  379. bool puf2VerticalMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Vertical.{IS_MOVING}");
  380. bool puf2RotationMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Rotation.{IS_MOVING}");
  381. bool puf2FlipMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"PUF2.Flip.{IS_MOVING}");
  382. if (puf1VerticalMoving || puf1RotationMoving || puf1FlipMoving || puf2VerticalMoving || puf2RotationMoving || puf2FlipMoving)
  383. {
  384. IsPufsMoving = true;
  385. }
  386. else
  387. {
  388. IsPufsMoving = false;
  389. }
  390. //检测Loader是否运动
  391. bool loaderRotationMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.Rotation.{IS_MOVING}");
  392. bool loaderSwingAMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.ShuttleA.{IS_MOVING}");
  393. bool loaderSwingBMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.ShuttleB.{IS_MOVING}");
  394. bool loaderTiltAMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.TiltA.{IS_MOVING}");
  395. bool loaderTiltBMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"Loader1.TiltB.{IS_MOVING}");
  396. if (loaderRotationMoving || loaderSwingAMoving || loaderSwingBMoving || loaderTiltAMoving || loaderTiltBMoving)
  397. {
  398. IsLoaderMoving = true;
  399. }
  400. else
  401. {
  402. IsLoaderMoving = false;
  403. }
  404. //检测SRDs是否运动
  405. bool srd1RotationMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD1.Rotation.{IS_MOVING}");
  406. bool srd1ArmMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD1.Arm.{IS_MOVING}");
  407. bool srd2RotationMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD2.Rotation.{IS_MOVING}");
  408. bool srd2ArmMoving = CommonFunction.GetValue<bool>(_rtDataValueDic, $"SRD2.Arm.{IS_MOVING}");
  409. if (srd1RotationMoving || srd1ArmMoving || srd2RotationMoving || srd2ArmMoving)
  410. {
  411. IsSRDsMoving = true;
  412. }
  413. else
  414. {
  415. IsSRDsMoving = false;
  416. }
  417. }
  418. #endregion
  419. }
  420. }