VenusSeOperationOverViewModel.cs 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664
  1. using MECF.Framework.Common.CommonData;
  2. using MECF.Framework.Common.DataCenter;
  3. using MECF.Framework.Common.Equipment;
  4. using MECF.Framework.Common.OperationCenter;
  5. using OpenSEMI.ClientBase;
  6. using Prism.Commands;
  7. using Prism.Mvvm;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using Venus_Core;
  14. using Venus_Themes.CustomControls;
  15. using System.Windows.Threading;
  16. using Venus_MainPages.Unity;
  17. using Microsoft.VisualBasic;
  18. using ExcelLibrary.BinaryFileFormat;
  19. using MECF.Framework.Common.Schedulers;
  20. using Venus_MainPages.Views;
  21. using System.Windows;
  22. namespace Venus_MainPages.ViewModels
  23. {
  24. public class VenusSeOperationOverViewModel : BindableBase
  25. {
  26. #region 私有字段
  27. private ModuleInfo m_VCE1ModuleInfo;
  28. private ModuleInfo m_PMAModuleInfo;
  29. private ModuleInfo m_PMBModuleInfo;
  30. private ModuleInfo m_PMCModuleInfo;
  31. private ModuleInfo m_VPAModuleInfo;
  32. private ModuleInfo m_TMModuleInfo;
  33. public WaferInfo m_PMAWafer;
  34. public WaferInfo m_PMBWafer;
  35. public WaferInfo m_PMCWafer;
  36. public WaferInfo m_RobotUpperWafer;
  37. public WaferInfo m_RobotLowerWafer;
  38. public WaferInfo m_PAWafer;
  39. private int m_VCE1WaferCount;
  40. private bool m_PMAIsInstalled;
  41. private bool m_PMBIsInstalled;
  42. private bool m_PMCIsInstalled;
  43. private bool m_VCEIsInstalled;
  44. private bool m_VCEDoorIsOpen;
  45. private bool m_PMADoorIsOpen;
  46. private bool m_PMBDoorIsOpen;
  47. private bool m_PMCDoorIsOpen;
  48. private bool m_VCEOutDoorIsOpen;
  49. private Dictionary<string, object> m_RtDataValues = new Dictionary<string, object>();
  50. private List<string> m_RtDataKeys = new List<string>();
  51. private double m_PMAPercent;
  52. private double m_PMBPercent;
  53. private double m_PMCPercent;
  54. private int m_PickNum;
  55. private RecipeResult m_PMARecipeResult;
  56. private RecipeResult m_PMBRecipeResult;
  57. private RecipeResult m_PMCRecipeResult;
  58. private WaferAssociationInfo m_VCEwaferAssociation;
  59. private bool loadflag;
  60. #endregion
  61. #region 属性
  62. public RecipeResult PMARecipeResult
  63. {
  64. get { return m_PMARecipeResult; }
  65. set { SetProperty(ref m_PMARecipeResult, value); }
  66. }
  67. public RecipeResult PMBRecipeResult
  68. {
  69. get { return m_PMBRecipeResult; }
  70. set { SetProperty(ref m_PMBRecipeResult, value); }
  71. }
  72. public RecipeResult PMCRecipeResult
  73. {
  74. get { return m_PMCRecipeResult; }
  75. set { SetProperty(ref m_PMCRecipeResult, value); }
  76. }
  77. public double PMAPercent
  78. {
  79. get { return m_PMAPercent; }
  80. set { SetProperty(ref m_PMAPercent, value); }
  81. }
  82. public double PMBPercent
  83. {
  84. get { return m_PMBPercent; }
  85. set { SetProperty(ref m_PMBPercent, value); }
  86. }
  87. public double PMCPercent
  88. {
  89. get { return m_PMCPercent; }
  90. set { SetProperty(ref m_PMCPercent, value); }
  91. }
  92. public int PickNum
  93. {
  94. get { return m_PickNum; }
  95. set { SetProperty(ref m_PickNum, value); }
  96. }
  97. public WaferInfo PMAWafer
  98. {
  99. get { return m_PMAWafer; }
  100. set { SetProperty(ref m_PMAWafer, value); }
  101. }
  102. public WaferInfo PMBWafer
  103. {
  104. get { return m_PMBWafer; }
  105. set { SetProperty(ref m_PMBWafer, value); }
  106. }
  107. public WaferInfo PMCWafer
  108. {
  109. get { return m_PMCWafer; }
  110. set { SetProperty(ref m_PMCWafer, value); }
  111. }
  112. public WaferInfo RobotUpperWafer
  113. {
  114. get { return m_RobotUpperWafer; }
  115. set { SetProperty(ref m_RobotUpperWafer, value); }
  116. }
  117. public WaferInfo RobotLowerWafer
  118. {
  119. get { return m_RobotLowerWafer; }
  120. set { SetProperty(ref m_RobotLowerWafer, value); }
  121. }
  122. public WaferInfo PAWafer
  123. {
  124. get { return m_PAWafer; }
  125. set { SetProperty(ref m_PAWafer, value); }
  126. }
  127. public ModuleInfo VCE1ModuleInfo
  128. {
  129. get { return m_VCE1ModuleInfo; }
  130. set
  131. {
  132. SetProperty(ref m_VCE1ModuleInfo, value);
  133. }
  134. }
  135. public ModuleInfo PMAModuleInfo
  136. {
  137. get { return m_PMAModuleInfo; }
  138. set
  139. {
  140. SetProperty(ref m_PMAModuleInfo, value);
  141. }
  142. }
  143. public ModuleInfo PMBModuleInfo
  144. {
  145. get { return m_PMBModuleInfo; }
  146. set
  147. {
  148. SetProperty(ref m_PMBModuleInfo, value);
  149. }
  150. }
  151. public ModuleInfo PMCModuleInfo
  152. {
  153. get { return m_PMCModuleInfo; }
  154. set
  155. {
  156. SetProperty(ref m_PMCModuleInfo, value);
  157. }
  158. }
  159. public ModuleInfo VPAModuleInfo
  160. {
  161. get { return m_VPAModuleInfo; }
  162. set
  163. {
  164. SetProperty(ref m_VPAModuleInfo, value);
  165. }
  166. }
  167. public ModuleInfo TMModuleInfo
  168. {
  169. get { return m_TMModuleInfo; }
  170. set
  171. {
  172. SetProperty(ref m_TMModuleInfo, value);
  173. }
  174. }
  175. public bool PMAIsInstalled
  176. {
  177. get { return m_PMAIsInstalled; }
  178. set
  179. {
  180. SetProperty(ref m_PMAIsInstalled, value);
  181. }
  182. }
  183. public bool PMBIsInstalled
  184. {
  185. get { return m_PMBIsInstalled; }
  186. set
  187. {
  188. SetProperty(ref m_PMBIsInstalled, value);
  189. }
  190. }
  191. public bool PMCIsInstalled
  192. {
  193. get { return m_PMCIsInstalled; }
  194. set
  195. {
  196. SetProperty(ref m_PMCIsInstalled, value);
  197. }
  198. }
  199. public bool VCEIsInstalled
  200. {
  201. get { return m_VCEIsInstalled; }
  202. set
  203. {
  204. SetProperty(ref m_VCEIsInstalled, value);
  205. }
  206. }
  207. public bool VCEDoorIsOpen { get => m_VCEDoorIsOpen; set => SetProperty(ref m_VCEDoorIsOpen, value); }
  208. public bool PMADoorIsOpen { get => m_PMADoorIsOpen; set => SetProperty(ref m_PMADoorIsOpen, value); }
  209. public bool PMBDoorIsOpen { get => m_PMBDoorIsOpen; set => SetProperty(ref m_PMBDoorIsOpen, value); }
  210. public bool PMCDoorIsOpen { get => m_PMCDoorIsOpen; set => SetProperty(ref m_PMCDoorIsOpen, value); }
  211. public bool VCEOutDoorIsOpen { get => m_VCEOutDoorIsOpen; set => SetProperty(ref m_VCEOutDoorIsOpen, value); }
  212. public int VCE1WaferCount
  213. {
  214. get { return m_VCE1WaferCount; }
  215. set
  216. {
  217. SetProperty(ref m_VCE1WaferCount, value);
  218. }
  219. }
  220. public Dictionary<string, object> RtDataValues
  221. {
  222. get { return m_RtDataValues; }
  223. set { SetProperty(ref m_RtDataValues, value); }
  224. }
  225. public WaferAssociationInfo VCEwaferAssociation
  226. {
  227. get { return m_VCEwaferAssociation; }
  228. set { SetProperty(ref m_VCEwaferAssociation, value); }
  229. }
  230. #endregion
  231. #region 命令
  232. private DelegateCommand _HomeAll;
  233. public DelegateCommand HomeAll => _HomeAll ?? (_HomeAll = new DelegateCommand(onHomeAll));
  234. private DelegateCommand _SetAutoMode;
  235. public DelegateCommand SetAutoMode => _SetAutoMode ?? (_SetAutoMode = new DelegateCommand(onSetAutoMode));
  236. private DelegateCommand _SetManualMode;
  237. public DelegateCommand SetManualMode => _SetManualMode ?? (_SetManualMode = new DelegateCommand(onSetManualMode));
  238. private DelegateCommand _StartSETMCycle;
  239. public DelegateCommand StartSETMCycle => _StartSETMCycle ?? (_StartSETMCycle = new DelegateCommand(onStartSETMCycle));
  240. private DelegateCommand<object> _StartCommand;
  241. public DelegateCommand<object> StartCommand =>
  242. _StartCommand ?? (_StartCommand = new DelegateCommand<object>(OnStart));
  243. private DelegateCommand _StopCycle;
  244. public DelegateCommand StopCycle => _StopCycle ?? (_StopCycle = new DelegateCommand(onStopCycle));
  245. private DelegateCommand _VCEHome;
  246. public DelegateCommand VCEHome => _VCEHome ?? (_VCEHome = new DelegateCommand(vceHome));
  247. private DelegateCommand _VCEReadMap;
  248. public DelegateCommand VCEReadMap => _VCEReadMap ?? (_VCEReadMap = new DelegateCommand(vceReadMap));
  249. private DelegateCommand _VCELoadPrepare;
  250. public DelegateCommand VCELoadPrepare =>
  251. _VCELoadPrepare ?? (_VCELoadPrepare = new DelegateCommand(vceLoadPrepare));
  252. private DelegateCommand __VCELoad;
  253. public DelegateCommand VCELoad =>
  254. __VCELoad ?? (__VCELoad = new DelegateCommand(vceLoad));
  255. private DelegateCommand _VCEUnLoad;
  256. public DelegateCommand VCEUnLoad =>
  257. _VCEUnLoad ?? (_VCEUnLoad = new DelegateCommand(vceUnLoad));
  258. private DelegateCommand _SMIFLoad;
  259. public DelegateCommand SMIFLoad =>
  260. _SMIFLoad ?? (_SMIFLoad = new DelegateCommand(smifLoad));
  261. private DelegateCommand _SMIFULoad;
  262. public DelegateCommand SMIFULoad =>
  263. _SMIFULoad ?? (_SMIFULoad = new DelegateCommand(smifUnLoad));
  264. private DelegateCommand _tmhome;
  265. public DelegateCommand TmHome =>
  266. _tmhome ?? (_tmhome = new DelegateCommand(tmhome));
  267. private DelegateCommand _tmPick;
  268. public DelegateCommand TmPick =>
  269. _tmPick ?? (_tmPick = new DelegateCommand(tmpick));
  270. private DelegateCommand _tmPlace;
  271. public DelegateCommand TMPlace =>
  272. _tmPlace ?? (_tmPlace = new DelegateCommand(tmplace));
  273. private DelegateCommand _tmSave;
  274. private DelegateCommand _LoadCommand;
  275. public DelegateCommand LoadCommand =>
  276. _LoadCommand ?? (_LoadCommand = new DelegateCommand(OnLoad));
  277. private DelegateCommand _PauseAllJobCommand;
  278. public DelegateCommand PauseAllJobCommand =>
  279. _PauseAllJobCommand ?? (_PauseAllJobCommand = new DelegateCommand(OnPauseAllJob));
  280. private DelegateCommand _AbortAllCommand;
  281. public DelegateCommand AbortAllCommand =>
  282. _AbortAllCommand ?? (_AbortAllCommand = new DelegateCommand(OnAbortAll));
  283. private DelegateCommand<object> _SetSequenceCommand;
  284. public DelegateCommand<object> SetSequenceCommand =>
  285. _SetSequenceCommand ?? (_SetSequenceCommand = new DelegateCommand<object>(OnSetSequence));
  286. private DelegateCommand<object> _CreateJobCommand;
  287. public DelegateCommand<object> CreateJobCommand =>
  288. _CreateJobCommand ?? (_CreateJobCommand = new DelegateCommand<object>(OnCreateJob));
  289. private DelegateCommand<object> _SelectAllCommand;
  290. public DelegateCommand<object> SelectAllCommand =>
  291. _SelectAllCommand ?? (_SelectAllCommand = new DelegateCommand<object>(OnSelectAll));
  292. private DelegateCommand<object> _ReturnAllWafer;
  293. public DelegateCommand<object> ReturnAllWafer =>
  294. _ReturnAllWafer ?? (_ReturnAllWafer = new DelegateCommand<object>(OnReturnAllWafer));
  295. #endregion
  296. #region 构造函数
  297. public VenusSeOperationOverViewModel()
  298. {
  299. //页面不刷错的方法 页面中的PM做成List的形式 通过itemsource显示 同时提供各个位置的pm点位 旋转角度
  300. VCE1WaferCount = 25;
  301. string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
  302. PMAIsInstalled = allModules.Contains("PMA");
  303. PMBIsInstalled = allModules.Contains("PMB");
  304. PMCIsInstalled = allModules.Contains("PMC");
  305. VCEIsInstalled = allModules.Contains("VCE1");
  306. addDataKeys();
  307. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  308. VCEDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.VCESlitDoorClosed");
  309. PMADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMASlitDoorClosed");
  310. PMBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMBSlitDoorClosed");
  311. PMCDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMCSlitDoorClosed");
  312. VCEOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCE1.VCEOutDoorClosed");
  313. loadflag = false;
  314. DispatcherTimer timer = new DispatcherTimer();
  315. timer.Interval = TimeSpan.FromSeconds(0.1);
  316. timer.Tick += Timer_Tick;
  317. timer.Start();
  318. }
  319. #endregion
  320. #region 命令实现
  321. private void OnLoad()
  322. {
  323. if (VCEIsInstalled && !loadflag)
  324. {
  325. VCEwaferAssociation = new WaferAssociationInfo
  326. {
  327. ModuleData = ModuleManager.ModuleInfos["VCE1"]
  328. };
  329. loadflag = true;
  330. }
  331. }
  332. private void OnSelectAll(object obj)
  333. {
  334. var info = obj as WaferAssociationInfo;
  335. info.SlotFrom = 1;
  336. info.SlotTo = 25;
  337. AssociateSequence(info, true);
  338. }
  339. private void OnReturnAllWafer(object obj)
  340. {
  341. WaferDialogView dialog = new WaferDialogView()
  342. {
  343. Owner = Application.Current.MainWindow,
  344. };
  345. dialog.Height = 300;
  346. dialog.Width = 400;
  347. double angel = 0;
  348. double coolingtime = 0;
  349. string message = "Please Confirm Return Wafer";
  350. WaferDialogViewModel vm = new WaferDialogViewModel();
  351. vm.ConfirmText = message;
  352. dialog.DataContext = vm;
  353. if (dialog.ShowDialog() == true)
  354. {
  355. if ((bool)dialog.AlignFlag == true && !string.IsNullOrEmpty(dialog.Angle))
  356. {
  357. angel = Convert.ToDouble(dialog.Angle);
  358. }
  359. if ((bool)dialog.CoolingFlag == true && !string.IsNullOrEmpty(dialog.CoolingTime))
  360. {
  361. coolingtime = Convert.ToDouble(dialog.CoolingTime);
  362. }
  363. InvokeClient.Instance.Service.DoOperation("System.ReturnAllSEWafer", dialog.CoolingFlag, coolingtime, dialog.AlignFlag, angel);
  364. }
  365. }
  366. private void OnCreateJob(object obj)
  367. {
  368. var info = obj as WaferAssociationInfo;
  369. List<string> slotSequence = new List<string>();
  370. info.ModuleData.WaferManager.Wafers.ForEach(key => { slotSequence.Insert(0, key.SequenceName); });
  371. string jobId = info.LotId.Trim();
  372. if (string.IsNullOrEmpty(jobId))
  373. jobId = "CJ_Local_" + info.ModuleData.ModuleID;
  374. info.LotId = jobId;
  375. info.JobID = jobId;
  376. info.JobStatus = "WaitingForStart";
  377. info.LotIdSaved = true;
  378. Dictionary<string, object> param = new Dictionary<string, object>()
  379. {
  380. {"JobId", jobId},
  381. {"Module", info.ModuleData.ModuleID},
  382. {"SlotSequence", slotSequence.ToArray()},
  383. {"AutoStart", true},
  384. };
  385. InvokeClient.Instance.Service.DoOperation("System.CreateSEJob", param);
  386. }
  387. private void OnSetSequence(object obj)
  388. {
  389. var info = obj as WaferInfo;
  390. bool flag = info.SequenceName != "" ? false : true;
  391. if (info.ModuleID == "VCE1")
  392. {
  393. AssociateSequence(VCEwaferAssociation, flag, info.SlotID);
  394. }
  395. }
  396. private void OnPauseAllJob()
  397. {
  398. InvokeClient.Instance.Service.DoOperation("System.PauseJob", VCEwaferAssociation.JobID);
  399. }
  400. private void OnAbortAll()
  401. {
  402. InvokeClient.Instance.Service.DoOperation("System.SEAbort");
  403. }
  404. private void AssociateSequence(WaferAssociationInfo info, bool flag, int slot = -1)
  405. {
  406. List<WaferInfo> wafers = info.ModuleData.WaferManager.Wafers;
  407. if (slot >= 0) //by wafer
  408. {
  409. int index = wafers.Count - slot - 1;
  410. if (index < wafers.Count)
  411. {
  412. //has wafer
  413. if (flag && !(wafers[index].WaferStatus == 0))
  414. wafers[index].SequenceName = info.SequenceName;
  415. else
  416. wafers[index].SequenceName = string.Empty;
  417. }
  418. }
  419. else //by from-to
  420. {
  421. for (int i = info.SlotFrom - 1; i < info.SlotTo; i++)
  422. {
  423. int index = wafers.Count - i - 1;
  424. if (index < wafers.Count)
  425. {
  426. if (flag && !(wafers[index].WaferStatus == 0))
  427. wafers[index].SequenceName = info.SequenceName;
  428. else
  429. wafers[index].SequenceName = string.Empty;
  430. }
  431. }
  432. }
  433. if (VCEIsInstalled)
  434. {
  435. VCEwaferAssociation = info;
  436. }
  437. }
  438. private void addDataKeys()
  439. {
  440. m_RtDataKeys.Add($"SETM.VCESlitDoorClosed");
  441. m_RtDataKeys.Add($"SETM.PMASlitDoorClosed");
  442. m_RtDataKeys.Add($"SETM.PMBSlitDoorClosed");
  443. m_RtDataKeys.Add($"SETM.PMCSlitDoorClosed");
  444. m_RtDataKeys.Add($"VCE1.VCEOutDoorClosed");
  445. m_RtDataKeys.Add($"SEScheduler.CycledWafer");
  446. m_RtDataKeys.Add($"SEScheduler.CycleSetPoint");
  447. m_RtDataKeys.Add($"SEScheduler.CycleCount");
  448. m_RtDataKeys.Add($"SEScheduler.ThroughPut");
  449. if (PMAIsInstalled)
  450. {
  451. m_RtDataKeys.Add($"PMA.ProcessHighPressure");
  452. m_RtDataKeys.Add($"PMA.VentingFlag");
  453. m_RtDataKeys.Add($"PMA.CurrentRecipeResult");
  454. }
  455. if (PMBIsInstalled)
  456. {
  457. m_RtDataKeys.Add($"PMB.ProcessHighPressure");
  458. m_RtDataKeys.Add($"PMB.VentingFlag");
  459. m_RtDataKeys.Add($"PMB.CurrentRecipeResult");
  460. }
  461. if (PMCIsInstalled)
  462. {
  463. m_RtDataKeys.Add($"PMC.ProcessHighPressure");
  464. m_RtDataKeys.Add($"PMC.VentingFlag");
  465. m_RtDataKeys.Add($"PMC.CurrentRecipeResult");
  466. }
  467. }
  468. private void onHomeAll()
  469. {
  470. InvokeClient.Instance.Service.DoOperation("System.HomeAll");
  471. }
  472. private void onSetAutoMode()
  473. {
  474. InvokeClient.Instance.Service.DoOperation("System.SetAutoMode");
  475. }
  476. private void onSetManualMode()
  477. {
  478. InvokeClient.Instance.Service.DoOperation("System.SetManualMode");
  479. }
  480. private void onStopCycle()
  481. {
  482. InvokeClient.Instance.Service.DoOperation("System.StopSECycle");
  483. }
  484. private void onStartSETMCycle()
  485. {
  486. List<string> stations = new List<string>();
  487. stations.Add("VCE1");
  488. stations.Add("VPA");
  489. if (PMAIsInstalled)
  490. {
  491. stations.Add("PMA");
  492. }
  493. if (PMBIsInstalled)
  494. {
  495. stations.Add("PMB");
  496. }
  497. if (PMCIsInstalled)
  498. {
  499. stations.Add("PMC");
  500. }
  501. stations.Add("VCE1");
  502. InvokeClient.Instance.Service.DoOperation("System.SETMCycle", stations.ToArray(), 1);
  503. }
  504. private void OnStart(object obj)
  505. {
  506. var info = obj as WaferAssociationInfo;
  507. InvokeClient.Instance.Service.DoOperation("System.StartSEJob", info.LotId);
  508. }
  509. private void vceHome()
  510. {
  511. InvokeClient.Instance.Service.DoOperation("VCE1.HOME");
  512. }
  513. private void vceReadMap()
  514. {
  515. InvokeClient.Instance.Service.DoOperation("VCE1.ReadMap");
  516. }
  517. private void vceLoadPrepare()
  518. {
  519. InvokeClient.Instance.Service.DoOperation("VCE1.LoadPrepare");
  520. }
  521. private void vceLoad()
  522. {
  523. InvokeClient.Instance.Service.DoOperation("VCE1.SafeLoad");
  524. }
  525. private void vceUnLoad()
  526. {
  527. InvokeClient.Instance.Service.DoOperation("VCE1.SafeUnload");
  528. }
  529. private void smifLoad() { }
  530. private void smifUnLoad() { }
  531. private void tmhome()
  532. {
  533. InvokeClient.Instance.Service.DoOperation("SETM.Home");
  534. }
  535. private void tmpick()
  536. {
  537. ModuleName target = ModuleName.VCE1;
  538. int slot = PickNum;
  539. MoveItem moveItem = new MoveItem(target, slot - 1, ModuleName.TMRobot, 0, 0);
  540. Queue<MoveItem> que = new Queue<MoveItem>();
  541. que.Enqueue(moveItem);
  542. InvokeClient.Instance.Service.DoOperation("SETM.Pick", que);
  543. }
  544. private void tmplace()
  545. {
  546. ModuleName target = ModuleName.VCE1;
  547. int slot = PickNum;
  548. MoveItem moveItem = new MoveItem( ModuleName.TMRobot, 0, target, slot - 1, 0);
  549. Queue<MoveItem> que = new Queue<MoveItem>();
  550. que.Enqueue(moveItem);
  551. InvokeClient.Instance.Service.DoOperation("SETM.Place", que);
  552. }
  553. #endregion
  554. #region 私有方法
  555. private void Timer_Tick(object sender, EventArgs e)
  556. {
  557. try
  558. {
  559. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  560. VCEDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.VCESlitDoorClosed");
  561. PMADoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMASlitDoorClosed");
  562. PMBDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMBSlitDoorClosed");
  563. PMCDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "SETM.PMCSlitDoorClosed");
  564. VCEOutDoorIsOpen = !CommonFunction.GetValue<bool>(RtDataValues, "VCE1.VCEOutDoorClosed");
  565. if (PMAIsInstalled == true)
  566. {
  567. PMAModuleInfo = ModuleManager.ModuleInfos["PMA"];
  568. PMAWafer = PMAModuleInfo.WaferManager.Wafers[0];
  569. PMAPercent = CommonFunction.GetValue<double>(RtDataValues, "PMA.ProcessHighPressure") * 248 / 760000;
  570. PMARecipeResult = CommonFunction.GetValue<RecipeResult>(RtDataValues, "PMA.CurrentRecipeResult");
  571. }
  572. if (PMBIsInstalled == true)
  573. {
  574. PMBModuleInfo = ModuleManager.ModuleInfos["PMB"];
  575. PMBWafer = PMBModuleInfo.WaferManager.Wafers[0];
  576. PMBPercent = CommonFunction.GetValue<double>(RtDataValues, "PMB.ProcessHighPressure") * 248 / 760000;
  577. PMBRecipeResult = CommonFunction.GetValue<RecipeResult>(RtDataValues, "PMB.CurrentRecipeResult");
  578. }
  579. if (PMCIsInstalled == true)
  580. {
  581. PMCModuleInfo = ModuleManager.ModuleInfos["PMC"];
  582. PMCWafer = PMCModuleInfo.WaferManager.Wafers[0];
  583. PMCPercent = CommonFunction.GetValue<double>(RtDataValues, "PMC.ProcessHighPressure") * 248 / 760000;
  584. PMCRecipeResult = CommonFunction.GetValue<RecipeResult>(RtDataValues, "PMC.CurrentRecipeResult");
  585. }
  586. if (VCEIsInstalled == true)
  587. {
  588. VCE1ModuleInfo = ModuleManager.ModuleInfos["VCE1"];
  589. }
  590. TMModuleInfo = ModuleManager.ModuleInfos["TMRobot"];
  591. RobotUpperWafer = TMModuleInfo.WaferManager.Wafers[0];
  592. RobotLowerWafer = TMModuleInfo.WaferManager.Wafers[1];
  593. PAWafer = ModuleManager.ModuleInfos["VPA"].WaferManager.Wafers[0];
  594. }
  595. catch (Exception ex)
  596. {
  597. }
  598. }
  599. #endregion
  600. }
  601. }