DETMOperationViewModel.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618
  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.Collections.ObjectModel;
  11. using System.Diagnostics;
  12. using System.Linq;
  13. using System.Reflection;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. using System.Windows.Threading;
  17. using Unity;
  18. using Venus_Core;
  19. using Venus_MainPages.Unity;
  20. using Venus_Themes.CustomControls;
  21. using Venus_Themes.UserControls;
  22. using VenusCommon;
  23. namespace Venus_MainPages.ViewModels
  24. {
  25. public class DETMOperationViewModel : BindableBase
  26. {
  27. #region 私有变量
  28. private bool m_TMValveN2IsOpen;
  29. private bool m_TMSoftPumpIsOpen;
  30. private bool m_TMSoftVentIsOpen;
  31. private bool m_TMFastPumpIsOpen;
  32. private bool m_TMFastVentIsOpen;
  33. private bool m_VCEASoftPumpIsOpen;
  34. private bool m_VCEASoftVentIsOpen;
  35. private bool m_VCEAFastPumpIsOpen;
  36. private bool m_VCEAFastVentIsOpen;
  37. private bool m_VCEBSoftPumpIsOpen;
  38. private bool m_VCEBSoftVentIsOpen;
  39. private bool m_VCEBFastPumpIsOpen;
  40. private bool m_VCEBFastVentIsOpen;
  41. private bool m_PMAIsInstalled;
  42. private bool m_PMBIsInstalled;
  43. private bool m_PMCIsInstalled;
  44. private bool m_PMDIsInstalled;
  45. private bool m_VCEAIsInstalled;
  46. private bool m_VCEBIsInstalled;
  47. private bool m_VCEADoorIsOpen;
  48. private bool m_VCEBDoorIsOpen;
  49. private bool m_PMADoorIsOpen;
  50. private bool m_PMBDoorIsOpen;
  51. private bool m_PMCDoorIsOpen;
  52. private bool m_PMDDoorIsOpen;
  53. private bool m_VCEAOutDoorIsOpen;
  54. private bool m_VCEBOutDoorIsOpen;
  55. private bool m_TMIsVAC;
  56. private bool m_TMIsATM;
  57. private bool m_VCEAIsVAC;
  58. private bool m_VCEAIsATM;
  59. private bool m_VCEBIsVAC;
  60. private bool m_VCEBIsATM;
  61. private int m_GoToSlotNumber;
  62. //private bool m_TMIsOnline;
  63. private string m_TMLastLeakCheck;
  64. private string m_VCEALastLeakCheck;
  65. private string m_VCEBLastLeakCheck;
  66. private Dictionary<string, object> m_RtDataValues = new Dictionary<string, object>();
  67. private List<string> m_RtDataKeys = new List<string>();
  68. #endregion
  69. #region 暴露变量
  70. private ObservableCollection<PMLeakCheckResult> m_TMLeakCheckResultList = new ObservableCollection<PMLeakCheckResult>();
  71. public ObservableCollection<PMLeakCheckResult> TMLeakCheckResultList
  72. {
  73. get { return m_TMLeakCheckResultList; }
  74. set { SetProperty(ref m_TMLeakCheckResultList, value); }
  75. }
  76. private ObservableCollection<PMLeakCheckResult> m_VCEALeakCheckResultList = new ObservableCollection<PMLeakCheckResult>();
  77. public ObservableCollection<PMLeakCheckResult> VCEALeakCheckResultList
  78. {
  79. get { return m_VCEALeakCheckResultList; }
  80. set { SetProperty(ref m_VCEALeakCheckResultList, value); }
  81. }
  82. private ObservableCollection<PMLeakCheckResult> m_VCEBLeakCheckResultList = new ObservableCollection<PMLeakCheckResult>();
  83. public ObservableCollection<PMLeakCheckResult> VCEBLeakCheckResultList
  84. {
  85. get { return m_VCEBLeakCheckResultList; }
  86. set { SetProperty(ref m_VCEBLeakCheckResultList, value); }
  87. }
  88. private PMLeakCheckResult m_VCEACurrentLeakCheckResultItem = new PMLeakCheckResult();
  89. public PMLeakCheckResult VCEACurrentLeakCheckResultItem
  90. {
  91. get { return m_VCEACurrentLeakCheckResultItem; }
  92. set { SetProperty(ref m_VCEACurrentLeakCheckResultItem, value); }
  93. }
  94. private PMLeakCheckResult m_VCEBCurrentLeakCheckResultItem = new PMLeakCheckResult();
  95. public PMLeakCheckResult VCEBCurrentLeakCheckResultItem
  96. {
  97. get { return m_VCEBCurrentLeakCheckResultItem; }
  98. set { SetProperty(ref m_VCEBCurrentLeakCheckResultItem, value); }
  99. }
  100. private PMLeakCheckResult m_TMCurrentLeakCheckResultItem = new PMLeakCheckResult();
  101. public PMLeakCheckResult TMCurrentLeakCheckResultItem
  102. {
  103. get { return m_TMCurrentLeakCheckResultItem; }
  104. set { SetProperty(ref m_TMCurrentLeakCheckResultItem, value); }
  105. }
  106. private bool _TMCheckFlag = false;
  107. private string m_TMCurrentState;
  108. public string TMCurrentState
  109. {
  110. get { return m_TMCurrentState; }
  111. set
  112. {
  113. if (m_TMCurrentState == null && !_TMCheckFlag)
  114. {
  115. _TMCheckFlag = true;
  116. var AllLeakCheckDa = QueryDataClient.Instance.Service.GetPMLeakCheckResult("TM");
  117. if (AllLeakCheckDa != null)
  118. {
  119. TMLeakCheckResultList = new ObservableCollection<PMLeakCheckResult>(AllLeakCheckDa);
  120. if (TMLeakCheckResultList.Count > 0)
  121. TMLastLeakCheck = TMLeakCheckResultList[0].LeakRate.ToString("0.00") + " mTorr/min";
  122. }
  123. }
  124. if ((m_TMCurrentState == "Leakchecking") && value == "Idle")
  125. {
  126. var AllLeakCheckDa = QueryDataClient.Instance.Service.GetPMLeakCheckResult("TM");
  127. if (AllLeakCheckDa != null)
  128. {
  129. TMLeakCheckResultList = new ObservableCollection<PMLeakCheckResult>(AllLeakCheckDa);
  130. if (TMLeakCheckResultList.Count > 0)
  131. TMLastLeakCheck = TMLeakCheckResultList[0].LeakRate.ToString("0.00") + " mTorr/min";
  132. }
  133. }
  134. SetProperty(ref m_TMCurrentState, value);
  135. }
  136. }
  137. public string TMLastLeakCheck
  138. {
  139. get { return m_TMLastLeakCheck; }
  140. set { SetProperty(ref m_TMLastLeakCheck, value); }
  141. }
  142. public string VCEALastLeakCheck
  143. {
  144. get { return m_VCEALastLeakCheck; }
  145. set { SetProperty(ref m_VCEALastLeakCheck, value); }
  146. }
  147. public string VCEBLastLeakCheck
  148. {
  149. get { return m_VCEBLastLeakCheck; }
  150. set { SetProperty(ref m_VCEBLastLeakCheck, value); }
  151. }
  152. private bool _VCEACheckFlag = false;
  153. private string m_VCEACurrentState;
  154. public string VCEACurrentState
  155. {
  156. get { return m_VCEACurrentState; }
  157. set
  158. {
  159. if (m_VCEACurrentState == null && !_VCEACheckFlag)
  160. {
  161. _VCEACheckFlag = true;
  162. var AllLeakCheckDa = QueryDataClient.Instance.Service.GetPMLeakCheckResult("VCEA");
  163. if (AllLeakCheckDa != null)
  164. {
  165. VCEALeakCheckResultList = new ObservableCollection<PMLeakCheckResult>(AllLeakCheckDa);
  166. if (VCEALeakCheckResultList.Count > 0)
  167. VCEALastLeakCheck = VCEALeakCheckResultList[0].LeakRate.ToString("0.00") + " mTorr/min";
  168. }
  169. }
  170. if ((m_VCEACurrentState == "LeakChecking") && value == "Idle")
  171. {
  172. var AllLeakCheckDa = QueryDataClient.Instance.Service.GetPMLeakCheckResult("VCEA");
  173. if (AllLeakCheckDa != null)
  174. {
  175. VCEALeakCheckResultList = new ObservableCollection<PMLeakCheckResult>(AllLeakCheckDa);
  176. if (VCEALeakCheckResultList.Count > 0)
  177. VCEALastLeakCheck = VCEALeakCheckResultList[0].LeakRate.ToString("0.00") + " mTorr/min";
  178. }
  179. }
  180. SetProperty(ref m_VCEACurrentState, value);
  181. }
  182. }
  183. private bool _VCEBCheckFlag = false;
  184. private string m_VCEBCurrentState;
  185. public string VCEBCurrentState
  186. {
  187. get { return m_VCEBCurrentState; }
  188. set
  189. {
  190. if (m_VCEBCurrentState == null && !_VCEBCheckFlag)
  191. {
  192. _VCEBCheckFlag = true;
  193. var AllLeakCheckDa = QueryDataClient.Instance.Service.GetPMLeakCheckResult("VCEB");
  194. if (AllLeakCheckDa != null)
  195. {
  196. VCEBLeakCheckResultList = new ObservableCollection<PMLeakCheckResult>(AllLeakCheckDa);
  197. if (VCEBLeakCheckResultList.Count > 0)
  198. VCEBLastLeakCheck = VCEBLeakCheckResultList[0].LeakRate.ToString("0.00") + " mTorr/min";
  199. }
  200. }
  201. if ((m_VCEBCurrentState == "LeakChecking") && value == "Idle")
  202. {
  203. var AllLeakCheckDa = QueryDataClient.Instance.Service.GetPMLeakCheckResult("VCEB");
  204. if (AllLeakCheckDa != null)
  205. {
  206. VCEBLeakCheckResultList = new ObservableCollection<PMLeakCheckResult>(AllLeakCheckDa);
  207. if (VCEBLeakCheckResultList.Count > 0 )
  208. VCEBLastLeakCheck = VCEBLeakCheckResultList[0].LeakRate.ToString("0.00") + " mTorr/min";
  209. }
  210. }
  211. SetProperty(ref m_VCEBCurrentState, value);
  212. }
  213. }
  214. public bool TMValveN2IsOpen
  215. {
  216. get => m_TMValveN2IsOpen;
  217. set => SetProperty(ref m_TMValveN2IsOpen, value);
  218. }
  219. public bool TMSoftPumpIsOpen { get => m_TMSoftPumpIsOpen; set => SetProperty(ref m_TMSoftPumpIsOpen, value); }
  220. public bool TMSoftVentIsOpen { get => m_TMSoftVentIsOpen; set => SetProperty(ref m_TMSoftVentIsOpen, value); }
  221. public bool TMFastPumpIsOpen { get => m_TMFastPumpIsOpen; set => SetProperty(ref m_TMFastPumpIsOpen, value); }
  222. public bool TMFastVentIsOpen { get => m_TMFastVentIsOpen; set => SetProperty(ref m_TMFastVentIsOpen, value); }
  223. public bool VCEASoftPumpIsOpen { get => m_VCEASoftPumpIsOpen; set => SetProperty(ref m_VCEASoftPumpIsOpen, value); }
  224. public bool VCEASoftVentIsOpen { get => m_VCEASoftVentIsOpen; set => SetProperty(ref m_VCEASoftVentIsOpen, value); }
  225. public bool VCEAFastPumpIsOpen { get => m_VCEAFastPumpIsOpen; set => SetProperty(ref m_VCEAFastPumpIsOpen, value); }
  226. public bool VCEAFastVentIsOpen { get => m_VCEAFastVentIsOpen; set => SetProperty(ref m_VCEAFastVentIsOpen, value); }
  227. public bool VCEBSoftPumpIsOpen { get => m_VCEBSoftPumpIsOpen; set => SetProperty(ref m_VCEBSoftPumpIsOpen, value); }
  228. public bool VCEBSoftVentIsOpen { get => m_VCEBSoftVentIsOpen; set => SetProperty(ref m_VCEBSoftVentIsOpen, value); }
  229. public bool VCEBFastPumpIsOpen { get => m_VCEBFastPumpIsOpen; set => SetProperty(ref m_VCEBFastPumpIsOpen, value); }
  230. public bool VCEBFastVentIsOpen { get => m_VCEBFastVentIsOpen; set => SetProperty(ref m_VCEBFastVentIsOpen, value); }
  231. public bool TMIsVAC { get => m_TMIsVAC; set => SetProperty(ref m_TMIsVAC, value); }
  232. public bool TMIsATM { get => m_TMIsATM; set => SetProperty(ref m_TMIsATM, value); }
  233. public bool VCEAIsVAC { get => m_VCEAIsVAC; set => SetProperty(ref m_VCEAIsVAC, value); }
  234. public bool VCEBIsVAC { get => m_VCEBIsVAC; set => SetProperty(ref m_VCEBIsVAC, value); }
  235. public bool VCEAIsATM { get => m_VCEAIsATM; set => SetProperty(ref m_VCEAIsATM, value); }
  236. public bool VCEBIsATM { get => m_VCEBIsATM; set => SetProperty(ref m_VCEBIsATM, value); }
  237. public bool PMAIsInstalled { get => m_PMAIsInstalled; set => SetProperty(ref m_PMAIsInstalled, value); }
  238. public bool PMBIsInstalled { get => m_PMBIsInstalled; set => SetProperty(ref m_PMBIsInstalled, value); }
  239. public bool PMCIsInstalled { get => m_PMCIsInstalled; set => SetProperty(ref m_PMCIsInstalled, value); }
  240. public bool PMDIsInstalled { get => m_PMDIsInstalled; set => SetProperty(ref m_PMDIsInstalled, value); }
  241. public bool VCEAIsInstalled { get => m_VCEAIsInstalled; set => SetProperty(ref m_VCEAIsInstalled, value); }
  242. public bool VCEBIsInstalled { get => m_VCEBIsInstalled; set => SetProperty(ref m_VCEBIsInstalled, value); }
  243. public int GoToSlotNumber { get => m_GoToSlotNumber; set => SetProperty(ref m_GoToSlotNumber, value); }
  244. public Dictionary<string, object> RtDataValues
  245. {
  246. get { return m_RtDataValues; }
  247. set { SetProperty(ref m_RtDataValues, value); }
  248. }
  249. //public bool TMIsOFFline => !TMIsOnline;
  250. public bool VCEADoorIsOpen { get => m_VCEADoorIsOpen; set => SetProperty(ref m_VCEADoorIsOpen, value); }
  251. public bool VCEBDoorIsOpen { get => m_VCEBDoorIsOpen; set => SetProperty(ref m_VCEBDoorIsOpen, value); }
  252. public bool PMADoorIsOpen { get => m_PMADoorIsOpen; set => SetProperty(ref m_PMADoorIsOpen, value); }
  253. public bool PMBDoorIsOpen { get => m_PMBDoorIsOpen; set => SetProperty(ref m_PMBDoorIsOpen, value); }
  254. public bool PMCDoorIsOpen { get => m_PMCDoorIsOpen; set => SetProperty(ref m_PMCDoorIsOpen, value); }
  255. public bool PMDDoorIsOpen { get => m_PMDDoorIsOpen; set => SetProperty(ref m_PMDDoorIsOpen, value); }
  256. public bool VCEAOutDoorIsOpen { get => m_VCEAOutDoorIsOpen; set => SetProperty(ref m_VCEAOutDoorIsOpen, value); }
  257. public bool VCEBOutDoorIsOpen { get => m_VCEBOutDoorIsOpen; set => SetProperty(ref m_VCEBOutDoorIsOpen, value); }
  258. #endregion
  259. #region 构造函数
  260. public DETMOperationViewModel()
  261. {
  262. addDataKeys();
  263. string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
  264. PMAIsInstalled = allModules.Contains("PMA");
  265. PMBIsInstalled = allModules.Contains("PMB");
  266. PMCIsInstalled = allModules.Contains("PMC");
  267. PMDIsInstalled = allModules.Contains("PMD");
  268. VCEAIsInstalled = allModules.Contains("VCEA");
  269. VCEBIsInstalled = allModules.Contains("VCEB");
  270. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  271. //2023/10/20 朱永吉 郭治川 取消N2 valve 动画保持流的状态
  272. TMValveN2IsOpen = true;
  273. TMSoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMSoftPumpValve.IsOpen");
  274. TMSoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMSoftVentValve.IsOpen");
  275. TMFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMFastPumpValve.IsOpen");
  276. TMFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMFastVentValve.IsOpen");
  277. VCEASoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEASoftPumpValve.IsOpen");
  278. VCEASoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEASoftVentValve.IsOpen");
  279. VCEAFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEAFastPumpValve.IsOpen");
  280. VCEAFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEAFastVentValve.IsOpen");
  281. VCEBSoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBSoftPumpValve.IsOpen");
  282. VCEBSoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBSoftVentValve.IsOpen");
  283. VCEBFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBFastPumpValve.IsOpen");
  284. VCEBFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBFastVentValve.IsOpen");
  285. TMIsVAC = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMVACSensor.Value");
  286. TMIsATM = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMIsATM");
  287. //VCEAIsVAC = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEAVACSensor.Value");
  288. //VCEBIsVAC = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEAVACSensor.Value");
  289. VCEAIsATM = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEAIsATM");
  290. VCEBIsATM = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBIsATM");
  291. VCEADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEASlitDoorClosed");
  292. VCEBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBSlitDoorClosed");
  293. PMADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMASlitDoorClosed");
  294. PMBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMBSlitDoorClosed");
  295. PMCDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMCSlitDoorClosed");
  296. PMDDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMDSlitDoorClosed");
  297. VCEAOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCEA.VCEOutDoorClosed");
  298. VCEBOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCEB.VCEOutDoorClosed");
  299. DispatcherTimer timer = new DispatcherTimer();
  300. timer.Interval = TimeSpan.FromSeconds(0.5);
  301. timer.Tick += timer_Tick;
  302. timer.Start();
  303. }
  304. #endregion
  305. #region 公共方法
  306. private DelegateCommand<object> _ControlValveCommand;
  307. public DelegateCommand<object> ControlValveCommand =>
  308. _ControlValveCommand ?? (_ControlValveCommand = new DelegateCommand<object>(OnControlValve));
  309. private DelegateCommand<object> _LeakCheck;
  310. public DelegateCommand<object> LeakCheck =>
  311. _LeakCheck ?? (_LeakCheck = new DelegateCommand<object>(OnLeakCheck));
  312. private DelegateCommand<object> _ControlSlitDoorCommand;
  313. public DelegateCommand<object> ControlSlitDoorCommand =>
  314. _ControlSlitDoorCommand ?? (_ControlSlitDoorCommand = new DelegateCommand<object>(OnControlSlitDoor));
  315. private DelegateCommand<object> _MapCommand;
  316. public DelegateCommand<object> MapCommand =>
  317. _MapCommand ?? (_MapCommand = new DelegateCommand<object>(OnMap));
  318. private DelegateCommand<object> _GoToLoadCommand;
  319. public DelegateCommand<object> GoToLoadCommand =>
  320. _GoToLoadCommand ?? (_GoToLoadCommand = new DelegateCommand<object>(OnGoToLoad));
  321. private DelegateCommand<object> _GoToSlotCommand;
  322. public DelegateCommand<object> GoToSlotCommand =>
  323. _GoToSlotCommand ?? (_GoToSlotCommand = new DelegateCommand<object>(OnGoToSlot));
  324. private DelegateCommand<object> _OpenDoorCommand;
  325. public DelegateCommand<object> OpenDoorCommand =>
  326. _OpenDoorCommand ?? (_OpenDoorCommand = new DelegateCommand<object>(OnOpenDoor));
  327. private DelegateCommand<object> _CloseDoorCommand;
  328. public DelegateCommand<object> CloseDoorCommand =>
  329. _CloseDoorCommand ?? (_CloseDoorCommand = new DelegateCommand<object>(OnCloseDoor));
  330. private DelegateCommand<object> _HOMECommand;
  331. public DelegateCommand<object> HOMECommand =>
  332. _HOMECommand ?? (_HOMECommand = new DelegateCommand<object>(OnHome));
  333. private DelegateCommand<object> _DETMPumpCommand;
  334. public DelegateCommand<object> DETMPumpCommand =>
  335. _DETMPumpCommand ?? (_DETMPumpCommand = new DelegateCommand<object>(OnSetDEPump));
  336. private DelegateCommand<object> _VCEAPumpCommand;
  337. public DelegateCommand<object> VCEAPumpCommand =>
  338. _VCEAPumpCommand ?? (_VCEAPumpCommand = new DelegateCommand<object>(OnSetVCEAPump));
  339. private DelegateCommand<object> _PumpDown;
  340. public DelegateCommand<object> PumpDown =>
  341. _PumpDown ?? (_PumpDown = new DelegateCommand<object>(OnPumpDown));
  342. private DelegateCommand<object> _Vent;
  343. public DelegateCommand<object> Vent =>
  344. _Vent ?? (_Vent = new DelegateCommand<object>(OnVent));
  345. private DelegateCommand _tmhome;
  346. public DelegateCommand TmHome =>
  347. _tmhome ?? (_tmhome = new DelegateCommand(tmhome));
  348. private DelegateCommand _abort;
  349. public DelegateCommand Abort =>
  350. _abort ?? (_abort = new DelegateCommand(abort));
  351. private DelegateCommand _TMSetOnline;
  352. public DelegateCommand TMSetOnline =>
  353. _TMSetOnline ?? (_TMSetOnline = new DelegateCommand(TmSetOnline));
  354. private DelegateCommand _TMSetOffline;
  355. public DelegateCommand TMSetOffline =>
  356. _TMSetOffline ?? (_TMSetOffline = new DelegateCommand(TmSetOffline));
  357. private DelegateCommand<object> _VCEHome;
  358. public DelegateCommand<object> VCEHome => _VCEHome ?? (_VCEHome = new DelegateCommand<object>(vceHome));
  359. private DelegateCommand<object> _VCEClear;
  360. public DelegateCommand<object> VCEClear => _VCEClear ?? (_VCEClear = new DelegateCommand<object>(vceClear));
  361. private DelegateCommand<object> _VCEAbort;
  362. public DelegateCommand<object> VCEAbort => _VCEAbort ?? (_VCEAbort = new DelegateCommand<object>(vceAbort));
  363. private DelegateCommand<object> _VCESetOnline;
  364. public DelegateCommand<object> VCESetOnline => _VCESetOnline ?? (_VCESetOnline = new DelegateCommand<object>(vceOnline));
  365. private DelegateCommand<object> _VCESetOffline;
  366. public DelegateCommand<object> VCESetOffline => _VCESetOffline ?? (_VCESetOffline = new DelegateCommand<object>(vceOffline));
  367. #endregion
  368. #region 私有方法
  369. private void addDataKeys()
  370. {
  371. m_RtDataKeys.Add($"TM.TMSoftPumpValve.IsOpen");
  372. m_RtDataKeys.Add($"TM.TMSoftVentValve.IsOpen");
  373. m_RtDataKeys.Add($"TM.TMFastPumpValve.IsOpen");
  374. m_RtDataKeys.Add($"TM.TMFastVentValve.IsOpen");
  375. m_RtDataKeys.Add($"TM.VCEASoftPumpValve.IsOpen");
  376. m_RtDataKeys.Add($"TM.VCEBSoftPumpValve.IsOpen");
  377. m_RtDataKeys.Add($"TM.VCEASoftVentValve.IsOpen");
  378. m_RtDataKeys.Add($"TM.VCEBSoftVentValve.IsOpen");
  379. m_RtDataKeys.Add($"TM.VCEAFastPumpValve.IsOpen");
  380. m_RtDataKeys.Add($"TM.VCEBFastPumpValve.IsOpen");
  381. m_RtDataKeys.Add($"TM.VCEAFastVentValve.IsOpen");
  382. m_RtDataKeys.Add($"TM.VCEBFastVentValve.IsOpen");
  383. m_RtDataKeys.Add($"TM.VCEASlitDoorClosed");
  384. m_RtDataKeys.Add($"TM.VCEBSlitDoorClosed");
  385. m_RtDataKeys.Add($"TM.PMASlitDoorClosed");
  386. m_RtDataKeys.Add($"TM.PMBSlitDoorClosed");
  387. m_RtDataKeys.Add($"TM.PMCSlitDoorClosed");
  388. m_RtDataKeys.Add($"TM.PMDSlitDoorClosed");
  389. m_RtDataKeys.Add($"TM.TMVACSensor.Value");
  390. m_RtDataKeys.Add($"LP1.CassettePlaced");
  391. m_RtDataKeys.Add($"LP2.CassettePlaced");
  392. m_RtDataKeys.Add($"TM.TMIsATM");
  393. m_RtDataKeys.Add($"TM.VCEAIsATM");
  394. m_RtDataKeys.Add($"TM.VCEBIsATM");
  395. m_RtDataKeys.Add($"TM.IsOnline");
  396. m_RtDataKeys.Add($"TM.IsOffline");
  397. m_RtDataKeys.Add($"TM.FsmState");
  398. m_RtDataKeys.Add($"VCEA.FsmState");
  399. m_RtDataKeys.Add($"VCEB.FsmState");
  400. m_RtDataKeys.Add($"VCEA.IsOnline");
  401. m_RtDataKeys.Add($"VCEA.IsOffline");
  402. m_RtDataKeys.Add($"VCEB.IsOnline");
  403. m_RtDataKeys.Add($"VCEB.IsOffline");
  404. m_RtDataKeys.Add($"TM.PumpIsRunning");
  405. m_RtDataKeys.Add($"VCEA.PumpIsRunning");
  406. m_RtDataKeys.Add($"TM.TMPipelinePressure.Value");
  407. m_RtDataKeys.Add($"TM.VCEPipelinePressure.Value");
  408. m_RtDataKeys.Add($"TM.TMPressure.Value");
  409. m_RtDataKeys.Add($"TM.VCEAPressure.Value");
  410. m_RtDataKeys.Add($"TM.VCEBPressure.Value");
  411. m_RtDataKeys.Add($"VCEA.VCEOutDoorClosed");
  412. m_RtDataKeys.Add($"VCEB.VCEOutDoorClosed");
  413. m_RtDataKeys.Add($"TM.TM_MFC1.FeedBack");
  414. m_RtDataKeys.Add($"TM.TM_MFC1.SetPoint");
  415. }
  416. private void timer_Tick(object sender, EventArgs e)
  417. {
  418. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  419. TMSoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMSoftPumpValve.IsOpen");
  420. TMSoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMSoftVentValve.IsOpen");
  421. TMFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMFastPumpValve.IsOpen");
  422. TMFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMFastVentValve.IsOpen");
  423. VCEASoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEASoftPumpValve.IsOpen");
  424. VCEASoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEASoftVentValve.IsOpen");
  425. VCEAFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEAFastPumpValve.IsOpen");
  426. VCEAFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEAFastVentValve.IsOpen");
  427. VCEBSoftPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBSoftPumpValve.IsOpen");
  428. VCEBSoftVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBSoftVentValve.IsOpen");
  429. VCEBFastPumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBFastPumpValve.IsOpen");
  430. VCEBFastVentIsOpen = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBFastVentValve.IsOpen");
  431. VCEADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEASlitDoorClosed");
  432. VCEBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBSlitDoorClosed");
  433. PMADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMASlitDoorClosed");
  434. PMBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMBSlitDoorClosed");
  435. PMCDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "TM.PMCSlitDoorClosed");
  436. VCEAOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCEA.VCEAOutDoorClosed");
  437. VCEBOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCEB.VCEBOutDoorClosed");
  438. TMIsVAC = (CommonFunction.GetValue<int>(RtDataValues, "TM.TMPressure.Value") < Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"TM.VACTargetPressure")));
  439. TMIsATM = CommonFunction.GetValue<bool>(RtDataValues, "TM.TMIsATM");
  440. VCEAIsVAC = (CommonFunction.GetValue<int>(RtDataValues, "TM.VCEAPressure.Value") < Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"VCEA.VACTargetPressure")));
  441. VCEBIsVAC = (CommonFunction.GetValue<int>(RtDataValues, "TM.VCEBPressure.Value") < Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"VCEB.VACTargetPressure")));
  442. VCEAIsATM = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEAIsATM");
  443. VCEBIsATM = CommonFunction.GetValue<bool>(RtDataValues, "TM.VCEBIsATM");
  444. TMCurrentState = CommonFunction.GetValue<string>(RtDataValues, "TM.FsmState");
  445. VCEACurrentState = CommonFunction.GetValue<string>(RtDataValues, "VCEA.FsmState");
  446. VCEBCurrentState = CommonFunction.GetValue<string>(RtDataValues, "VCEB.FsmState");
  447. }
  448. private void TmSetOnline()
  449. {
  450. InvokeClient.Instance.Service.DoOperation("TM.Online");
  451. }
  452. private void TmSetOffline()
  453. {
  454. InvokeClient.Instance.Service.DoOperation("TM.Offline");
  455. }
  456. private void vceHome(object obj)
  457. {
  458. InvokeClient.Instance.Service.DoOperation($"{obj}.HOME");
  459. }
  460. private void vceClear(object obj)
  461. {
  462. InvokeClient.Instance.Service.DoOperation($"{obj}.ClearError");
  463. }
  464. private void vceAbort(object obj)
  465. {
  466. InvokeClient.Instance.Service.DoOperation($"{obj}.Abort");
  467. }
  468. private void tmhome()
  469. {
  470. InvokeClient.Instance.Service.DoOperation("TM.Home");
  471. }
  472. private void abort()
  473. {
  474. InvokeClient.Instance.Service.DoOperation("TM.Abort");
  475. }
  476. private void OnVent(object obj)
  477. {
  478. InvokeClient.Instance.Service.DoOperation($"{obj}.Vent");
  479. }
  480. private void OnPumpDown(object obj)
  481. {
  482. InvokeClient.Instance.Service.DoOperation($"{obj}.PumpDown");
  483. }
  484. private void OnSetDEPump(object obj)
  485. {
  486. bool.TryParse(obj.ToString(), out bool Open);
  487. InvokeClient.Instance.Service.DoOperation("TM.ControlPump", Open);
  488. }
  489. private void OnSetVCEAPump(object obj)
  490. {
  491. bool.TryParse(obj.ToString(), out bool Open);
  492. InvokeClient.Instance.Service.DoOperation("VCEA.ControlPump", Open);
  493. }
  494. private void OnHome(object chamber)
  495. {
  496. InvokeClient.Instance.Service.DoOperation($"{chamber}.HOME");
  497. }
  498. private void OnOpenDoor(object chamber)
  499. {
  500. InvokeClient.Instance.Service.DoOperation($"{chamber}.DoorOpen");
  501. }
  502. private void OnCloseDoor(object chamber)
  503. {
  504. InvokeClient.Instance.Service.DoOperation($"{chamber}.DoorClose");
  505. }
  506. private void OnMap(object chamber)
  507. {
  508. InvokeClient.Instance.Service.DoOperation($"{chamber}.Map");
  509. }
  510. private void OnGoToLoad(object chamber)
  511. {
  512. InvokeClient.Instance.Service.DoOperation($"{chamber}.GotoLP");
  513. }
  514. private void OnGoToSlot(object chamber)
  515. {
  516. InvokeClient.Instance.Service.DoOperation($"{chamber}.Goto", GoToSlotNumber);
  517. }
  518. private void OnControlValve(object obj)
  519. {
  520. CommonValveControl commonValveControl = (CommonValveControl)obj;
  521. if (commonValveControl.IsCanEdit == true)
  522. {
  523. InvokeClient.Instance.Service.DoOperation($"TM.{commonValveControl.Tag}Valve.{AITValveOperation.GVTurnValve}", !commonValveControl.Status);
  524. }
  525. }
  526. private void vceOnline(object chamber)
  527. {
  528. InvokeClient.Instance.Service.DoOperation($"{chamber}.Online");
  529. }
  530. private void vceOffline(object chamber)
  531. {
  532. InvokeClient.Instance.Service.DoOperation($"{chamber}.Offline");
  533. }
  534. public void OnLeakCheck(object chamber)
  535. {
  536. InvokeClient.Instance.Service.DoOperation($"{chamber}.LeakCheck", chamber);
  537. }
  538. private void OnControlSlitDoor(object obj)
  539. {
  540. string Module = obj.ToString().Split(',')[0];
  541. bool.TryParse(obj.ToString().Split(',')[1], out bool Open);
  542. InvokeClient.Instance.Service.DoOperation($"TM.SetSlitDoor", Module, Open);
  543. }
  544. #endregion
  545. }
  546. }