LoaderSetupViewModel.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967
  1. using Aitex.Core.Common;
  2. using Aitex.Core.UI.MVVM;
  3. using Aitex.Core.Util;
  4. using Aitex.Core.Utilities;
  5. using LiveCharts;
  6. using MECF.Framework.Common.Beckhoff.AxisProvider;
  7. using MECF.Framework.Common.Beckhoff.Station;
  8. using MECF.Framework.Common.CommonData.Loader;
  9. using MECF.Framework.Common.CommonData.PUF;
  10. using MECF.Framework.Common.DataCenter;
  11. using MECF.Framework.Common.Equipment;
  12. using MECF.Framework.Common.OperationCenter;
  13. using MECF.Framework.Common.Utilities;
  14. using OpenSEMI.ClientBase;
  15. using CyberX8_MainPages.Unity;
  16. using Prism.Mvvm;
  17. using System;
  18. using System.Collections.Generic;
  19. using System.Linq;
  20. using System.Text;
  21. using System.Threading.Tasks;
  22. using System.Timers;
  23. using System.Windows;
  24. using System.Windows.Documents;
  25. using System.Windows.Input;
  26. using System.Windows.Threading;
  27. using WaferInfo = OpenSEMI.ClientBase.WaferInfo;
  28. namespace CyberX8_MainPages.ViewModels
  29. {
  30. public class LoaderSetupViewModel : BindableBase
  31. {
  32. #region 常量
  33. private const string MOTION_DATA = "MotionData";
  34. private const string IS_SWITCH_ON = "IsSwitchOn";
  35. private const string CURRENT_STATION = "CurrentStation";
  36. private const string SIDE_DATA = "SideData";
  37. private const string COMMON_DATA = "CommonData";
  38. private const string MOTOR_POSITION = "MotorPosition";
  39. private const string CURRENT_OPERATION = "CurrentOperation";
  40. private const double LOADER_ROTATION_DIFFER = 90;
  41. #endregion
  42. #region 内部变量
  43. #region shuttleA
  44. /// <summary>
  45. /// shuttleA模块名称
  46. /// </summary>
  47. private string _shuttleAModuleName;
  48. /// <summary>
  49. /// shuttleA运动数据
  50. /// </summary>
  51. private CommandMotionData _shuttleAMotorData;
  52. /// <summary>
  53. /// shuttleA当前位置
  54. /// </summary>
  55. private string _shuttleACurrentStation;
  56. #endregion
  57. #region TiltA
  58. /// <summary>
  59. /// tiltA模块名称
  60. /// </summary>
  61. private string _tiltAModuleName;
  62. /// <summary>
  63. /// tiltA运动数据
  64. /// </summary>
  65. private CommandMotionData _tiltAMotorData;
  66. /// <summary>
  67. /// tiltA当前位置
  68. /// </summary>
  69. private string _tiltACurrentStation;
  70. /// <summary>
  71. /// Loader1 TiltA实际位置数据
  72. /// </summary>
  73. private double _loader1TiltAMotorPosition;
  74. #endregion
  75. #region CRSA
  76. /// <summary>
  77. /// crsA模块名称
  78. /// </summary>
  79. private string _crsAModuleName;
  80. /// <summary>
  81. /// CRSA运动数据
  82. /// </summary>
  83. private CommandMotionData _crsAMotorData;
  84. /// <summary>
  85. /// crsA当前位置
  86. /// </summary>
  87. private string _crsACurrentStation;
  88. #endregion
  89. #region Rotation
  90. /// <summary>
  91. /// rotation模块名称
  92. /// </summary>
  93. private string _rotationModuleName;
  94. /// <summary>
  95. /// rotation运动数据
  96. /// </summary>
  97. private CommandMotionData _rotationMotorData;
  98. /// <summary>
  99. /// rotation当前位置
  100. /// </summary>
  101. private string _rotationCurrentStation;
  102. /// <summary>
  103. /// Loader1 Rotation UI对应位置
  104. /// </summary>
  105. private double _loader1RotationPosition;
  106. /// <summary>
  107. /// Loader1 Rotation实际位置数据
  108. /// </summary>
  109. private double _loader1RotationMotorPosition;
  110. #endregion
  111. #region shuttleB
  112. /// <summary>
  113. /// shuttleB模块名称
  114. /// </summary>
  115. private string _shuttleBModuleName;
  116. /// <summary>
  117. /// shuttleB运动数据
  118. /// </summary>
  119. private CommandMotionData _shuttleBMotorData;
  120. /// <summary>
  121. /// shuttleB当前位置
  122. /// </summary>
  123. private string _shuttleBCurrentStation;
  124. #endregion
  125. #region TiltB
  126. /// <summary>
  127. /// tiltB模块名称
  128. /// </summary>
  129. private string _tiltBModuleName;
  130. /// <summary>
  131. /// tiltB运动数据
  132. /// </summary>
  133. private CommandMotionData _tiltBMotorData;
  134. /// <summary>
  135. /// tiltB当前位置
  136. /// </summary>
  137. private string _tiltBCurrentStation;
  138. /// <summary>
  139. /// Loader1 TiltB实际位置数据
  140. /// </summary>
  141. private double _loader1TiltBMotorPosition;
  142. #endregion
  143. #region CRSB
  144. /// <summary>
  145. /// crsB模块名称
  146. /// </summary>
  147. private string _crsBModuleName;
  148. /// <summary>
  149. /// crsB运动数据
  150. /// </summary>
  151. private CommandMotionData _crsBMotorData;
  152. /// <summary>
  153. /// crsB当前位置
  154. /// </summary>
  155. private string _crsBCurrentStation;
  156. #endregion
  157. #region SideA
  158. /// <summary>
  159. /// Side A模块名称
  160. /// </summary>
  161. private string _sideAModuleName;
  162. /// <summary>
  163. /// Side A数据
  164. /// </summary>
  165. private LoaderSideData _sideAData;
  166. #endregion
  167. #region SideB
  168. /// <summary>
  169. /// Side B模块名称
  170. /// </summary>
  171. private string _sideBModuleName;
  172. /// <summary>
  173. /// Side B数据
  174. /// </summary>
  175. private LoaderSideData _sideBData;
  176. #endregion
  177. #region Common
  178. /// <summary>
  179. /// Common模块名称
  180. /// </summary>
  181. private string _commonModuleName;
  182. /// <summary>
  183. /// 公共模块数据
  184. /// </summary>
  185. public LoaderCommonData _commonData;
  186. #endregion
  187. #region 系统数据
  188. /// <summary>
  189. /// Wafer尺寸
  190. /// </summary>
  191. private int _waferSize = 0;
  192. /// <summary>
  193. /// 查询后台数据集合
  194. /// </summary>
  195. private List<string> _rtDataKeys = new List<string>();
  196. /// <summary>
  197. /// Busy状态
  198. /// </summary>
  199. private bool _isBusy;
  200. /// <summary>
  201. /// CRSH状态
  202. /// </summary>
  203. private bool _isCRSH;
  204. /// <summary>
  205. /// label系列
  206. /// </summary>
  207. private ChartValues<string> _labelSeries;
  208. /// <summary>
  209. /// Value系列
  210. /// </summary>
  211. private ChartValues<double> _valueSeries;
  212. /// <summary>
  213. /// 定时器
  214. /// </summary>
  215. DispatcherTimer _timer;
  216. /// <summary>
  217. /// rt查询key数值字典
  218. /// </summary>
  219. private Dictionary<string, object> _rtDataValueDic = new Dictionary<string, object>();
  220. /// <summary>
  221. /// PlateOutCamera Enable
  222. /// </summary>
  223. private Visibility _plateOutCameraVisibility = Visibility.Hidden;
  224. /// <summary>
  225. /// Loader的sideA开启状态
  226. /// </summary>
  227. private bool m_loaderWaferVisibleA = false;
  228. /// <summary>
  229. /// Loader的sideB开启状态
  230. /// </summary>
  231. private bool m_loaderWaferVisibleB = false;
  232. /// <summary>
  233. /// WaferA信息
  234. /// </summary>
  235. private WaferInfo m_loaderWaferA;
  236. /// <summary>
  237. /// WaferB信息
  238. /// </summary>
  239. private WaferInfo m_loaderWaferB;
  240. /// <summary>
  241. /// Loader模块信息
  242. /// </summary>
  243. private ModuleInfo _loaderModuleInfo;
  244. /// <summary>
  245. /// Loader是否安装
  246. /// </summary>
  247. private bool _loaderInstalled;
  248. /// <summary>
  249. /// 当前SideA操作
  250. /// </summary>
  251. private string _currentSideAOperation;
  252. /// <summary>
  253. /// 当前SideA操作
  254. /// </summary>
  255. private string _currentSideBOperation;
  256. #endregion
  257. #endregion
  258. #region 属性
  259. #region 系统数据
  260. public string Module { get; set; }
  261. /// <summary>
  262. /// 尺寸大小
  263. /// </summary>
  264. public int WaferSize { get { return _waferSize; } set { SetProperty(ref _waferSize, value); } }
  265. /// <summary>
  266. /// Busy状态
  267. /// </summary>
  268. public bool IsBusy { get { return _isBusy; } set { SetProperty(ref _isBusy, value); } }
  269. /// <summary>
  270. /// CRSH状态
  271. /// </summary>
  272. public bool IsCRSH { get { return _isCRSH; } set { SetProperty(ref _isCRSH, value); } }
  273. /// <summary>
  274. /// Label系列
  275. /// </summary>
  276. public ChartValues<string> LabelSeries { get { return _labelSeries; } set { SetProperty(ref _labelSeries, value); } }
  277. /// <summary>
  278. /// Value系列
  279. /// </summary>
  280. public ChartValues<double> ValueSeries { get { return _valueSeries; } set { SetProperty(ref _valueSeries, value); } }
  281. /// <summary>
  282. /// Loader的sideA开启状态
  283. /// </summary>
  284. public bool LoaderWaferVisibleA
  285. {
  286. get { return m_loaderWaferVisibleA; }
  287. set { SetProperty(ref m_loaderWaferVisibleA, value); }
  288. }
  289. /// <summary>
  290. /// Loader的sideB开启状态
  291. /// </summary>
  292. public bool LoaderWaferVisibleB
  293. {
  294. get { return m_loaderWaferVisibleB; }
  295. set { SetProperty(ref m_loaderWaferVisibleB, value); }
  296. }
  297. /// <summary>
  298. /// WaferA信息
  299. /// </summary>
  300. public WaferInfo LoaderWaferA
  301. {
  302. get { return m_loaderWaferA; }
  303. set { SetProperty(ref m_loaderWaferA, value); }
  304. }
  305. /// <summary>
  306. /// WaferB信息
  307. /// </summary>
  308. public WaferInfo LoaderWaferB
  309. {
  310. get { return m_loaderWaferB; }
  311. set { SetProperty(ref m_loaderWaferB, value); }
  312. }
  313. /// <summary>
  314. /// Loader模块信息
  315. /// </summary>
  316. public ModuleInfo LoaderModuleInfo
  317. {
  318. get { return _loaderModuleInfo; }
  319. set { SetProperty(ref _loaderModuleInfo, value); }
  320. }
  321. /// <summary>
  322. /// Loader是否安装
  323. /// </summary>
  324. public bool LoaderIsInstalled
  325. {
  326. get { return _loaderInstalled; }
  327. set { SetProperty(ref _loaderInstalled, value); }
  328. }
  329. /// <summary>
  330. /// 当前SideA操作
  331. /// </summary>
  332. public string CurrentSideAOperation
  333. {
  334. get { return _currentSideAOperation; }
  335. set { SetProperty(ref _currentSideAOperation, value); }
  336. }
  337. /// <summary>
  338. /// 当前SideB操作
  339. /// </summary>
  340. public string CurrentSideBOperation
  341. {
  342. get { return _currentSideBOperation; }
  343. set { SetProperty(ref _currentSideBOperation, value); }
  344. }
  345. #endregion
  346. #region shuttleA
  347. /// <summary>
  348. /// shuttleA名称
  349. /// </summary>
  350. public string ShuttleAModuleName
  351. {
  352. get { return _shuttleAModuleName; }
  353. set { SetProperty(ref _shuttleAModuleName, value); }
  354. }
  355. /// <summary>
  356. /// shuttleA运动数据
  357. /// </summary>
  358. public CommandMotionData ShuttleAMotionData
  359. {
  360. get { return _shuttleAMotorData; }
  361. set { SetProperty(ref _shuttleAMotorData, value); }
  362. }
  363. /// <summary>
  364. /// shuttleA当前位置
  365. /// </summary>
  366. public string ShuttleACurrentStation
  367. {
  368. get { return _shuttleACurrentStation; }
  369. set { SetProperty(ref _shuttleACurrentStation, value); }
  370. }
  371. #endregion
  372. #region TiltA
  373. /// <summary>
  374. /// TiltA名称
  375. /// </summary>
  376. public string TiltAModuleName
  377. {
  378. get { return _tiltAModuleName; }
  379. set { SetProperty(ref _tiltAModuleName, value); }
  380. }
  381. /// <summary>
  382. /// TiltA运动数据
  383. /// </summary>
  384. public CommandMotionData TiltAMotionData
  385. {
  386. get { return _tiltAMotorData; }
  387. set { SetProperty(ref _tiltAMotorData, value); }
  388. }
  389. /// <summary>
  390. /// TiltA当前位置
  391. /// </summary>
  392. public string TiltACurrentStation
  393. {
  394. get { return _tiltACurrentStation; }
  395. set { SetProperty(ref _tiltACurrentStation, value); }
  396. }
  397. /// <summary>
  398. /// Loader1 TiltA实际位置数据
  399. /// </summary>
  400. public double Loader1TiltAMotorPosition
  401. {
  402. get { return _loader1TiltAMotorPosition; }
  403. set { SetProperty(ref _loader1TiltAMotorPosition, value); }
  404. }
  405. #endregion
  406. #region CRSA
  407. /// <summary>
  408. /// CRSA名称
  409. /// </summary>
  410. public string CRSAModuleName
  411. {
  412. get { return _crsAModuleName; }
  413. set { SetProperty(ref _crsAModuleName, value); }
  414. }
  415. /// <summary>
  416. /// CRSA运动数据
  417. /// </summary>
  418. public CommandMotionData CRSAMotionData
  419. {
  420. get { return _crsAMotorData; }
  421. set { SetProperty(ref _crsAMotorData, value); }
  422. }
  423. /// <summary>
  424. /// CRSA当前位置
  425. /// </summary>
  426. public string CRSACurrentStation
  427. {
  428. get { return _crsACurrentStation; }
  429. set { SetProperty(ref _crsACurrentStation, value); }
  430. }
  431. #endregion
  432. #region Rotation
  433. /// <summary>
  434. /// Rotation名称
  435. /// </summary>
  436. public string RotationModuleName
  437. {
  438. get { return _rotationModuleName; }
  439. set { SetProperty(ref _rotationModuleName, value); }
  440. }
  441. /// <summary>
  442. /// Rotation运动数据
  443. /// </summary>
  444. public CommandMotionData RotationMotionData
  445. {
  446. get { return _rotationMotorData; }
  447. set { SetProperty(ref _rotationMotorData, value); }
  448. }
  449. /// <summary>
  450. /// Loader1 Rotation UI对应位置
  451. /// </summary>
  452. public double Loader1RotationPosition
  453. {
  454. get { return _loader1RotationPosition; }
  455. set { SetProperty(ref _loader1RotationPosition, value); }
  456. }
  457. /// <summary>
  458. /// Rotation当前位置
  459. /// </summary>
  460. public string RotationCurrentStation
  461. {
  462. get { return _rotationCurrentStation; }
  463. set { SetProperty(ref _rotationCurrentStation, value); }
  464. }
  465. /// <summary>
  466. /// Loader1 Rotation实际位置数据
  467. /// </summary>
  468. public double Loader1RotationMotorPosition
  469. {
  470. get { return _loader1RotationMotorPosition; }
  471. set { SetProperty(ref _loader1RotationMotorPosition, value); }
  472. }
  473. #endregion
  474. #region shuttleB
  475. /// <summary>
  476. /// shuttleB名称
  477. /// </summary>
  478. public string ShuttleBModuleName
  479. {
  480. get { return _shuttleBModuleName; }
  481. set { SetProperty(ref _shuttleBModuleName, value); }
  482. }
  483. /// <summary>
  484. /// shuttleB运动数据
  485. /// </summary>
  486. public CommandMotionData ShuttleBMotionData
  487. {
  488. get { return _shuttleBMotorData; }
  489. set { SetProperty(ref _shuttleBMotorData, value); }
  490. }
  491. /// <summary>
  492. /// shuttleB当前位置
  493. /// </summary>
  494. public string ShuttleBCurrentStation
  495. {
  496. get { return _shuttleBCurrentStation; }
  497. set { SetProperty(ref _shuttleBCurrentStation, value); }
  498. }
  499. #endregion
  500. #region TiltB
  501. /// <summary>
  502. /// TiltB名称
  503. /// </summary>
  504. public string TiltBModuleName
  505. {
  506. get { return _tiltBModuleName; }
  507. set { SetProperty(ref _tiltBModuleName, value); }
  508. }
  509. /// <summary>
  510. /// TiltB运动数据
  511. /// </summary>
  512. public CommandMotionData TiltBMotionData
  513. {
  514. get { return _tiltBMotorData; }
  515. set { SetProperty(ref _tiltBMotorData, value); }
  516. }
  517. /// <summary>
  518. /// TiltB当前位置
  519. /// </summary>
  520. public string TiltBCurrentStation
  521. {
  522. get { return _tiltBCurrentStation; }
  523. set { SetProperty(ref _tiltBCurrentStation, value); }
  524. }
  525. /// <summary>
  526. /// Loader1 TiltB实际位置数据
  527. /// </summary>
  528. public double Loader1TiltBMotorPosition
  529. {
  530. get { return _loader1TiltBMotorPosition; }
  531. set { SetProperty(ref _loader1TiltBMotorPosition, value); }
  532. }
  533. #endregion
  534. #region CRSB
  535. /// <summary>
  536. /// CRSB名称
  537. /// </summary>
  538. public string CRSBModuleName
  539. {
  540. get { return _crsBModuleName; }
  541. set { SetProperty(ref _crsBModuleName, value); }
  542. }
  543. /// <summary>
  544. /// CRSB运动数据
  545. /// </summary>
  546. public CommandMotionData CRSBMotionData
  547. {
  548. get { return _crsBMotorData; }
  549. set { SetProperty(ref _crsBMotorData, value); }
  550. }
  551. /// <summary>
  552. /// CRSB当前位置
  553. /// </summary>
  554. public string CRSBCurrentStation
  555. {
  556. get { return _crsBCurrentStation; }
  557. set { SetProperty(ref _crsBCurrentStation, value); }
  558. }
  559. #endregion
  560. #region Side A
  561. /// <summary>
  562. /// Side A模块名称
  563. /// </summary>
  564. public string SideAModuleName
  565. {
  566. get { return _sideAModuleName; }
  567. set { SetProperty(ref _sideAModuleName, value); }
  568. }
  569. /// <summary>
  570. /// Side A数据
  571. /// </summary>
  572. public LoaderSideData SideAData
  573. {
  574. get { return _sideAData; }
  575. set { SetProperty(ref _sideAData, value); }
  576. }
  577. #endregion
  578. #region Side B
  579. /// <summary>
  580. /// Side B模块名称
  581. /// </summary>
  582. public string SideBModuleName
  583. {
  584. get { return _sideBModuleName; }
  585. set { SetProperty(ref _sideBModuleName, value); }
  586. }
  587. /// <summary>
  588. /// Side B数据
  589. /// </summary>
  590. public LoaderSideData SideBData
  591. {
  592. get { return _sideBData; }
  593. set { SetProperty(ref _sideBData, value); }
  594. }
  595. #endregion
  596. #region Common
  597. /// <summary>
  598. /// Common模块名称
  599. /// </summary>
  600. public string CommonModuleName
  601. {
  602. get { return _commonModuleName; }
  603. set { SetProperty(ref _commonModuleName, value); }
  604. }
  605. /// <summary>
  606. /// 公共数据
  607. /// </summary>
  608. public LoaderCommonData CommonData
  609. {
  610. get { return _commonData; }
  611. set { SetProperty(ref _commonData, value);}
  612. }
  613. /// <summary>
  614. /// PlateOut Camera Enable
  615. /// </summary>
  616. public Visibility PlateOutCameraVisibility
  617. {
  618. get { return _plateOutCameraVisibility; }
  619. set { SetProperty(ref _plateOutCameraVisibility, value);}
  620. }
  621. #endregion
  622. #endregion
  623. #region 指令
  624. [IgnorePropertyChange]
  625. public ICommand SideALoadCommand
  626. {
  627. get;
  628. private set;
  629. }
  630. [IgnorePropertyChange]
  631. public ICommand SideAUnloadCommand
  632. {
  633. get;
  634. private set;
  635. }
  636. [IgnorePropertyChange]
  637. public ICommand SideAInstallCRSCommand
  638. {
  639. get;private set;
  640. }
  641. [IgnorePropertyChange]
  642. public ICommand SideBLoadCommand
  643. {
  644. get;
  645. private set;
  646. }
  647. [IgnorePropertyChange]
  648. public ICommand SideBUnloadCommand
  649. {
  650. get;
  651. private set;
  652. }
  653. [IgnorePropertyChange]
  654. public ICommand SideBInstallCRSCommand
  655. {
  656. get; private set;
  657. }
  658. #endregion
  659. /// <summary>
  660. /// 构造函数
  661. /// </summary>
  662. public LoaderSetupViewModel()
  663. {
  664. SideALoadCommand=new DelegateCommand<object>(SideALoadAction);
  665. SideAUnloadCommand = new DelegateCommand<object>(SideAUnloadAction);
  666. SideAInstallCRSCommand = new DelegateCommand<object>(SideAInstallCRSAction);
  667. SideBLoadCommand = new DelegateCommand<object>(SideBLoadAction);
  668. SideBUnloadCommand = new DelegateCommand<object>(SideBUnloadAction);
  669. SideBInstallCRSCommand = new DelegateCommand<object>(SideBInstallCRSAction);
  670. }
  671. /// <summary>
  672. /// 加载数据
  673. /// </summary>
  674. public void LoadData(string systemName)
  675. {
  676. Module = systemName;
  677. ShuttleAModuleName = $"{Module}.ShuttleA";
  678. TiltAModuleName = $"{Module}.TiltA";
  679. CRSAModuleName = $"{Module}.LSA";
  680. RotationModuleName = $"{Module}.Rotation";
  681. ShuttleBModuleName = $"{Module}.ShuttleB";
  682. TiltBModuleName = $"{Module}.TiltB";
  683. CRSBModuleName = $"{Module}.LSB";
  684. SideAModuleName = $"{Module}.SideA";
  685. SideBModuleName = $"{Module}.SideB";
  686. CommonModuleName = $"{Module}.Common";
  687. bool plateOutCameraEnable= (bool)QueryDataClient.Instance.Service.GetConfig($"{ModuleName.Loader1}.PlateOutCameraEnable");
  688. if(plateOutCameraEnable)
  689. {
  690. PlateOutCameraVisibility = Visibility.Visible;
  691. }
  692. else
  693. {
  694. PlateOutCameraVisibility = Visibility.Hidden;
  695. }
  696. //LoaderIsinstalled
  697. Dictionary<string, object> allModulesDictionary = QueryDataClient.Instance.Service.PollData(new List<string>() { "System.InstalledModules" });
  698. if (allModulesDictionary != null)
  699. {
  700. List<string> allModules = CommonFunction.GetValue<List<string>>(allModulesDictionary, "System.InstalledModules");
  701. LoaderIsInstalled = allModules.Contains(ModuleName.Loader1.ToString());
  702. }
  703. WaferSize = (int)QueryDataClient.Instance.Service.GetConfig("System.WaferSize");
  704. AddDataKeys();
  705. ValueSeries = new ChartValues<double>();
  706. LabelSeries = new ChartValues<string>();
  707. if (_timer == null)
  708. {
  709. _timer = new DispatcherTimer();
  710. _timer.Interval = TimeSpan.FromMilliseconds(100);
  711. _timer.Tick += Timer_Tick;
  712. }
  713. _timer.Start();
  714. }
  715. /// <summary>
  716. /// 定时器
  717. /// </summary>
  718. /// <param name="sender"></param>
  719. /// <param name="e"></param>
  720. private void Timer_Tick(object sender, EventArgs e)
  721. {
  722. LoaderModuleInfo = ModuleManager.ModuleInfos["Loader1"];
  723. if (LoaderIsInstalled && LoaderModuleInfo != null)
  724. {
  725. if (LoaderModuleInfo.WaferManager.Wafers.Count != 0)
  726. {
  727. LoaderWaferA = LoaderModuleInfo.WaferManager.Wafers[0];
  728. }
  729. if (LoaderModuleInfo.WaferManager.Wafers.Count != 0)
  730. {
  731. LoaderWaferB = LoaderModuleInfo.WaferManager.Wafers[1];
  732. }
  733. }
  734. if (_rtDataKeys.Count != 0)
  735. {
  736. _rtDataValueDic = QueryDataClient.Instance.Service.PollData(_rtDataKeys);
  737. if (_rtDataValueDic != null)
  738. {
  739. //SRD Wafer信息
  740. if (ModuleManager.ModuleInfos[$"{Module}"].WaferManager.Wafers.Count != 0)
  741. {
  742. LoaderWaferA = ModuleManager.ModuleInfos[$"{Module}"].WaferManager.Wafers[0];
  743. LoaderWaferB = ModuleManager.ModuleInfos[$"{Module}"].WaferManager.Wafers[1];
  744. }
  745. ShuttleAMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{ShuttleAModuleName}.{MOTION_DATA}");
  746. ShuttleACurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{ShuttleAModuleName}.{CURRENT_STATION}"), ShuttleAModuleName);
  747. ShuttleBMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{ShuttleBModuleName}.{MOTION_DATA}");
  748. ShuttleBCurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{ShuttleBModuleName}.{CURRENT_STATION}"), ShuttleBModuleName);
  749. TiltAMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{TiltAModuleName}.{MOTION_DATA}");
  750. TiltACurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{TiltAModuleName}.{CURRENT_STATION}"), TiltAModuleName);
  751. TiltBMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{TiltBModuleName}.{MOTION_DATA}");
  752. TiltBCurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{TiltBModuleName}.{CURRENT_STATION}"), TiltBModuleName);
  753. CRSAMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{CRSAModuleName}.{MOTION_DATA}");
  754. CRSACurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{CRSAModuleName}.{CURRENT_STATION}"), CRSAModuleName);
  755. CRSBMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{CRSBModuleName}.{MOTION_DATA}");
  756. CRSBCurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{CRSBModuleName}.{CURRENT_STATION}"), CRSBModuleName);
  757. RotationMotionData = CommonFunction.GetValue<CommandMotionData>(_rtDataValueDic, $"{RotationModuleName}.{MOTION_DATA}");
  758. RotationCurrentStation = CommonFunction.GetCurrentStationLastContent(CommonFunction.GetValue<string>(_rtDataValueDic, $"{RotationModuleName}.{CURRENT_STATION}"), RotationModuleName);
  759. SideAData = CommonFunction.GetValue<LoaderSideData>(_rtDataValueDic, $"{SideAModuleName}.{SIDE_DATA}");
  760. SideBData = CommonFunction.GetValue<LoaderSideData>(_rtDataValueDic, $"{SideBModuleName}.{SIDE_DATA}");
  761. CommonData = CommonFunction.GetValue<LoaderCommonData>(_rtDataValueDic, $"{Module}.{COMMON_DATA}");
  762. if (CommonData!=null&&CommonData.FlowValues != null && CommonData.FlowValues.Count != 0)
  763. {
  764. if (ValueSeries.Count < CommonData.FlowValues.Count)
  765. {
  766. InitialValueSeries(CommonData.FlowValues);
  767. }
  768. }
  769. else
  770. {
  771. ValueSeries.Clear();
  772. LabelSeries.Clear();
  773. }
  774. Loader1TiltAMotorPosition = TiltBMotionData.MotorPosition;
  775. Loader1TiltBMotorPosition = TiltAMotionData.MotorPosition;
  776. Loader1RotationMotorPosition = RotationMotionData.MotorPosition;
  777. //计Loader Rotation UI位置
  778. Loader1RotationPosition = -Loader1RotationMotorPosition - LOADER_ROTATION_DIFFER;
  779. //判断Loader1的TiltA水平状态
  780. if (TiltACurrentStation == "HORI")
  781. {
  782. LoaderWaferVisibleA = true;
  783. }
  784. else if (TiltACurrentStation == "VERT")
  785. {
  786. LoaderWaferVisibleA = false;
  787. }
  788. //判断Loader1的TiltB水平状态
  789. if (TiltBCurrentStation == "HORI")
  790. {
  791. LoaderWaferVisibleB = true;
  792. }
  793. else if (TiltBCurrentStation == "VERT")
  794. {
  795. LoaderWaferVisibleB = false;
  796. }
  797. CurrentSideAOperation = CommonFunction.GetValue<string>(_rtDataValueDic, $"{SideAModuleName}.{CURRENT_OPERATION}");
  798. CurrentSideBOperation = CommonFunction.GetValue<string>(_rtDataValueDic, $"{SideBModuleName}.{CURRENT_OPERATION}");
  799. }
  800. }
  801. }
  802. /// <summary>
  803. /// 隐藏
  804. /// </summary>
  805. public void Hide()
  806. {
  807. if (_timer != null)
  808. {
  809. _timer.Stop();
  810. }
  811. }
  812. /// <summary>
  813. /// 初始化查询数据集合
  814. /// </summary>
  815. private void AddDataKeys()
  816. {
  817. _rtDataKeys.Clear();
  818. _rtDataKeys.Add($"{ShuttleAModuleName}.{MOTION_DATA}");
  819. _rtDataKeys.Add($"{ShuttleAModuleName}.{IS_SWITCH_ON}");
  820. _rtDataKeys.Add($"{ShuttleAModuleName}.{CURRENT_STATION}");
  821. _rtDataKeys.Add($"{ShuttleBModuleName}.{MOTION_DATA}");
  822. _rtDataKeys.Add($"{ShuttleBModuleName}.{IS_SWITCH_ON}");
  823. _rtDataKeys.Add($"{ShuttleBModuleName}.{CURRENT_STATION}");
  824. _rtDataKeys.Add($"{TiltAModuleName}.{MOTION_DATA}");
  825. _rtDataKeys.Add($"{TiltAModuleName}.{IS_SWITCH_ON}");
  826. _rtDataKeys.Add($"{TiltAModuleName}.{CURRENT_STATION}");
  827. _rtDataKeys.Add($"{TiltBModuleName}.{MOTION_DATA}");
  828. _rtDataKeys.Add($"{TiltBModuleName}.{IS_SWITCH_ON}");
  829. _rtDataKeys.Add($"{TiltBModuleName}.{CURRENT_STATION}");
  830. _rtDataKeys.Add($"{CRSAModuleName}.{MOTION_DATA}");
  831. _rtDataKeys.Add($"{CRSAModuleName}.{IS_SWITCH_ON}");
  832. _rtDataKeys.Add($"{CRSAModuleName}.{CURRENT_STATION}");
  833. _rtDataKeys.Add($"{CRSBModuleName}.{MOTION_DATA}");
  834. _rtDataKeys.Add($"{CRSBModuleName}.{IS_SWITCH_ON}");
  835. _rtDataKeys.Add($"{CRSBModuleName}.{CURRENT_STATION}");
  836. _rtDataKeys.Add($"{RotationModuleName}.{MOTION_DATA}");
  837. _rtDataKeys.Add($"{RotationModuleName}.{IS_SWITCH_ON}");
  838. _rtDataKeys.Add($"{RotationModuleName}.{CURRENT_STATION}");
  839. _rtDataKeys.Add($"{SideAModuleName}.{SIDE_DATA}");
  840. _rtDataKeys.Add($"{SideBModuleName}.{SIDE_DATA}");
  841. _rtDataKeys.Add($"{Module}.{COMMON_DATA}");
  842. _rtDataKeys.Add($"{SideAModuleName}.{CURRENT_OPERATION}");
  843. _rtDataKeys.Add($"{SideBModuleName}.{CURRENT_OPERATION}");
  844. }
  845. private void InitialValueSeries(List<LoaderFlowLotTrackData> datas)
  846. {
  847. foreach(LoaderFlowLotTrackData item in datas)
  848. {
  849. ValueSeries.Add(item.FlowValue);
  850. LabelSeries.Add(item.Time);
  851. }
  852. }
  853. #region 指令Action
  854. /// <summary>
  855. /// Load Action
  856. /// </summary>
  857. /// <param name="obj"></param>
  858. private void SideALoadAction(object obj)
  859. {
  860. InvokeClient.Instance.Service.DoOperation($"{Module}.SideA.Load");
  861. }
  862. /// <summary>
  863. /// Unload Action
  864. /// </summary>
  865. /// <param name="obj"></param>
  866. private void SideAUnloadAction(object obj)
  867. {
  868. InvokeClient.Instance.Service.DoOperation($"{Module}.SideA.Unload");
  869. }
  870. /// <summary>
  871. /// Install CRS Action
  872. /// </summary>
  873. /// <param name="obj"></param>
  874. private void SideAInstallCRSAction(object obj)
  875. {
  876. InvokeClient.Instance.Service.DoOperation($"{Module}.SideA.InstallCRS");
  877. }
  878. /// <summary>
  879. /// SideB Load Action
  880. /// </summary>
  881. /// <param name="obj"></param>
  882. private void SideBLoadAction(object obj)
  883. {
  884. InvokeClient.Instance.Service.DoOperation($"{Module}.SideB.Load");
  885. }
  886. /// <summary>
  887. /// SideB Unload Action
  888. /// </summary>
  889. /// <param name="obj"></param>
  890. private void SideBUnloadAction(object obj)
  891. {
  892. InvokeClient.Instance.Service.DoOperation($"{Module}.SideB.Unload");
  893. }
  894. /// <summary>
  895. /// SideB Install CRS Action
  896. /// </summary>
  897. /// <param name="obj"></param>
  898. private void SideBInstallCRSAction(object obj)
  899. {
  900. InvokeClient.Instance.Service.DoOperation($"{Module}.SideB.InstallCRS");
  901. }
  902. #endregion
  903. }
  904. }