SETMOperationViewModel.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383
  1. using Aitex.Core.Common.DeviceData;
  2. using Aitex.Core.RT.SCCore;
  3. using ExcelLibrary.BinaryFileFormat;
  4. using MECF.Framework.Common.DataCenter;
  5. using MECF.Framework.Common.OperationCenter;
  6. using Prism.Commands;
  7. using Prism.Mvvm;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Diagnostics;
  11. using System.Linq;
  12. using System.Reflection;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Windows.Threading;
  16. using Venus_MainPages.Unity;
  17. using Venus_Themes.CustomControls;
  18. namespace Venus_MainPages.ViewModels
  19. {
  20. public class SETMOperationViewModel : BindableBase
  21. {
  22. #region 私有变量
  23. private bool m_TMValveN2IsOpen;
  24. private bool m_TMSoftPumpIsOpen;
  25. private bool m_TMSoftVentIsOpen;
  26. private bool m_TMFastPumpIsOpen;
  27. private bool m_TMFastVentIsOpen;
  28. private bool m_VCESoftPumpIsOpen;
  29. private bool m_VCESoftVentIsOpen;
  30. private bool m_VCEFastPumpIsOpen;
  31. private bool m_VCEFastVentIsOpen;
  32. private bool m_PMAIsInstalled;
  33. private bool m_PMBIsInstalled;
  34. private bool m_PMCIsInstalled;
  35. private bool m_VCEIsInstalled;
  36. private bool m_VCEDoorIsOpen;
  37. private bool m_PMADoorIsOpen;
  38. private bool m_PMBDoorIsOpen;
  39. private bool m_PMCDoorIsOpen;
  40. private bool m_VCEOutDoorIsOpen;
  41. private bool m_TMIsVAC;
  42. private bool m_TMIsATM;
  43. private bool m_VCEIsVAC;
  44. private bool m_VCEIsATM;
  45. private int m_GoToSlotNumber;
  46. private bool m_TMIsOnline;
  47. private Dictionary<string, object> m_RtDataValues = new Dictionary<string, object>();
  48. private List<string> m_RtDataKeys = new List<string>();
  49. #endregion
  50. #region 暴露变量
  51. public bool TMValveN2IsOpen
  52. {
  53. get => m_TMValveN2IsOpen;
  54. set => SetProperty(ref m_TMValveN2IsOpen, value);
  55. }
  56. public bool TMSoftPumpIsOpen { get => m_TMSoftPumpIsOpen; set => SetProperty(ref m_TMSoftPumpIsOpen, value); }
  57. public bool TMSoftVentIsOpen { get => m_TMSoftVentIsOpen; set => SetProperty(ref m_TMSoftVentIsOpen, value); }
  58. public bool TMFastPumpIsOpen { get => m_TMFastPumpIsOpen; set => SetProperty(ref m_TMFastPumpIsOpen, value); }
  59. public bool TMFastVentIsOpen { get => m_TMFastVentIsOpen; set => SetProperty(ref m_TMFastVentIsOpen, value); }
  60. public bool VCESoftPumpIsOpen { get => m_VCESoftPumpIsOpen; set => SetProperty(ref m_VCESoftPumpIsOpen, value); }
  61. public bool VCESoftVentIsOpen { get => m_VCESoftVentIsOpen; set => SetProperty(ref m_VCESoftVentIsOpen, value); }
  62. public bool VCEFastPumpIsOpen { get => m_VCEFastPumpIsOpen; set => SetProperty(ref m_VCEFastPumpIsOpen, value); }
  63. public bool VCEFastVentIsOpen { get => m_VCEFastVentIsOpen; set => SetProperty(ref m_VCEFastVentIsOpen, value); }
  64. public bool TMIsVAC { get => m_TMIsVAC; set => SetProperty(ref m_TMIsVAC, value); }
  65. public bool TMIsATM { get => m_TMIsATM; set => SetProperty(ref m_TMIsATM, value); }
  66. public bool VCEIsVAC { get => m_VCEIsVAC; set => SetProperty(ref m_VCEIsVAC, value); }
  67. public bool VCEIsATM { get => m_VCEIsATM; set => SetProperty(ref m_VCEIsATM, value); }
  68. public bool PMAIsInstalled { get => m_PMAIsInstalled; set => SetProperty(ref m_PMAIsInstalled, value); }
  69. public bool PMBIsInstalled { get => m_PMBIsInstalled; set => SetProperty(ref m_PMBIsInstalled, value); }
  70. public bool PMCIsInstalled { get => m_PMCIsInstalled; set => SetProperty(ref m_PMCIsInstalled, value); }
  71. public bool VCEIsInstalled { get => m_VCEIsInstalled; set => SetProperty(ref m_VCEIsInstalled, value); }
  72. public bool TMIsOnline;
  73. public string _IsTmOnline;
  74. //public bool TMIsOnline { get => m_TMIsOnline; set => SetProperty(ref m_TMIsOnline, value); }
  75. public string IsTmOnline
  76. {
  77. get => _IsTmOnline;
  78. set => SetProperty(ref _IsTmOnline, value);
  79. }
  80. public int GoToSlotNumber { get => m_GoToSlotNumber; set => SetProperty(ref m_GoToSlotNumber, value); }
  81. public Dictionary<string, object> RtDataValues
  82. {
  83. get { return m_RtDataValues; }
  84. set { SetProperty(ref m_RtDataValues, value); }
  85. }
  86. //public bool TMIsOFFline => !TMIsOnline;
  87. public bool VCEDoorIsOpen { get => m_VCEDoorIsOpen; set => SetProperty(ref m_VCEDoorIsOpen, value); }
  88. public bool PMADoorIsOpen { get => m_PMADoorIsOpen; set => SetProperty(ref m_PMADoorIsOpen, value); }
  89. public bool PMBDoorIsOpen { get => m_PMBDoorIsOpen; set => SetProperty(ref m_PMBDoorIsOpen, value); }
  90. public bool PMCDoorIsOpen { get => m_PMCDoorIsOpen; set => SetProperty(ref m_PMCDoorIsOpen, value); }
  91. public bool VCEOutDoorIsOpen { get => m_VCEOutDoorIsOpen; set => SetProperty(ref m_VCEOutDoorIsOpen, value); }
  92. #endregion
  93. #region 构造函数
  94. public SETMOperationViewModel()
  95. {
  96. addDataKeys();
  97. string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
  98. PMAIsInstalled = allModules.Contains("PMA");
  99. PMBIsInstalled = allModules.Contains("PMB");
  100. PMCIsInstalled = allModules.Contains("PMC");
  101. VCEIsInstalled = allModules.Contains("VCE1");
  102. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  103. //2023/10/20 朱永吉 郭治川 取消N2 valve 动画保持流的状态
  104. TMValveN2IsOpen = true;
  105. TMSoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMSoftPumpValve.IsOpen");
  106. TMSoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMSoftVentValve.IsOpen");
  107. TMFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMFastPumpValve.IsOpen");
  108. TMFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMFastVentValve.IsOpen");
  109. VCESoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCESoftPumpValve.IsOpen");
  110. VCESoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCESoftVentValve.IsOpen");
  111. VCEFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEFastPumpValve.IsOpen");
  112. VCEFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEFastVentValve.IsOpen");
  113. TMIsVAC = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMVACSensor.Value");
  114. TMIsATM = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMIsATM");
  115. VCEIsVAC = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEVACSensor.Value");
  116. VCEIsATM = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEIsATM");
  117. VCEDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.VCESlitDoorClosed");
  118. PMADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMASlitDoorClosed");
  119. PMBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMBSlitDoorClosed");
  120. PMCDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMCSlitDoorClosed");
  121. VCEOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCE1.VCEOutDoorClosed");
  122. DispatcherTimer timer = new DispatcherTimer();
  123. timer.Interval = TimeSpan.FromSeconds(0.5);
  124. timer.Tick += timer_Tick;
  125. timer.Start();
  126. }
  127. #endregion
  128. #region 公共方法
  129. private DelegateCommand<object> _ControlValveCommand;
  130. public DelegateCommand<object> ControlValveCommand =>
  131. _ControlValveCommand ?? (_ControlValveCommand = new DelegateCommand<object>(OnControlValve));
  132. private DelegateCommand<object> _ControlSlitDoorCommand;
  133. public DelegateCommand<object> ControlSlitDoorCommand =>
  134. _ControlSlitDoorCommand ?? (_ControlSlitDoorCommand = new DelegateCommand<object>(OnControlSlitDoor));
  135. private DelegateCommand<object> _MapCommand;
  136. public DelegateCommand<object> MapCommand =>
  137. _MapCommand ?? (_MapCommand = new DelegateCommand<object>(OnMap));
  138. private DelegateCommand<object> _GoToLoadCommand;
  139. public DelegateCommand<object> GoToLoadCommand =>
  140. _GoToLoadCommand ?? (_GoToLoadCommand = new DelegateCommand<object>(OnGoToLoad));
  141. private DelegateCommand<object> _GoToSlotCommand;
  142. public DelegateCommand<object> GoToSlotCommand =>
  143. _GoToSlotCommand ?? (_GoToSlotCommand = new DelegateCommand<object>(OnGoToSlot));
  144. private DelegateCommand<object> _OpenDoorCommand;
  145. public DelegateCommand<object> OpenDoorCommand =>
  146. _OpenDoorCommand ?? (_OpenDoorCommand = new DelegateCommand<object>(OnOpenDoor));
  147. private DelegateCommand<object> _CloseDoorCommand;
  148. public DelegateCommand<object> CloseDoorCommand =>
  149. _CloseDoorCommand ?? (_CloseDoorCommand = new DelegateCommand<object>(OnCloseDoor));
  150. private DelegateCommand<object> _HOMECommand;
  151. public DelegateCommand<object> HOMECommand =>
  152. _HOMECommand ?? (_HOMECommand = new DelegateCommand<object>(OnHome));
  153. private DelegateCommand<object> _SETMPumpCommand;
  154. public DelegateCommand<object> SETMPumpCommand =>
  155. _SETMPumpCommand ?? (_SETMPumpCommand = new DelegateCommand<object>(OnSetSEPump));
  156. private DelegateCommand<object> _PumpDown;
  157. public DelegateCommand<object> PumpDown =>
  158. _PumpDown ?? (_PumpDown = new DelegateCommand<object>(OnPumpDown));
  159. private DelegateCommand<object> _Vent;
  160. public DelegateCommand<object> Vent =>
  161. _Vent ?? (_Vent = new DelegateCommand<object>(OnVent));
  162. private DelegateCommand _tmhome;
  163. public DelegateCommand TmHome =>
  164. _tmhome ?? (_tmhome = new DelegateCommand(tmhome));
  165. private DelegateCommand _abort;
  166. public DelegateCommand Abort =>
  167. _abort ?? (_abort = new DelegateCommand(abort));
  168. private DelegateCommand _TMSetOnline;
  169. public DelegateCommand TMSetOnline =>
  170. _TMSetOnline ?? (_TMSetOnline = new DelegateCommand(TmSetOnline));
  171. private DelegateCommand _TMSetOffline;
  172. public DelegateCommand TMSetOffline =>
  173. _TMSetOffline ?? (_TMSetOffline = new DelegateCommand(TmSetOffline));
  174. private DelegateCommand _VCEHome;
  175. public DelegateCommand VCEHome => _VCEHome ?? (_VCEHome = new DelegateCommand(vceHome));
  176. private DelegateCommand _VCEClear;
  177. public DelegateCommand VCEClear => _VCEClear ?? (_VCEClear = new DelegateCommand(vceClear));
  178. private DelegateCommand _VCEAbort;
  179. public DelegateCommand VCEAbort => _VCEAbort ?? (_VCEAbort = new DelegateCommand(vceAbort));
  180. #endregion
  181. #region 私有方法
  182. private void addDataKeys()
  183. {
  184. //m_RtDataKeys.Add($"TM.TMValveN2.IsOpen");
  185. m_RtDataKeys.Add($"TM.TMSoftPumpValve.IsOpen");
  186. m_RtDataKeys.Add($"TM.TMSoftVentValve.IsOpen");
  187. m_RtDataKeys.Add($"TM.TMFastPumpValve.IsOpen");
  188. m_RtDataKeys.Add($"TM.TMFastVentValve.IsOpen");
  189. m_RtDataKeys.Add($"TM.VCESoftPumpValve.IsOpen");
  190. m_RtDataKeys.Add($"TM.VCESoftVentValve.IsOpen");
  191. m_RtDataKeys.Add($"TM.VCEFastPumpValve.IsOpen");
  192. m_RtDataKeys.Add($"TM.VCEFastVentValve.IsOpen");
  193. m_RtDataKeys.Add($"TM.VCESlitDoorClosed");
  194. m_RtDataKeys.Add($"TM.PMASlitDoorClosed");
  195. m_RtDataKeys.Add($"TM.PMBSlitDoorClosed");
  196. m_RtDataKeys.Add($"TM.PMCSlitDoorClosed");
  197. m_RtDataKeys.Add($"TM.TMVACSensor.Value");
  198. m_RtDataKeys.Add($"TM.VCEVACSensor.Value");
  199. m_RtDataKeys.Add($"TM.TMIsATM");
  200. m_RtDataKeys.Add($"TM.VCEIsATM");
  201. m_RtDataKeys.Add($"TM.IsOnline");
  202. m_RtDataKeys.Add($"TM.IsOffline");
  203. m_RtDataKeys.Add($"TM.PumpIsRunning");
  204. //m_RtDataKeys.Add($"TM.VCEPipelinePressure.Value");
  205. m_RtDataKeys.Add($"TM.TMPipelinePressure.Value");
  206. m_RtDataKeys.Add($"TM.TMPressure.Value");
  207. m_RtDataKeys.Add($"TM.VCEPressure.Value");
  208. m_RtDataKeys.Add($"VCE1.VCEOutDoorClosed");
  209. m_RtDataKeys.Add($"TM.TM_MFC1.FeedBack");
  210. m_RtDataKeys.Add($"TM.TM_MFC1.SetPoint");
  211. }
  212. private void timer_Tick(object sender, EventArgs e)
  213. {
  214. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  215. //TMValveN2IsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMValveN2.IsOpen");
  216. TMSoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMSoftPumpValve.IsOpen");
  217. TMSoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMSoftVentValve.IsOpen");
  218. TMFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMFastPumpValve.IsOpen");
  219. TMFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMFastVentValve.IsOpen");
  220. VCESoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCESoftPumpValve.IsOpen");
  221. VCESoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCESoftVentValve.IsOpen");
  222. VCEFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEFastPumpValve.IsOpen");
  223. VCEFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEFastVentValve.IsOpen");
  224. VCEDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.VCESlitDoorClosed");
  225. PMADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMASlitDoorClosed");
  226. PMBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMBSlitDoorClosed");
  227. PMCDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMCSlitDoorClosed");
  228. VCEOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCE1.VCEOutDoorClosed");
  229. TMIsVAC = (CommonFunction.GetValue<int>(RtDataValues, "TM.TMPressure.Value") < Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"TM.VACTargetPressure"))) ;
  230. TMIsATM = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMIsATM");
  231. VCEIsVAC = (CommonFunction.GetValue<int>(RtDataValues, "TM.VCEPressure.Value") < Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"VCE1.VACTargetPressure")));
  232. VCEIsATM = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEIsATM");
  233. TMIsOnline = CommonFunction.GetValue<bool>(RtDataValues, "TM.IsOnline");
  234. if (TMIsOnline)
  235. {IsTmOnline = "online";}
  236. else
  237. {IsTmOnline = "offline";}
  238. }
  239. private void TmSetOnline()
  240. {
  241. InvokeClient.Instance.Service.DoOperation("TM.Online");
  242. }
  243. private void TmSetOffline()
  244. {
  245. InvokeClient.Instance.Service.DoOperation("TM.Offline");
  246. }
  247. private void vceHome()
  248. {
  249. InvokeClient.Instance.Service.DoOperation("VCE1.HOME");
  250. }
  251. private void vceClear()
  252. {
  253. InvokeClient.Instance.Service.DoOperation("VCE1.ClearError");
  254. }
  255. private void vceAbort()
  256. {
  257. InvokeClient.Instance.Service.DoOperation("VCE1.Abort");
  258. }
  259. private void tmhome()
  260. {
  261. InvokeClient.Instance.Service.DoOperation("TM.Home");
  262. }
  263. private void abort()
  264. {
  265. InvokeClient.Instance.Service.DoOperation("TM.Abort");
  266. }
  267. private void OnVent(object obj)
  268. {
  269. switch (obj.ToString())
  270. {
  271. case "VCE1":
  272. InvokeClient.Instance.Service.DoOperation("VCE1.Vent");
  273. break;
  274. case "TM":
  275. InvokeClient.Instance.Service.DoOperation("TM.Vent");
  276. break;
  277. }
  278. }
  279. private void OnPumpDown(object obj)
  280. {
  281. switch(obj.ToString())
  282. {
  283. case "VCE1":
  284. InvokeClient.Instance.Service.DoOperation("VCE1.PumpDown");
  285. break;
  286. case "TM":
  287. InvokeClient.Instance.Service.DoOperation("TM.PumpDown");
  288. break;
  289. }
  290. }
  291. private void OnSetSEPump(object obj)
  292. {
  293. bool.TryParse(obj.ToString(), out bool Open);
  294. InvokeClient.Instance.Service.DoOperation("TM.ControlPump", Open);
  295. }
  296. private void OnHome(object obj)
  297. {
  298. InvokeClient.Instance.Service.DoOperation("VCE1.HOME");
  299. }
  300. private void OnOpenDoor(object obj)
  301. {
  302. InvokeClient.Instance.Service.DoOperation("VCE1.DoorOpen");
  303. }
  304. private void OnCloseDoor(object obj)
  305. {
  306. InvokeClient.Instance.Service.DoOperation("VCE1.DoorClose");
  307. }
  308. private void OnMap(object obj)
  309. {
  310. InvokeClient.Instance.Service.DoOperation("VCE1.Map");
  311. }
  312. private void OnGoToLoad(object obj)
  313. {
  314. InvokeClient.Instance.Service.DoOperation("VCE1.GotoLP");
  315. }
  316. private void OnGoToSlot(object obj)
  317. {
  318. InvokeClient.Instance.Service.DoOperation("VCE1.Goto", GoToSlotNumber);
  319. }
  320. private void OnControlValve(object obj)
  321. {
  322. CommonValveControl commonValveControl = (CommonValveControl)obj;
  323. if (commonValveControl.IsCanEdit == true)
  324. {
  325. InvokeClient.Instance.Service.DoOperation($"TM.{commonValveControl.Tag}Valve.{AITValveOperation.GVTurnValve}", !commonValveControl.Status);
  326. }
  327. }
  328. private void OnControlSlitDoor(object obj)
  329. {
  330. string Module = obj.ToString().Split(',')[0];
  331. bool.TryParse(obj.ToString().Split(',')[1],out bool Open);
  332. InvokeClient.Instance.Service.DoOperation($"TM.SetSlitDoor", Module, Open);
  333. }
  334. #endregion
  335. }
  336. }