PlatformViewModel.cs 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475
  1. //using Aitex.Core.Common;
  2. using Aitex.Core.Common.DeviceData;
  3. using log4net.Util.TypeConverters;
  4. using MECF.Framework.Common.CommonData.DeviceData;
  5. using MECF.Framework.Common.DataCenter;
  6. using MECF.Framework.Common.OperationCenter;
  7. using OpenSEMI.ClientBase;
  8. using Prism.Commands;
  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;
  16. using System.Windows.Threading;
  17. using CyberX8_Core;
  18. using CyberX8_MainPages.Unity;
  19. using CyberX8_Themes.CustomControls;
  20. using WPF.Themes.UserControls;
  21. using MECF.Framework.Common.Utilities;
  22. namespace CyberX8_MainPages.ViewModels
  23. {
  24. public class PlatformViewModel : BindableBase
  25. {
  26. #region 私有字段
  27. private bool m_LoadLockDoorIsOpen;
  28. private bool m_LoadLockPumpValveIsOpen;
  29. private bool m_LoadLockVentValveIsOpen;
  30. private bool m_IsATM;
  31. private string ModuleName="PMA";
  32. private List<string> m_RtDataKeys=new List<string> ();
  33. private Dictionary<string, object> m_RtDataValues=new Dictionary<string, object> ();
  34. private bool m_PumpIsOpen;
  35. private int m_PurgeCounter;
  36. private Visibility m_PMAWaferIsVisibility;
  37. private Visibility m_LLAWaferIsVisibility;
  38. private WaferInfo m_LLAWafer;
  39. private WaferInfo m_PMAWafer;
  40. private bool m_WaferInPosSensor;
  41. private bool m_SoftPumpValveIsOpen;
  42. private bool m_FastPumpValveIsOpen;
  43. private bool m_PVHe1ValveIsOpen;
  44. private bool m_PVHe2ValveIsOpen;
  45. private bool m_TurboPumpPumpingValveIsOpen;
  46. private bool m_TurboPumpPurgeValveIsOpen;
  47. private bool m_GuageValveIsOpen;
  48. private bool m_PendulumValveIsOpen;
  49. private bool m_TurboIsOpen;
  50. private int m_PositionValue;
  51. private float m_PendulumValvePosition;
  52. private float m_ProcessHighPressure;
  53. private float m_ProcessLowPressure;
  54. private float m_ForelinePressurePressure;
  55. private int m_TurboPumpRotationalSpeed;
  56. private AITMfcData m_MFCN2Data;
  57. private AITPendulumValveData m_PendulumValveData;
  58. private int soltCount;
  59. #endregion
  60. #region 属性
  61. public bool WaferInPosSensor
  62. {
  63. get { return m_WaferInPosSensor; }
  64. set
  65. {
  66. SetProperty(ref m_WaferInPosSensor, value);
  67. }
  68. }
  69. public WaferInfo LLAWafer
  70. {
  71. get { return m_LLAWafer; }
  72. set { SetProperty(ref m_LLAWafer, value); }
  73. }
  74. public WaferInfo PMAWafer
  75. {
  76. get { return m_PMAWafer; }
  77. set { SetProperty(ref m_PMAWafer, value); }
  78. }
  79. public bool LoadLockDoorIsOpen
  80. {
  81. get { return m_LoadLockDoorIsOpen; }
  82. set { SetProperty(ref m_LoadLockDoorIsOpen, value); }
  83. }
  84. public bool LoadLockPumpValveIsOpen
  85. {
  86. get { return m_LoadLockPumpValveIsOpen; }
  87. set { SetProperty(ref m_LoadLockPumpValveIsOpen, value); }
  88. }
  89. public bool LoadLockVentValveIsOpen
  90. {
  91. get { return m_LoadLockVentValveIsOpen; }
  92. set { SetProperty(ref m_LoadLockVentValveIsOpen, value); }
  93. }
  94. public bool IsATM
  95. {
  96. get { return m_IsATM; }
  97. set { SetProperty(ref m_IsATM, value); }
  98. }
  99. public Dictionary<string, object> RtDataValues
  100. {
  101. get { return m_RtDataValues; }
  102. set { SetProperty(ref m_RtDataValues, value); }
  103. }
  104. public bool PumpIsOpen
  105. {
  106. get { return m_PumpIsOpen; }
  107. set { SetProperty(ref m_PumpIsOpen, value); }
  108. }
  109. public int PurgeCounter
  110. {
  111. get { return m_PurgeCounter; }
  112. set { SetProperty(ref m_PurgeCounter, value); }
  113. }
  114. public Visibility PMAWaferIsVisibility
  115. {
  116. get { return m_PMAWaferIsVisibility; }
  117. set { SetProperty(ref m_PMAWaferIsVisibility, value); }
  118. }
  119. public Visibility LLAWaferIsVisibility
  120. {
  121. get { return m_LLAWaferIsVisibility; }
  122. set { SetProperty(ref m_LLAWaferIsVisibility, value); }
  123. }
  124. public bool TurboPumpPumpingValveIsOpen
  125. {
  126. get { return m_TurboPumpPumpingValveIsOpen; }
  127. set { SetProperty(ref m_TurboPumpPumpingValveIsOpen, value); }
  128. }
  129. public bool TurboPumpPurgeValveIsOpen
  130. {
  131. get { return m_TurboPumpPurgeValveIsOpen; }
  132. set { SetProperty(ref m_TurboPumpPurgeValveIsOpen, value); }
  133. }
  134. public bool SoftPumpValveIsOpen
  135. {
  136. get { return m_SoftPumpValveIsOpen; }
  137. set { SetProperty(ref m_SoftPumpValveIsOpen, value); }
  138. }
  139. public bool FastPumpValveIsOpen
  140. {
  141. get { return m_FastPumpValveIsOpen; }
  142. set { SetProperty(ref m_FastPumpValveIsOpen, value); }
  143. }
  144. public bool GuageValveIsOpen
  145. {
  146. get { return m_GuageValveIsOpen; }
  147. set { SetProperty(ref m_GuageValveIsOpen, value); }
  148. }
  149. public bool PendulumValveIsOpen
  150. {
  151. get { return m_PendulumValveIsOpen; }
  152. set { SetProperty(ref m_PendulumValveIsOpen, value); }
  153. }
  154. public bool TurboIsOpen
  155. {
  156. get { return m_TurboIsOpen; }
  157. set { SetProperty(ref m_TurboIsOpen, value); }
  158. }
  159. public bool PVHe1ValveIsOpen
  160. {
  161. get { return m_PVHe1ValveIsOpen; }
  162. set { SetProperty(ref m_PVHe1ValveIsOpen, value); }
  163. }
  164. public bool PVHe2ValveIsOpen
  165. {
  166. get { return m_PVHe2ValveIsOpen; }
  167. set { SetProperty(ref m_PVHe2ValveIsOpen, value); }
  168. }
  169. public int PositionValue
  170. {
  171. get { return m_PositionValue; }
  172. set { SetProperty(ref m_PositionValue, value); }
  173. }
  174. public float PendulumValvePosition
  175. {
  176. get { return m_PendulumValvePosition; }
  177. set { SetProperty(ref m_PendulumValvePosition, value); }
  178. }
  179. public float ProcessHighPressure
  180. {
  181. get { return m_ProcessHighPressure; }
  182. set
  183. {
  184. SetProperty(ref m_ProcessHighPressure, value);
  185. }
  186. }
  187. public float ProcessLowPressure
  188. {
  189. get { return m_ProcessLowPressure; }
  190. set
  191. {
  192. SetProperty(ref m_ProcessLowPressure, value);
  193. }
  194. }
  195. public float ForelinePressure
  196. {
  197. get { return m_ForelinePressurePressure; }
  198. set
  199. {
  200. SetProperty(ref m_ForelinePressurePressure, value);
  201. }
  202. }
  203. public int TurboPumpRotationalSpeed
  204. {
  205. get { return m_TurboPumpRotationalSpeed; }
  206. set
  207. {
  208. SetProperty(ref m_TurboPumpRotationalSpeed, value);
  209. }
  210. }
  211. public AITMfcData MFCN2Data
  212. {
  213. get { return m_MFCN2Data; }
  214. set { SetProperty(ref m_MFCN2Data, value); }
  215. }
  216. public AITPendulumValveData PendulumValveData
  217. {
  218. get { return m_PendulumValveData; }
  219. set
  220. {
  221. SetProperty(ref m_PendulumValveData, value);
  222. }
  223. }
  224. #endregion
  225. #region 命令
  226. private DelegateCommand _PurgeCommand;
  227. public DelegateCommand PurgeCommand =>
  228. _PurgeCommand ?? (_PurgeCommand = new DelegateCommand(OnPurge));
  229. private DelegateCommand _VentCommand;
  230. public DelegateCommand VentCommand =>
  231. _VentCommand ?? (_VentCommand = new DelegateCommand(OnVent));
  232. private DelegateCommand _PumpCommand;
  233. public DelegateCommand PumpCommand =>
  234. _PumpCommand ?? (_PumpCommand = new DelegateCommand(OnPump));
  235. private DelegateCommand _OpenPumpCommand;
  236. public DelegateCommand OpenPumpCommand =>
  237. _OpenPumpCommand ?? (_OpenPumpCommand = new DelegateCommand(OnOpenPump));
  238. private DelegateCommand _ClosePumpCommand;
  239. public DelegateCommand ClosePumpCommand =>
  240. _ClosePumpCommand ?? (_ClosePumpCommand = new DelegateCommand(OnClosePump));
  241. private DelegateCommand _OpenDoorCommand;
  242. public DelegateCommand OpenDoorCommand =>
  243. _OpenDoorCommand ?? (_OpenDoorCommand = new DelegateCommand(OnOpenDoor));
  244. private DelegateCommand _CloseDoorCommand;
  245. public DelegateCommand CloseDoorCommand =>
  246. _CloseDoorCommand ?? (_CloseDoorCommand = new DelegateCommand(OnCloseDoor));
  247. private DelegateCommand _NewWaferCommand;
  248. public DelegateCommand NewWaferCommand =>
  249. _NewWaferCommand ?? (_NewWaferCommand = new DelegateCommand(OnNewWafer));
  250. private DelegateCommand _DeleteWaferCommand;
  251. public DelegateCommand DeleteWaferCommand =>
  252. _DeleteWaferCommand ?? (_DeleteWaferCommand = new DelegateCommand(OnDeleteWafer));
  253. private DelegateCommand _PlaceWaferCommand;
  254. public DelegateCommand PlaceWaferCommand =>
  255. _PlaceWaferCommand ?? (_PlaceWaferCommand = new DelegateCommand(OnPlaceWafer));
  256. private DelegateCommand _MoveWaferCommand;
  257. public DelegateCommand MoveWaferCommand =>
  258. _MoveWaferCommand ?? (_MoveWaferCommand = new DelegateCommand(OnMoveWafer));
  259. private DelegateCommand<object> _ControlValveCommand;
  260. public DelegateCommand<object> ControlValveCommand =>
  261. _ControlValveCommand ?? (_ControlValveCommand = new DelegateCommand<object>(OnControlValve));
  262. private DelegateCommand _OpenPendulumValveCommand;
  263. public DelegateCommand OpenPendulumValveCommand =>
  264. _OpenPendulumValveCommand ?? (_OpenPendulumValveCommand = new DelegateCommand(OnOpenPendulumValve));
  265. private DelegateCommand _ClosePendulumValveCommand;
  266. public DelegateCommand ClosePendulumValveCommand =>
  267. _ClosePendulumValveCommand ?? (_ClosePendulumValveCommand = new DelegateCommand(OnClosePendulumValve));
  268. //private DelegateCommand _OpenButterflyValveViewCommand;
  269. //public DelegateCommand OpenButterflyValveViewCommand =>
  270. // _OpenButterflyValveViewCommand ?? (_OpenButterflyValveViewCommand = new DelegateCommand(OnOpenButterflyValveView));
  271. private DelegateCommand _OpenTurboPumpCommand;
  272. public DelegateCommand OpenTurboPumpCommand =>
  273. _OpenTurboPumpCommand ?? (_OpenTurboPumpCommand = new DelegateCommand(OnOpenTurboPump));
  274. #endregion
  275. #region 构造函数
  276. public PlatformViewModel()
  277. {
  278. //m_PMAWaferIsVisibility = Visibility.Collapsed;
  279. //m_IsATM = true;
  280. //var test = RTData.GetRTData().RtDataValues;
  281. addDataKeys();
  282. DispatcherTimer timer = new DispatcherTimer();
  283. timer.Interval = TimeSpan.FromSeconds(0.5);
  284. timer.Tick += timer_Tick;
  285. timer.Start();
  286. soltCount = Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig($"LLA.SlotNumber"));
  287. }
  288. #endregion
  289. #region 命令方法
  290. private void OnPump()
  291. {
  292. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.PumpLoadLock");
  293. }
  294. private void OnPurge()
  295. {
  296. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.PurgeLoadLock");
  297. }
  298. private void OnVent()
  299. {
  300. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.VentLoadLock");
  301. }
  302. private void OnOpenPump()
  303. {
  304. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StartPump");
  305. }
  306. private void OnClosePump()
  307. {
  308. //InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.Abort}");
  309. }
  310. private void OnOpenDoor()
  311. {
  312. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetSlitDoor",true);
  313. }
  314. private void OnCloseDoor()
  315. {
  316. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetSlitDoor",false);
  317. }
  318. private void OnNewWafer()
  319. {
  320. InvokeClient.Instance.Service.DoOperation("CreateWafer", "PMA", 0);
  321. }
  322. private void OnDeleteWafer()
  323. {
  324. InvokeClient.Instance.Service.DoOperation("DeleteWafer", "PMA", 0);
  325. }
  326. private void OnPlaceWafer()
  327. {
  328. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.LLPlace}");
  329. }
  330. private void OnMoveWafer()
  331. {
  332. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.{RtOperation.LLPick}");
  333. }
  334. private void OnControlValve(object obj)
  335. {
  336. CommonValveControl commonValveControl = (CommonValveControl)obj;
  337. if (commonValveControl.IsCanEdit == true)
  338. {
  339. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ControlValve", Convert.ToInt32(commonValveControl.Tag.ToString()), !commonValveControl.Status);
  340. }
  341. }
  342. private void OnOpenPendulumValve()
  343. {
  344. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.TurnPendulumValve", true);
  345. }
  346. private void OnClosePendulumValve()
  347. {
  348. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.TurnPendulumValve", false);
  349. }
  350. private void OnOpenTurboPump()
  351. {
  352. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StartTurboPump");
  353. }
  354. #endregion
  355. #region 私有方法
  356. void timer_Tick(object sender, EventArgs e)
  357. {
  358. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  359. LoadLockPumpValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveLoadlockPumping.IsOpen");
  360. LoadLockVentValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveLoadlockVent.IsOpen");
  361. PumpIsOpen = (bool)RtDataValues[$"{ModuleName}.PumpIsRunning"];
  362. PurgeCounter=(int)RtDataValues[$"{ModuleName}.LoadLockPurge.PurgeCounter"];
  363. LLAWafer = ModuleManager.ModuleInfos["LLA"].WaferManager.Wafers[soltCount-1];
  364. PMAWafer = ModuleManager.ModuleInfos["PMA"].WaferManager.Wafers[0];
  365. WaferInPosSensor = (bool)RtDataValues[$"{ModuleName}.SensorSmallWaferInPos.Value"];
  366. SoftPumpValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveSoftPump.IsOpen");
  367. FastPumpValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveFastPump.IsOpen");
  368. GuageValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveGuage.IsOpen");
  369. TurboPumpPumpingValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveTurboPumpPumping.IsOpen");
  370. TurboPumpPurgeValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValveTurboPumpPurge.IsOpen");
  371. PVHe1ValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValvePVHe1.IsOpen");
  372. PVHe2ValveIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.ValvePVHe2.IsOpen");
  373. PumpIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.PumpIsRunning");
  374. TurboIsOpen = CommonFunction.GetValue<bool>(RtDataValues, $"{ModuleName}.TurboPumpIsRunning");
  375. PendulumValvePosition = CommonFunction.GetValue<float>(RtDataValues, $"{ModuleName}.GetPVPosition");
  376. PositionValue = -((int)((PendulumValvePosition) * 0.09));
  377. ProcessHighPressure = CommonFunction.GetValue<float>(RtDataValues, $"{ModuleName}.ProcessHighPressure");
  378. ProcessLowPressure = CommonFunction.GetValue<float>(RtDataValues, $"{ModuleName}.ProcessLowPressure");
  379. ForelinePressure = CommonFunction.GetValue<float>(RtDataValues, $"{ModuleName}.ForelinePressure");
  380. TurboPumpRotationalSpeed = Convert.ToInt32(RtDataValues[$"{ModuleName}.TurboPumpRotationalSpeed"].ToString());
  381. MFCN2Data = CommonFunction.GetValue<AITMfcData>(RtDataValues, $"{ModuleName}.MfcN2");
  382. PendulumValveData = CommonFunction.GetValue<AITPendulumValveData>(RtDataValues, $"{ModuleName}.{VenusDevice.PendulumValve}.DeviceData");
  383. }
  384. private void addDataKeys()
  385. {
  386. m_RtDataKeys.Add($"{ModuleName}.FsmState");
  387. m_RtDataKeys.Add($"{ModuleName}.ValveLoadlockPumping.IsOpen");
  388. m_RtDataKeys.Add($"{ModuleName}.ValveLoadlockVent.IsOpen");
  389. m_RtDataKeys.Add($"{ModuleName}.PumpIsRunning");
  390. m_RtDataKeys.Add($"{ModuleName}.LoadLockPurge.PurgeCounter");
  391. m_RtDataKeys.Add($"{ModuleName}.IsSlitDoorClosed");
  392. m_RtDataKeys.Add($"{ModuleName}.LoadlockPressure");
  393. m_RtDataKeys.Add($"{ModuleName}.ForelinePressure");
  394. m_RtDataKeys.Add($"{ModuleName}.IsATMLoadlock");
  395. m_RtDataKeys.Add($"{ModuleName}.IsVACLoadlock");
  396. m_RtDataKeys.Add($"PMA.HasWafer");
  397. m_RtDataKeys.Add($"PMA.ModuleWaferList");
  398. m_RtDataKeys.Add($"LLA.HasWafer");
  399. m_RtDataKeys.Add($"LLA.ModuleWaferList");
  400. m_RtDataKeys.Add($"{ModuleName}.SensorSmallWaferInPos.Value");
  401. m_RtDataKeys.Add($"{ModuleName}.ValveSoftPump.IsOpen");
  402. m_RtDataKeys.Add($"{ModuleName}.ValveFastPump.IsOpen");
  403. m_RtDataKeys.Add($"{ModuleName}.ValveN2.IsOpen");
  404. m_RtDataKeys.Add($"{ModuleName}.ValvePVHe1.IsOpen");
  405. m_RtDataKeys.Add($"{ModuleName}.ValvePVHe2.IsOpen");
  406. m_RtDataKeys.Add($"{ModuleName}.ValveTurboPumpPumping.IsOpen");
  407. m_RtDataKeys.Add($"{ModuleName}.ValveTurboPumpPurge.IsOpen");
  408. m_RtDataKeys.Add($"{ModuleName}.ValveGuage.IsOpen");
  409. m_RtDataKeys.Add($"{ModuleName}.TurboPumpIsRunning");
  410. m_RtDataKeys.Add($"{ModuleName}.PumpIsRunning");
  411. m_RtDataKeys.Add($"{ModuleName}.IsATM");
  412. m_RtDataKeys.Add($"{ModuleName}.IsVAC");
  413. m_RtDataKeys.Add($"{ModuleName}.GetPVPosition");
  414. m_RtDataKeys.Add($"{ModuleName}.TurboPumpRotationalSpeed");
  415. m_RtDataKeys.Add($"{ModuleName}.MfcN2");
  416. m_RtDataKeys.Add($"{ModuleName}.{VenusDevice.PendulumValve}.DeviceData");
  417. m_RtDataKeys.Add($"{ModuleName}.ProcessHighPressure");
  418. m_RtDataKeys.Add($"{ModuleName}.ProcessLowPressure");
  419. }
  420. #endregion
  421. }
  422. }