EfemViewModel.cs 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920
  1. using Aitex.Sorter.Common;
  2. using ExcelLibrary.BinaryFileFormat;
  3. using MECF.Framework.Common.CommonData;
  4. using MECF.Framework.Common.DataCenter;
  5. using MECF.Framework.Common.Equipment;
  6. using MECF.Framework.Common.OperationCenter;
  7. using MECF.Framework.Common.Schedulers;
  8. using OpenSEMI.ClientBase;
  9. using OpenSEMI.Ctrlib.Controls;
  10. using Prism.Commands;
  11. using Prism.Mvvm;
  12. using System;
  13. using System.Collections.Generic;
  14. using System.Collections.ObjectModel;
  15. using System.Linq;
  16. using System.Threading.Tasks;
  17. using System.Windows.Threading;
  18. using Venus_Core;
  19. using Venus_MainPages.Unity;
  20. using Venus_Themes.CustomControls;
  21. using Venus_Themes.Unity;
  22. using static Venus_Themes.UserControls.EFEM;
  23. namespace Venus_MainPages.ViewModels
  24. {
  25. public enum EFEMModule
  26. {
  27. LLA, LLB,LP1,LP2,LP3,Aligner1
  28. }
  29. public enum EFEMBlade
  30. {
  31. Blade1, Blade2
  32. }
  33. internal class EfemViewModel:BindableBase
  34. {
  35. #region 私有字段
  36. private bool m_LLAIsInstalled;
  37. private bool m_LLBIsInstalled;
  38. private ModuleInfo m_LLAModuleInfo;
  39. private ModuleInfo m_LLBModuleInfo;
  40. private ModuleInfo m_LP1ModuleInfo;
  41. private ModuleInfo m_LP2ModuleInfo;
  42. private ModuleInfo m_LP3ModuleInfo;
  43. private ModuleInfo m_EFEMModuleInfo;
  44. private List<EFEMModule> m_EFEMModules = new List<EFEMModule>();
  45. private EFEMBlade m_PickSelectedBlade;
  46. private EFEMBlade m_PlaceSelectedBlade;
  47. private EFEMBlade m_ExtendSelectedBlade;
  48. private EFEMBlade m_RetractSelectedBlade;
  49. private ObservableCollection<int> m_PlaceSoltItemsSource = new ObservableCollection<int>();
  50. private ObservableCollection<int> m_PickSoltItemsSource = new ObservableCollection<int>();
  51. private ObservableCollection<int> m_ExtendSoltItemsSource = new ObservableCollection<int>();
  52. private ObservableCollection<int> m_RetractSoltItemsSource = new ObservableCollection<int>();
  53. private int m_PickSoltSelectedIndex;
  54. private int m_PlaceSoltSelectedIndex;
  55. private int m_ExtendSoltSelectedIndex;
  56. private int m_RetractSoltSelectedIndex;
  57. private EFEMModule m_PickSelectedModule;
  58. private EFEMModule m_PlaceSelectedModule;
  59. private EFEMModule m_ExtendSelectedModule;
  60. private EFEMModule m_RetractSelectedModule;
  61. private WaferInfo m_BladeAWafer;
  62. private WaferInfo m_BladeBWafer;
  63. private WaferInfo m_LLAWafer;
  64. private WaferInfo m_LLBWafer;
  65. private WaferInfo m_Aligner1Wafer;
  66. private string m_LP1Status;
  67. private string m_LP2Status;
  68. private string m_LP3Status;
  69. private List<string> m_RtDataKeys=new List<string>();
  70. private Dictionary<string, object> m_RtDataValues;
  71. private int m_AlignValue;
  72. private WaferRobotTAction m_Robot1TAction;
  73. private WaferRobotXAction m_Robot1XAction;
  74. private WaferRobotTAction m_Robot2TAction;
  75. private WaferRobotXAction m_Robot2XAction;
  76. //int arm1oldWaferStatus = 100;
  77. //int arm2oldWaferStatus = 100;
  78. private RobotPosition m_CurrentRobotPosition;
  79. DispatcherTimer timer;
  80. #endregion
  81. #region 属性
  82. public bool LLAIsInstalled
  83. {
  84. get { return m_LLAIsInstalled; }
  85. set { SetProperty(ref m_LLAIsInstalled, value); }
  86. }
  87. public bool LLBIsInstalled
  88. {
  89. get { return m_LLBIsInstalled; }
  90. set { SetProperty(ref m_LLBIsInstalled, value); }
  91. }
  92. public ModuleInfo LLAModuleInfo
  93. {
  94. get { return m_LLAModuleInfo; }
  95. set { SetProperty(ref m_LLAModuleInfo, value); }
  96. }
  97. public ModuleInfo LLBModuleInfo
  98. {
  99. get { return m_LLBModuleInfo; }
  100. set { SetProperty(ref m_LLBModuleInfo, value); }
  101. }
  102. public ModuleInfo LP1ModuleInfo
  103. {
  104. get { return m_LP1ModuleInfo; }
  105. set { SetProperty(ref m_LP1ModuleInfo, value); }
  106. }
  107. public ModuleInfo LP2ModuleInfo
  108. {
  109. get { return m_LP2ModuleInfo; }
  110. set { SetProperty(ref m_LP2ModuleInfo, value); }
  111. }
  112. public ModuleInfo LP3ModuleInfo
  113. {
  114. get { return m_LP3ModuleInfo; }
  115. set { SetProperty(ref m_LP3ModuleInfo, value); }
  116. }
  117. public ModuleInfo EFEMModuleInfo
  118. {
  119. get { return m_EFEMModuleInfo; }
  120. set { SetProperty(ref m_EFEMModuleInfo, value); }
  121. }
  122. public List<EFEMModule> EFEMModules
  123. {
  124. get { return m_EFEMModules; }
  125. set { SetProperty(ref m_EFEMModules, value); }
  126. }
  127. public EFEMBlade PickSelectedBlade
  128. {
  129. get { return m_PickSelectedBlade; }
  130. set { SetProperty(ref m_PickSelectedBlade, value); }
  131. }
  132. public EFEMBlade PlaceSelectedBlade
  133. {
  134. get { return m_PlaceSelectedBlade; }
  135. set { SetProperty(ref m_PlaceSelectedBlade, value); }
  136. }
  137. public EFEMBlade ExtendSelectedBlade
  138. {
  139. get { return m_ExtendSelectedBlade; }
  140. set { SetProperty(ref m_ExtendSelectedBlade, value); }
  141. }
  142. public EFEMBlade RetractSelectedBlade
  143. {
  144. get { return m_RetractSelectedBlade; }
  145. set { SetProperty(ref m_RetractSelectedBlade, value); }
  146. }
  147. public ObservableCollection<int> PickSoltItemsSource
  148. {
  149. get { return m_PickSoltItemsSource; }
  150. set { SetProperty(ref m_PickSoltItemsSource, value); }
  151. }
  152. public ObservableCollection<int> PlaceSoltItemsSource
  153. {
  154. get { return m_PlaceSoltItemsSource; }
  155. set { SetProperty(ref m_PlaceSoltItemsSource, value); }
  156. }
  157. public ObservableCollection<int> ExtendSoltItemsSource
  158. {
  159. get { return m_ExtendSoltItemsSource; }
  160. set { SetProperty(ref m_ExtendSoltItemsSource, value); }
  161. }
  162. public ObservableCollection<int> RetractSoltItemsSource
  163. {
  164. get { return m_RetractSoltItemsSource; }
  165. set { SetProperty(ref m_RetractSoltItemsSource, value); }
  166. }
  167. public int PickSoltSelectedIndex
  168. {
  169. get { return m_PickSoltSelectedIndex; }
  170. set { SetProperty(ref m_PickSoltSelectedIndex, value); }
  171. }
  172. public int PlaceSoltSelectedIndex
  173. {
  174. get { return m_PlaceSoltSelectedIndex; }
  175. set { SetProperty(ref m_PlaceSoltSelectedIndex, value); }
  176. }
  177. public int ExtendSoltSelectedIndex
  178. {
  179. get { return m_ExtendSoltSelectedIndex; }
  180. set { SetProperty(ref m_ExtendSoltSelectedIndex, value); }
  181. }
  182. public int RetractSoltSelectedIndex
  183. {
  184. get { return m_RetractSoltSelectedIndex; }
  185. set { SetProperty(ref m_RetractSoltSelectedIndex, value); }
  186. }
  187. public EFEMModule PickSelectedModule
  188. {
  189. get { return m_PickSelectedModule; }
  190. set { SetProperty(ref m_PickSelectedModule, value); }
  191. }
  192. public EFEMModule PlaceSelectedModule
  193. {
  194. get { return m_PlaceSelectedModule; }
  195. set { SetProperty(ref m_PlaceSelectedModule, value); }
  196. }
  197. public EFEMModule ExtendSelectedModule
  198. {
  199. get { return m_ExtendSelectedModule; }
  200. set { SetProperty(ref m_ExtendSelectedModule, value); }
  201. }
  202. public EFEMModule RetractSelectedModule
  203. {
  204. get { return m_RetractSelectedModule; }
  205. set { SetProperty(ref m_RetractSelectedModule, value); }
  206. }
  207. public WaferInfo BladeAWafer
  208. {
  209. get { return m_BladeAWafer; }
  210. set { SetProperty(ref m_BladeAWafer, value); }
  211. }
  212. public WaferInfo BladeBWafer
  213. {
  214. get { return m_BladeBWafer; }
  215. set { SetProperty(ref m_BladeBWafer, value); }
  216. }
  217. public WaferInfo Aligner1Wafer
  218. {
  219. get { return m_Aligner1Wafer; }
  220. set { SetProperty(ref m_Aligner1Wafer, value); }
  221. }
  222. public WaferInfo LLAWafer
  223. {
  224. get { return m_LLAWafer; }
  225. set { SetProperty(ref m_LLAWafer, value); }
  226. }
  227. public WaferInfo LLBWafer
  228. {
  229. get { return m_LLBWafer; }
  230. set { SetProperty(ref m_LLBWafer, value); }
  231. }
  232. public string LP1Status
  233. {
  234. get { return m_LP1Status; }
  235. set { SetProperty(ref m_LP1Status, value); }
  236. }
  237. public string LP2Status
  238. {
  239. get { return m_LP2Status; }
  240. set { SetProperty(ref m_LP2Status, value); }
  241. }
  242. public string LP3Status
  243. {
  244. get { return m_LP3Status; }
  245. set { SetProperty(ref m_LP3Status, value); }
  246. }
  247. public Dictionary<string, object> RtDataValues
  248. {
  249. get { return m_RtDataValues; }
  250. set { SetProperty(ref m_RtDataValues, value); }
  251. }
  252. public int AlignValue
  253. {
  254. get { return m_AlignValue; }
  255. set { SetProperty(ref m_AlignValue, value); }
  256. }
  257. public WaferRobotTAction Robot1TAction
  258. {
  259. get { return m_Robot1TAction; }
  260. set { SetProperty(ref m_Robot1TAction, value); }
  261. }
  262. public WaferRobotXAction Robot1XAction
  263. {
  264. get { return m_Robot1XAction; }
  265. set { SetProperty(ref m_Robot1XAction, value); }
  266. }
  267. public WaferRobotTAction Robot2TAction
  268. {
  269. get { return m_Robot2TAction; }
  270. set { SetProperty(ref m_Robot2TAction, value); }
  271. }
  272. public WaferRobotXAction Robot2XAction
  273. {
  274. get { return m_Robot2XAction; }
  275. set { SetProperty(ref m_Robot2XAction, value); }
  276. }
  277. private string m_RobotTarget;
  278. public string RobotTarget
  279. {
  280. get { return m_RobotTarget; }
  281. set
  282. {
  283. SetProperty(ref m_RobotTarget, value);
  284. }
  285. }
  286. public RobotMoveInfo m_robotMoveInfo;
  287. public RobotMoveInfo RobotMoveInfo
  288. {
  289. get { return m_robotMoveInfo; }
  290. set
  291. {
  292. RobotMoveInfoChanged(m_robotMoveInfo, value);
  293. m_robotMoveInfo = value;
  294. }
  295. }
  296. public RobotPosition CurrentRobotPosition
  297. {
  298. get { return m_CurrentRobotPosition; }
  299. set { SetProperty(ref m_CurrentRobotPosition, value); }
  300. }
  301. #endregion
  302. #region 命令
  303. private DelegateCommand _ExtendCommand;
  304. public DelegateCommand ExtendCommand =>
  305. _ExtendCommand ?? (_ExtendCommand = new DelegateCommand(OnExtend));
  306. private DelegateCommand _RetractCommand;
  307. public DelegateCommand RetractCommand =>
  308. _RetractCommand ?? (_RetractCommand = new DelegateCommand(OnRetract));
  309. private DelegateCommand<object> _ModuleChangeCommand;
  310. public DelegateCommand<object> ModuleChangeCommand =>
  311. _ModuleChangeCommand ?? (_ModuleChangeCommand = new DelegateCommand<object>(OnModuleChange));
  312. private DelegateCommand _PickCommand;
  313. public DelegateCommand PickCommand =>
  314. _PickCommand ?? (_PickCommand = new DelegateCommand(OnPick));
  315. private DelegateCommand _PlaceCommand;
  316. public DelegateCommand PlaceCommand =>
  317. _PlaceCommand ?? (_PlaceCommand = new DelegateCommand(OnPlace));
  318. private DelegateCommand _HomeAllCommand;
  319. public DelegateCommand HomeAllCommand =>
  320. _HomeAllCommand ?? (_HomeAllCommand = new DelegateCommand(OnHomeAll));
  321. private DelegateCommand _ClearErrorCommand;
  322. public DelegateCommand ClearErrorCommand =>
  323. _ClearErrorCommand ?? (_ClearErrorCommand = new DelegateCommand(OnClearError));
  324. private DelegateCommand _AbortCommand;
  325. public DelegateCommand AbortCommand =>
  326. _AbortCommand ?? (_AbortCommand = new DelegateCommand(OnAbort));
  327. private DelegateCommand _Align1HomeCommand;
  328. public DelegateCommand Align1HomeCommand =>
  329. _Align1HomeCommand ?? (_Align1HomeCommand = new DelegateCommand(OnAlign1Home));
  330. private DelegateCommand _Align1UpCommand;
  331. public DelegateCommand Align1UpCommand =>
  332. _Align1UpCommand ?? (_Align1UpCommand = new DelegateCommand(OnAlign1Up));
  333. private DelegateCommand _Align1DownCommand;
  334. public DelegateCommand Align1DownCommand =>
  335. _Align1DownCommand ?? (_Align1DownCommand = new DelegateCommand(OnAlign1Down));
  336. private DelegateCommand _Align1AlignCommand;
  337. public DelegateCommand Align1AlignCommand =>
  338. _Align1AlignCommand ?? (_Align1AlignCommand = new DelegateCommand(OnAlign1Align));
  339. private DelegateCommand _RobotHomeCommand;
  340. public DelegateCommand RobotHomeCommand =>
  341. _RobotHomeCommand ?? (_RobotHomeCommand = new DelegateCommand(OnRobotHome));
  342. private DelegateCommand<object> _LPHomeCommand;
  343. public DelegateCommand<object> LPHomeCommand =>
  344. _LPHomeCommand ?? (_LPHomeCommand = new DelegateCommand<object>(OnLPHome));
  345. private DelegateCommand<object> _LPAbortCommand;
  346. public DelegateCommand<object> LPAbortCommand =>
  347. _LPAbortCommand ?? (_LPAbortCommand = new DelegateCommand<object>(OnLPAbort));
  348. private DelegateCommand<object> _LPResetCommand;
  349. public DelegateCommand<object> LPResetCommand =>
  350. _LPResetCommand ?? (_LPResetCommand = new DelegateCommand<object>(OnLPReset));
  351. private DelegateCommand<object> _LPLoadCommand;
  352. public DelegateCommand<object> LPLoadCommand =>
  353. _LPLoadCommand ?? (_LPLoadCommand = new DelegateCommand<object>(OnLPLoad));
  354. private DelegateCommand<object> _LPUnLoadCommand;
  355. public DelegateCommand<object> LPUnLoadCommand =>
  356. _LPUnLoadCommand ?? (_LPUnLoadCommand = new DelegateCommand<object>(OnLPUnLoad));
  357. private DelegateCommand<object> _LPReadIDCommand;
  358. public DelegateCommand<object> LPReadIDCommand =>
  359. _LPReadIDCommand ?? (_LPReadIDCommand = new DelegateCommand<object>(OnLPReadID));
  360. private DelegateCommand<object> _LPClampCommand;
  361. public DelegateCommand<object> LPClampCommand =>
  362. _LPClampCommand ?? (_LPClampCommand = new DelegateCommand<object>(OnLPClamp));
  363. private DelegateCommand<object> _LPUnClampCommand;
  364. public DelegateCommand<object> LPUnClampCommand =>
  365. _LPUnClampCommand ?? (_LPUnClampCommand = new DelegateCommand<object>(OnLPUnClamp));
  366. private DelegateCommand<object> _LPDockCommand;
  367. public DelegateCommand<object> LPDockCommand =>
  368. _LPDockCommand ?? (_LPDockCommand = new DelegateCommand<object>(OnLPDock));
  369. private DelegateCommand<object> _LPUnDockCommand;
  370. public DelegateCommand<object> LPUnDockCommand =>
  371. _LPUnDockCommand ?? (_LPUnDockCommand = new DelegateCommand<object>(OnLPUnDock));
  372. private DelegateCommand<object> _LPOpenDoorCommand;
  373. public DelegateCommand<object> LPOpenDoorCommand =>
  374. _LPOpenDoorCommand ?? (_LPOpenDoorCommand = new DelegateCommand<object>(OnLPOpenDoor));
  375. private DelegateCommand<object> _LPCloseDoorCommand;
  376. public DelegateCommand<object> LPCloseDoorCommand =>
  377. _LPCloseDoorCommand ?? (_LPCloseDoorCommand = new DelegateCommand<object>(OnLPCloseDoor));
  378. private DelegateCommand _OnlineCommand;
  379. public DelegateCommand OnlineCommand =>
  380. _OnlineCommand ?? (_OnlineCommand = new DelegateCommand(OnOnline));
  381. private DelegateCommand _OfflineCommand;
  382. public DelegateCommand OfflineCommand =>
  383. _OfflineCommand ?? (_OfflineCommand = new DelegateCommand(OnOffline));
  384. #endregion
  385. #region 构造函数
  386. public EfemViewModel()
  387. {
  388. string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
  389. LLAIsInstalled = allModules.Contains("LLA");
  390. LLBIsInstalled = allModules.Contains("LLB");
  391. timer = new DispatcherTimer();
  392. timer.Interval = TimeSpan.FromSeconds(0.5);
  393. timer.Tick += Timer_Tick;
  394. //timer.Start();
  395. EFEMModules.Add(EFEMModule.LLA);
  396. EFEMModules.Add(EFEMModule.LLB);
  397. EFEMModules.Add(EFEMModule.LP1);
  398. EFEMModules.Add(EFEMModule.LP2);
  399. EFEMModules.Add(EFEMModule.LP3);
  400. EFEMModules.Add(EFEMModule.Aligner1);
  401. OnModuleChange("Pick");
  402. OnModuleChange("Place");
  403. Init();
  404. }
  405. #endregion
  406. #region 命令方法
  407. private void OnModuleChange(object obj)
  408. {
  409. var value = obj.ToString();
  410. switch (value)
  411. {
  412. case "Pick":
  413. PickSoltItemsSource.Clear();
  414. switch (PickSelectedModule)
  415. {
  416. case EFEMModule.LLA:
  417. case EFEMModule.LLB:
  418. PickSoltItemsSource.Add(1);
  419. PickSoltItemsSource.Add(2);
  420. break;
  421. case EFEMModule.LP1:
  422. case EFEMModule.LP2:
  423. case EFEMModule.LP3:
  424. for (int i = 1; i < 26; i++)
  425. {
  426. PickSoltItemsSource.Add(i);
  427. }
  428. break;
  429. default:
  430. PickSoltItemsSource.Add(1);
  431. break;
  432. }
  433. PickSoltSelectedIndex = 0;
  434. break;
  435. case "Place":
  436. PlaceSoltItemsSource.Clear();
  437. switch (PlaceSelectedModule)
  438. {
  439. case EFEMModule.LLA:
  440. case EFEMModule.LLB:
  441. PlaceSoltItemsSource.Add(1);
  442. PlaceSoltItemsSource.Add(2);
  443. break;
  444. case EFEMModule.LP1:
  445. case EFEMModule.LP2:
  446. case EFEMModule.LP3:
  447. for (int i = 1; i < 26; i++)
  448. {
  449. PlaceSoltItemsSource.Add(i);
  450. }
  451. break;
  452. default:
  453. PlaceSoltItemsSource.Add(1);
  454. break;
  455. }
  456. PlaceSoltSelectedIndex = 0;
  457. break;
  458. //case "Extend":
  459. // ExtendSoltItemsSource.Clear();
  460. // switch (ExtendSelectedModule)
  461. // {
  462. // case EFEMModule.LLA:
  463. // case EFEMModule.LLB:
  464. // ExtendSoltItemsSource.Add(1);
  465. // ExtendSoltItemsSource.Add(2);
  466. // break;
  467. // case EFEMModule.LP1:
  468. // case EFEMModule.LP2:
  469. // case EFEMModule.LP3:
  470. // for (int i = 1; i < 26; i++)
  471. // {
  472. // ExtendSoltItemsSource.Add(i);
  473. // }
  474. // break;
  475. // default:
  476. // ExtendSoltItemsSource.Add(1);
  477. // break;
  478. // }
  479. // ExtendSoltSelectedIndex = 0;
  480. // break;
  481. //case "Retract":
  482. // RetractSoltItemsSource.Clear();
  483. // switch (RetractSelectedModule)
  484. // {
  485. // case EFEMModule.LLA:
  486. // case EFEMModule.LLB:
  487. // RetractSoltItemsSource.Add(1);
  488. // RetractSoltItemsSource.Add(2);
  489. // break;
  490. // case EFEMModule.LP1:
  491. // case EFEMModule.LP2:
  492. // case EFEMModule.LP3:
  493. // for (int i = 1; i < 26; i++)
  494. // {
  495. // RetractSoltItemsSource.Add(i);
  496. // }
  497. // break;
  498. // default:
  499. // RetractSoltItemsSource.Add(1);
  500. // break;
  501. // }
  502. // RetractSoltSelectedIndex = 0;
  503. // break;
  504. }
  505. }
  506. private void OnExtend()
  507. {
  508. var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PlaceSelectedModule.ToString(), true);
  509. var selectedHand = (Hand)Enum.Parse(typeof(Hand), PlaceSelectedBlade.ToString(), true);
  510. InvokeClient.Instance.Service.DoOperation($"EFEM.{RtOperation.Extend}", moduleName, 0, selectedHand);
  511. }
  512. private void OnRetract()
  513. {
  514. var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PlaceSelectedModule.ToString(), true);
  515. var selectedHand = (Hand)Enum.Parse(typeof(Hand), PlaceSelectedBlade.ToString(), true);
  516. InvokeClient.Instance.Service.DoOperation($"EFEM.{RtOperation.Retract}", moduleName, 0, selectedHand);
  517. }
  518. private void OnPick()
  519. {
  520. Queue<MoveItem> moveItems = new Queue<MoveItem>();
  521. var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PickSelectedModule.ToString(), true);
  522. var selectedHand = (Hand)Enum.Parse(typeof(Hand), PickSelectedBlade.ToString(), true);
  523. MoveItem moveItem = new MoveItem(moduleName, PickSoltItemsSource[PickSoltSelectedIndex]-1, ModuleName.EfemRobot, 0, selectedHand);
  524. moveItems.Enqueue(moveItem);
  525. if (PickSelectedModule == EFEMModule.LLA || PickSelectedModule == EFEMModule.LLB)
  526. {
  527. InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Swap}", moveItems);
  528. }
  529. else
  530. {
  531. InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Pick}", moveItems);
  532. }
  533. //if ((int)PickSelectedModule > 3)
  534. //{
  535. // InvokeClient.Instance.Service.DoOperation($"EFEM.{RtOperation.LLPick}", moveItems);
  536. //}
  537. //else
  538. //{
  539. // InvokeClient.Instance.Service.DoOperation($"EFEM.{RtOperation.PMPick}", moveItems);
  540. //}
  541. }
  542. private void OnPlace()
  543. {
  544. Queue<MoveItem> moveItems = new Queue<MoveItem>();
  545. var moduleName = (ModuleName)Enum.Parse(typeof(ModuleName), PlaceSelectedModule.ToString(), true);
  546. var selectedHand = (Hand)Enum.Parse(typeof(Hand), PlaceSelectedBlade.ToString(), true);
  547. MoveItem moveItem = new MoveItem(ModuleName.EfemRobot, 0, moduleName, PlaceSoltItemsSource[PlaceSoltSelectedIndex]-1, selectedHand);
  548. moveItems.Enqueue(moveItem);
  549. //if ((int)PlaceSelectedModule > 3)
  550. //{
  551. // InvokeClient.Instance.Service.DoOperation($"TM.{RtOperation.LLPlace}", moveItems);
  552. //}
  553. //else
  554. //{
  555. // InvokeClient.Instance.Service.DoOperation($"TM.{RtOperation.PMPlace}", moveItems);
  556. //}
  557. if (PlaceSelectedModule == EFEMModule.LLA || PlaceSelectedModule == EFEMModule.LLB)
  558. {
  559. InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Swap}", moveItems);
  560. }
  561. else
  562. {
  563. InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Place}", moveItems);
  564. }
  565. }
  566. private void OnHomeAll()
  567. {
  568. InvokeClient.Instance.Service.DoOperation($"EFEM.{EfemOperation.Home}");
  569. }
  570. private void OnClearError()
  571. {
  572. InvokeClient.Instance.Service.DoOperation($"EFEM.{EfemOperation.ClearError}");
  573. }
  574. private void OnAbort()
  575. {
  576. InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Abort}");
  577. }
  578. private void OnAlign1Home()
  579. {
  580. InvokeClient.Instance.Service.DoOperation($"{ModuleName.Aligner1}.{EfemOperation.Home}");
  581. }
  582. private void OnAlign1Up()
  583. {
  584. InvokeClient.Instance.Service.DoOperation($"{ModuleName.Aligner1}.{EfemOperation.Lift}", true);
  585. }
  586. private void OnAlign1Down()
  587. {
  588. InvokeClient.Instance.Service.DoOperation($"{ModuleName.Aligner1}.{EfemOperation.Lift}", false);
  589. }
  590. private void OnAlign1Align()
  591. {
  592. InvokeClient.Instance.Service.DoOperation($"{ModuleName.Aligner1}.{EfemOperation.Align}",0, AlignValue);
  593. }
  594. private void OnRobotHome()
  595. {
  596. InvokeClient.Instance.Service.DoOperation($"{ModuleName.EfemRobot}.{EfemOperation.Home}");
  597. }
  598. private void OnLPHome(object obj)
  599. {
  600. InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.Home");
  601. }
  602. private void OnLPAbort(object obj)
  603. {
  604. InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.Abort");
  605. }
  606. private void OnLPReset(object obj)
  607. {
  608. //InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.ReSet");
  609. }
  610. private void OnLPLoad(object obj)
  611. {
  612. InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.Load");
  613. }
  614. private void OnLPUnLoad(object obj)
  615. {
  616. InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.Unload");
  617. }
  618. private void OnLPReadID(object obj)
  619. {
  620. InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.ReadCarrierId");
  621. }
  622. private void OnLPClamp(object obj)
  623. {
  624. InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.Clamp");
  625. }
  626. private void OnLPUnClamp(object obj)
  627. {
  628. InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.Unclamp");
  629. }
  630. private void OnLPDock(object obj)
  631. {
  632. InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.Dock");
  633. }
  634. private void OnLPUnDock(object obj)
  635. {
  636. InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.Undock");
  637. }
  638. private void OnLPOpenDoor(object obj)
  639. {
  640. InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.OpenDoor");
  641. }
  642. private void OnLPCloseDoor(object obj)
  643. {
  644. InvokeClient.Instance.Service.DoOperation($"{obj.ToString()}.CloseDoor");
  645. }
  646. private void OnOnline()
  647. {
  648. InvokeClient.Instance.Service.DoOperation($"{ModuleName.EFEM}.Online",true);
  649. }
  650. private void OnOffline()
  651. {
  652. InvokeClient.Instance.Service.DoOperation($"{ModuleName.EFEM}.Online", false);
  653. }
  654. #endregion
  655. #region 私有方法
  656. private void Timer_Tick(object sender, EventArgs e)
  657. {
  658. if (LLAIsInstalled == true)
  659. {
  660. LLAWafer = ModuleManager.ModuleInfos["LLA"].WaferManager.Wafers.FirstOrDefault(x => x.WaferStatus != 0);
  661. LLAModuleInfo = ModuleManager.ModuleInfos["LLA"];
  662. }
  663. if (LLBIsInstalled == true)
  664. {
  665. LLBWafer = ModuleManager.ModuleInfos["LLB"].WaferManager.Wafers.FirstOrDefault(x => x.WaferStatus != 0);
  666. LLBModuleInfo = ModuleManager.ModuleInfos["LLB"];
  667. }
  668. LP1ModuleInfo = ModuleManager.ModuleInfos["LP1"];
  669. LP2ModuleInfo = ModuleManager.ModuleInfos["LP2"];
  670. LP3ModuleInfo = ModuleManager.ModuleInfos["LP3"];
  671. EFEMModuleInfo = ModuleManager.ModuleInfos["EfemRobot"];
  672. BladeAWafer = ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[0];
  673. BladeBWafer = ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[1];
  674. Aligner1Wafer= ModuleManager.ModuleInfos["Aligner1"].WaferManager.Wafers[0];
  675. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  676. RobotMoveInfo = (RobotMoveInfo)QueryDataClient.Instance.Service.GetData("EFEM.RobotMoveAction");
  677. }
  678. private void Init()
  679. {
  680. m_RtDataKeys.Add("LP1.Status");
  681. m_RtDataKeys.Add("LP2.Status");
  682. m_RtDataKeys.Add("LP3.Status");
  683. m_RtDataKeys.Add("LP1.IsLoaded");
  684. m_RtDataKeys.Add("LP2.IsLoaded");
  685. m_RtDataKeys.Add("LP3.IsLoaded");
  686. m_RtDataKeys.Add("LP1.CarrierId");
  687. m_RtDataKeys.Add("LP2.CarrierId");
  688. m_RtDataKeys.Add("LP3.CarrierId");
  689. m_RtDataKeys.Add("LP1.IsClamped");
  690. m_RtDataKeys.Add("LP2.IsClamped");
  691. m_RtDataKeys.Add("LP3.IsClamped");
  692. m_RtDataKeys.Add("LP1.IsDocked");
  693. m_RtDataKeys.Add("LP2.IsDocked");
  694. m_RtDataKeys.Add("LP3.IsDocked");
  695. m_RtDataKeys.Add("TM.LLATSlitDoor.IsClosed");
  696. m_RtDataKeys.Add("TM.LLBTSlitDoor.IsClosed");
  697. m_RtDataKeys.Add("TM.LLAESlitDoor.IsClosed");
  698. m_RtDataKeys.Add("TM.LLBESlitDoor.IsClosed");
  699. m_RtDataKeys.Add("LP1.CassettePlaced");
  700. m_RtDataKeys.Add("LP2.CassettePlaced");
  701. m_RtDataKeys.Add("LP3.CassettePlaced");
  702. m_RtDataKeys.Add("EFEM.IsOnline");
  703. }
  704. public void EnterExitView(bool isEnter)
  705. {
  706. if (isEnter)
  707. {
  708. Timer_Tick(null, null);
  709. timer.Start();
  710. }
  711. else
  712. {
  713. timer.Stop();
  714. }
  715. }
  716. //private void UIEvents_PMDoorRaiseChangedEvent(DoorPara obj)
  717. //{
  718. // InvokeClient.Instance.Service.DoOperation($"{obj?.ModuleName}.SlitDoor.{obj?.IsOpen}");
  719. //}
  720. //private void UIEvents_LLTDoorRaiseChangedEvent(DoorPara obj)
  721. //{
  722. // InvokeClient.Instance.Service.DoOperation($"TM.{obj.ModuleName}TSlitDoor.{obj?.IsOpen}");
  723. //}
  724. //private void UIEvents_LLEDoorRaiseChangedEvent(DoorPara obj)
  725. //{
  726. // InvokeClient.Instance.Service.DoOperation($"TM.{obj.ModuleName}ESlitDoor.{obj?.IsOpen}");
  727. //}
  728. private async void RobotMoveInfoChanged(RobotMoveInfo oldValue, RobotMoveInfo newValue)
  729. {
  730. if (oldValue == null || newValue == null)
  731. {
  732. return;
  733. }
  734. if ((oldValue.Action == RobotAction.None || oldValue.ArmTarget != newValue.ArmTarget) && (newValue.Action == RobotAction.Placing || newValue.Action == RobotAction.Picking))
  735. {
  736. var TMRobotMoveActionBladeTarget = newValue.BladeTarget;
  737. if (TMRobotMoveActionBladeTarget != null)
  738. {
  739. RobotTarget = TMRobotMoveActionBladeTarget.ToString();
  740. }
  741. else
  742. {
  743. return;
  744. }
  745. var values = RobotTarget.Split('.');
  746. var arm = values[0];
  747. var module = values[1];
  748. if (arm == "ArmA")
  749. {
  750. var robot1Robot1TAction= (WaferRobotTAction)Enum.Parse(typeof(WaferRobotTAction), module, true);
  751. await ChangePosition(robot1Robot1TAction);
  752. if (Robot1TAction != robot1Robot1TAction)
  753. {
  754. Robot1TAction = robot1Robot1TAction;
  755. await Task.Delay(600);
  756. }
  757. //await Task.Delay(1500);
  758. Robot1XAction = WaferRobotXAction.Extend;
  759. while ((newValue.Action == RobotAction.Placing && ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[0].WaferStatus != 0) || (newValue.Action == RobotAction.Picking && ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[0].WaferStatus == 0))
  760. {
  761. await Task.Delay(100);
  762. }
  763. Robot1XAction = WaferRobotXAction.Retract;
  764. }
  765. else if (arm == "ArmB")
  766. {
  767. var robot2Robot1TAction = (WaferRobotTAction)Enum.Parse(typeof(WaferRobotTAction), module, true);
  768. await ChangePosition(robot2Robot1TAction);
  769. //Robot2TAction = robot2Robot1TAction;
  770. //await Task.Delay(1500);
  771. if (Robot2TAction != robot2Robot1TAction)
  772. {
  773. Robot2TAction = robot2Robot1TAction;
  774. await Task.Delay(600);
  775. }
  776. Robot2XAction = WaferRobotXAction.Extend;
  777. while ((newValue.Action == RobotAction.Placing && ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[1].WaferStatus != 0) || (newValue.Action == RobotAction.Picking && ModuleManager.ModuleInfos["EfemRobot"].WaferManager.Wafers[1].WaferStatus == 0))
  778. {
  779. await Task.Delay(100);
  780. }
  781. Robot2XAction = WaferRobotXAction.Retract;
  782. }
  783. }
  784. #region Home
  785. else if (oldValue.Action == RobotAction.None && newValue.Action == RobotAction.Homing)
  786. {
  787. if (Robot1XAction == WaferRobotXAction.Extend)
  788. {
  789. Robot1XAction = WaferRobotXAction.Retract;
  790. }
  791. if (Robot2XAction == WaferRobotXAction.Extend)
  792. {
  793. Robot2XAction = WaferRobotXAction.Retract;
  794. }
  795. await Task.Delay(2000);
  796. if (Robot1TAction != WaferRobotTAction.T_Origin)
  797. {
  798. Robot1TAction = WaferRobotTAction.T_Origin;
  799. }
  800. if (Robot2TAction != WaferRobotTAction.T_Origin)
  801. {
  802. Robot2TAction = WaferRobotTAction.T_Origin;
  803. }
  804. }
  805. #endregion
  806. }
  807. private async Task ChangePosition(WaferRobotTAction waferRobotTAction)
  808. {
  809. //CurrentRobotPosition = RobotPosition.Origin;
  810. //await Task.Delay(1000);
  811. if (waferRobotTAction == WaferRobotTAction.LP1)
  812. {
  813. CurrentRobotPosition = RobotPosition.Left;
  814. }
  815. else if (waferRobotTAction == WaferRobotTAction.LP3)
  816. {
  817. CurrentRobotPosition = RobotPosition.Right;
  818. }
  819. else if (waferRobotTAction == WaferRobotTAction.LP2)
  820. {
  821. CurrentRobotPosition = RobotPosition.Middle;
  822. }
  823. else
  824. {
  825. CurrentRobotPosition = RobotPosition.Origin;
  826. }
  827. await Task.Delay(600);
  828. }
  829. #endregion
  830. }
  831. }