WaferRobotParameterViewModel.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674
  1. using Aitex.Core.Util;
  2. using Caliburn.Micro;
  3. using Caliburn.Micro.Core;
  4. using FurnaceUI.DataModule;
  5. using FurnaceUI.Models;
  6. using MECF.Framework.Common.DataCenter;
  7. using MECF.Framework.Common.OperationCenter;
  8. using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;
  9. using MECF.Framework.UI.Client.ClientBase;
  10. using OpenSEMI.ClientBase;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using System.Text.RegularExpressions;
  15. using System.Threading.Tasks;
  16. using System.Windows;
  17. namespace FurnaceUI.Views.Maintenances
  18. {
  19. public class WaferRobotParameterViewModel : FurnaceUIViewModelBase, ISupportMultipleSystem
  20. {
  21. public bool IsManagerPermission { get => this.Permission == 3; }
  22. private string _checkTypeParameter = "Speed";
  23. private string _checkAxis = "ZAxis";
  24. public Dictionary<string, string> SetValues { get; set; } = new Dictionary<string, string>();
  25. public Dictionary<string, string> ConfigDict { get; set; } = new Dictionary<string, string>();
  26. public Dictionary<string, string> ReadRobotParameterResultDict { get; set; }
  27. [Subscription("WaferRobot.Status")]
  28. public string WaferRobotStaus { get; set; }
  29. private bool _isShowRobotDownBtn = false;
  30. public bool IsShowRobotDownBtn
  31. {
  32. get { return _isShowRobotDownBtn; }
  33. set
  34. {
  35. _isShowRobotDownBtn = value;
  36. this.NotifyOfPropertyChange(nameof(IsShowRobotDownBtn));
  37. }
  38. }
  39. public bool IsClickButton { get; set; }
  40. private ConfigNode _waferRobotParameterNode { get; set; }
  41. private ConfigNode _allRootNode { get; set; }
  42. private List<ConfigNode> _tableDataSource = new List<ConfigNode>();
  43. public List<ConfigNode> TableDataSource
  44. {
  45. get { return _tableDataSource; }
  46. set
  47. {
  48. _tableDataSource = value;
  49. NotifyOfPropertyChange(nameof(TableDataSource));
  50. }
  51. }
  52. private List<DisplayByWaferType> _topBtnGroupDatas = new List<DisplayByWaferType>();
  53. public List<DisplayByWaferType> TopBtnGroupDatas
  54. {
  55. get { return _topBtnGroupDatas; }
  56. set
  57. {
  58. _topBtnGroupDatas = value;
  59. NotifyOfPropertyChange(nameof(TopBtnGroupDatas));
  60. }
  61. }
  62. private Visibility _parameterTableVisibility = Visibility.Visible;
  63. public Visibility ParameterTableVisibility
  64. {
  65. get { return _parameterTableVisibility; }
  66. set
  67. {
  68. _parameterTableVisibility = value;
  69. NotifyOfPropertyChange(nameof(ParameterTableVisibility));
  70. }
  71. }
  72. private Visibility _positionAxisTableVisibility = Visibility.Collapsed;
  73. public Visibility PositionAxisTableVisibility
  74. {
  75. get { return _positionAxisTableVisibility; }
  76. set
  77. {
  78. _positionAxisTableVisibility = value;
  79. NotifyOfPropertyChange(nameof(PositionAxisTableVisibility));
  80. }
  81. }
  82. private Visibility _positionConfigTableVisibility = Visibility.Collapsed;
  83. public Visibility PositionConfigTableVisibility
  84. {
  85. get { return _positionConfigTableVisibility; }
  86. set
  87. {
  88. _positionConfigTableVisibility = value;
  89. NotifyOfPropertyChange(nameof(PositionConfigTableVisibility));
  90. }
  91. }
  92. private Visibility _downloadUploadVisibility = Visibility.Collapsed;
  93. public Visibility DownloadUploadVisibility
  94. {
  95. get { return _downloadUploadVisibility; }
  96. set
  97. {
  98. _downloadUploadVisibility = value;
  99. NotifyOfPropertyChange(nameof(DownloadUploadVisibility));
  100. }
  101. }
  102. private Visibility _axisBtnVisibility = Visibility.Collapsed;
  103. public Visibility AxisBtnVisibility
  104. {
  105. get { return _axisBtnVisibility; }
  106. set
  107. {
  108. _axisBtnVisibility = value;
  109. NotifyOfPropertyChange(nameof(AxisBtnVisibility));
  110. }
  111. }
  112. private bool _busyIndicatorVisibility = false;
  113. public bool BusyIndicatorVisibility
  114. {
  115. get { return _busyIndicatorVisibility; }
  116. set
  117. {
  118. _busyIndicatorVisibility = value;
  119. NotifyOfPropertyChange(nameof(BusyIndicatorVisibility));
  120. }
  121. }
  122. private bool _allBtnIsEnable = true;
  123. public bool AllBtnIsEnable
  124. {
  125. get { return _allBtnIsEnable; }
  126. set
  127. {
  128. _allBtnIsEnable = value;
  129. NotifyOfPropertyChange(nameof(AllBtnIsEnable));
  130. }
  131. }
  132. private Visibility _slotBtnVisibility = Visibility.Collapsed;
  133. public Visibility SlotBtnVisibility
  134. {
  135. get { return _slotBtnVisibility; }
  136. set
  137. {
  138. _slotBtnVisibility = value;
  139. NotifyOfPropertyChange(nameof(SlotBtnVisibility));
  140. }
  141. }
  142. public void SwitchListView(object obj)
  143. {
  144. _checkTypeParameter = obj.ToString();
  145. TableDataSource.Clear();
  146. _waferRobotParameterNode = FindNodeByName(_allRootNode, $"PM1.RecipeEditParameter.{SystemName}Parameter.{_checkTypeParameter}");
  147. _checkAxis = "";
  148. TopBtnGroupDatas = new List<DisplayByWaferType>();
  149. switch (_checkTypeParameter)
  150. {
  151. case "PositionConfig":
  152. PositionConfigTableVisibility = Visibility.Visible;
  153. PositionAxisTableVisibility = Visibility.Collapsed;
  154. ParameterTableVisibility = Visibility.Collapsed;
  155. DownloadUploadVisibility = Visibility.Visible;
  156. AxisBtnVisibility = Visibility.Visible;
  157. SlotBtnVisibility = Visibility.Visible;
  158. TopBtnGroupDatas = new List<DisplayByWaferType>() {
  159. new DisplayByWaferType(){ GroupName="PositionConfigBtn", Name="StationNumber",Value="workstationNumber",IsSelected=true},
  160. new DisplayByWaferType(){ GroupName="PositionConfigBtn",Name="LayerSpacing",Value="LayerSpacing",IsSelected=false},
  161. new DisplayByWaferType(){ GroupName="PositionConfigBtn",Name="UpperOffset",Value="UpperOffset",IsSelected=false},
  162. new DisplayByWaferType(){ GroupName="PositionConfigBtn",Name="DownOffset",Value="DownOffset",IsSelected=false},
  163. };
  164. _checkAxis = TopBtnGroupDatas.FirstOrDefault().Value;
  165. break;
  166. case "PositionAxis":
  167. PositionAxisTableVisibility = Visibility.Visible;
  168. PositionConfigTableVisibility = Visibility.Collapsed;
  169. ParameterTableVisibility = Visibility.Collapsed;
  170. DownloadUploadVisibility = Visibility.Visible;
  171. AxisBtnVisibility = Visibility.Collapsed;
  172. SlotBtnVisibility = Visibility.Collapsed;
  173. break;
  174. case "Speed":
  175. case "Time":
  176. ParameterTableVisibility = Visibility.Visible;
  177. PositionAxisTableVisibility = Visibility.Collapsed;
  178. PositionConfigTableVisibility = Visibility.Collapsed;
  179. DownloadUploadVisibility = Visibility.Visible;
  180. AxisBtnVisibility = Visibility.Visible;
  181. SlotBtnVisibility = Visibility.Collapsed;
  182. TopBtnGroupDatas = new List<DisplayByWaferType>() {
  183. new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="Z Axis",Value="ZAxis",IsSelected=true},
  184. new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="TH Axis",Value="THAxis",IsSelected=false},
  185. new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="EX1 Axis",Value="EX1Axis",IsSelected=false},
  186. new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="EX2 Axis",Value="EX2Axis",IsSelected=false},
  187. new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="P Axis",Value="PAxis",IsSelected=false},
  188. }; _checkAxis = TopBtnGroupDatas.FirstOrDefault().Value;
  189. break;
  190. case "Other":
  191. ParameterTableVisibility = Visibility.Visible;
  192. PositionAxisTableVisibility = Visibility.Collapsed;
  193. PositionConfigTableVisibility = Visibility.Collapsed;
  194. DownloadUploadVisibility = Visibility.Visible;
  195. AxisBtnVisibility = Visibility.Visible;
  196. SlotBtnVisibility = Visibility.Collapsed;
  197. TopBtnGroupDatas = new List<DisplayByWaferType>() {
  198. new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="Z Axis",Value="ZAxis",IsSelected=true},
  199. new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="TH Axis",Value="THAxis",IsSelected=false},
  200. new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="EX1 Axis",Value="EX1Axis",IsSelected=false},
  201. new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="EX2 Axis",Value="EX2Axis",IsSelected=false},
  202. new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="P Axis",Value="PAxis",IsSelected=false},
  203. new DisplayByWaferType(){GroupName="SpeedAxisBtn", Name="Other",Value="Other",IsSelected=false},
  204. }; _checkAxis = TopBtnGroupDatas.FirstOrDefault().Value;
  205. break;
  206. case "Slot":
  207. ParameterTableVisibility = Visibility.Visible;
  208. PositionAxisTableVisibility = Visibility.Collapsed;
  209. PositionConfigTableVisibility = Visibility.Collapsed;
  210. DownloadUploadVisibility = Visibility.Visible;
  211. AxisBtnVisibility = Visibility.Collapsed;
  212. SlotBtnVisibility = Visibility.Collapsed;
  213. break;
  214. }
  215. SwitchAxis(_checkAxis);
  216. }
  217. public void SwitchAxis(object obj)
  218. {
  219. _checkAxis = obj.ToString();
  220. TableDataSource.Clear();
  221. var data = new List<ConfigNode>();
  222. if (!string.IsNullOrEmpty(_checkAxis))
  223. {
  224. TopBtnGroupDatas.Where(a => a.Value == _checkAxis).FirstOrDefault().IsSelected = true;
  225. }
  226. if (_checkTypeParameter == "PositionAxis")
  227. {
  228. PositionAxisNodeToTableDataSource(data);
  229. }
  230. else
  231. {
  232. foreach (var itemType in _waferRobotParameterNode.SubNodes)
  233. {
  234. foreach (var item in itemType.SubNodes)
  235. {
  236. var ptypeConfig = item.Items.Where(a => a.Name.Equals("Type")).FirstOrDefault();
  237. if (ptypeConfig != null)
  238. {
  239. if (_checkTypeParameter.Equals(ptypeConfig.DefaultValue))
  240. {
  241. if (_checkTypeParameter == "PositionConfig")
  242. {
  243. if (_checkAxis == itemType.Name)
  244. {
  245. item.ParentNode = itemType;
  246. data.Add(item);
  247. continue;
  248. }
  249. }
  250. else
  251. {
  252. var axisItem = item.Items.Where(a => a.Name.Equals("Axis")).FirstOrDefault();
  253. if (axisItem != null && _checkAxis.Contains(axisItem.DefaultValue))
  254. {
  255. data.Add(item);
  256. }
  257. if (axisItem == null && !_checkAxis.Contains("Axis"))
  258. {
  259. data.Add(item);
  260. }
  261. }
  262. }
  263. }
  264. }
  265. }
  266. }
  267. TableDataSource = data;
  268. GetDataOfConfigItems();
  269. ClearReadDicData();
  270. }
  271. private void PositionAxisNodeToTableDataSource(List<ConfigNode> data)
  272. {
  273. foreach (var itemType in _waferRobotParameterNode.SubNodes)
  274. {
  275. data.Add(itemType);
  276. }
  277. }
  278. private void GetDataOfConfigItems()
  279. {
  280. if (TableDataSource == null)
  281. {
  282. return;
  283. }
  284. new Task(() =>
  285. {
  286. Dictionary<string, ConfigItem> keyValuePairs = new Dictionary<string, ConfigItem>();
  287. List<string> getConfigs = new List<string>();
  288. foreach (var item in TableDataSource)
  289. {
  290. foreach (var tableItem in item.Items)
  291. {
  292. var key = $"{tableItem.Path}.{tableItem.Name}";
  293. getConfigs.Add(key);
  294. keyValuePairs.Add(key, tableItem);
  295. }
  296. }
  297. var configs = QueryDataClient.Instance.Service.PollConfig(getConfigs);
  298. foreach (var key in configs.Keys)
  299. {
  300. keyValuePairs[key].CurrentValue = configs[key].ToString();
  301. }
  302. }).Start();
  303. }
  304. public async void Upload(object obj)
  305. {
  306. var selection = DialogBox.ShowDialog(DialogButton.Yes | DialogButton.No, DialogType.CONFIRM,
  307. $"Are you sure you want to Upload?");
  308. if (selection == DialogButton.No)
  309. return;
  310. if (!IsClickButton)
  311. {
  312. return;
  313. }
  314. AllBtnIsEnable = false;
  315. BusyIndicatorVisibility = true;
  316. if (obj.ToString().Equals("PositionConfig"))
  317. {
  318. SetPositionConfigUpload();
  319. }
  320. else if (obj.ToString().Equals("PositionAxis"))
  321. {
  322. SetPositionAxisUpload();
  323. }
  324. else if (obj.ToString().Equals("Parameter"))
  325. {
  326. SetParameterUpload();
  327. }
  328. async void SetPositionAxisUpload()
  329. {
  330. var allNames = TableDataSource.Select(a => a.Name).ToList();
  331. string parameter = string.Join(";", TableDataSource.Select(a => a.Name).ToArray());
  332. if (!string.IsNullOrEmpty(parameter))
  333. {
  334. InvokeClient.Instance.Service.DoOperation($"{SystemName}.ReadRobotParameters", "CurrentRobotPositionAxis", parameter);
  335. }
  336. await WaitForResultsAsync();
  337. if (ReadRobotParameterResultDict != null && ReadRobotParameterResultDict.Count > 0)
  338. {
  339. foreach (var item in ReadRobotParameterResultDict)
  340. {
  341. if (!allNames.Contains(item.Key))
  342. {
  343. continue;
  344. }
  345. if (!allNames.Contains(item.Key))
  346. {
  347. continue;
  348. }
  349. var dataConfig = TableDataSource.Where(a => a.Name == item.Key).FirstOrDefault();
  350. var itemValues = item.Value.Split(',').ToList();
  351. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.ToDownAxis", CheckUnitData(dataConfig.Items[1].Unit, itemValues[0]));
  352. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.RotateAxis", CheckUnitData(dataConfig.Items[2].Unit, itemValues[1]));
  353. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.TelescopingAxis1", CheckUnitData(dataConfig.Items[3].Unit, itemValues[2]));
  354. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.TelescopingAxis2", CheckUnitData(dataConfig.Items[4].Unit, itemValues[3]));
  355. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.VariableSpacingAxis", CheckUnitData(dataConfig.Items[5].Unit, itemValues[4]));
  356. }
  357. }
  358. GetDataOfConfigItems();
  359. BusyIndicatorVisibility = false;
  360. AllBtnIsEnable = true;
  361. }
  362. async void SetPositionConfigUpload()
  363. {
  364. var allNames = TableDataSource.Select(a => a.Name).ToList();
  365. List<string> parameterItem = new List<string>();
  366. foreach (var item in TableDataSource)
  367. {
  368. parameterItem.Add($"{item.Name},{item.ParentNode.Items.FirstOrDefault().DefaultValue}");
  369. }
  370. string parameter = string.Join(";", parameterItem);
  371. if (!string.IsNullOrEmpty(parameter))
  372. {
  373. InvokeClient.Instance.Service.DoOperation($"{SystemName}.ReadRobotParameters", "CurrentRobotPositionConfig", parameter);
  374. }
  375. await WaitForResultsAsync();
  376. if (ReadRobotParameterResultDict != null && ReadRobotParameterResultDict.Count > 0)
  377. {
  378. foreach (var item in ReadRobotParameterResultDict)
  379. {
  380. if (!allNames.Contains(item.Key))
  381. {
  382. continue;
  383. }
  384. var dataConfig = TableDataSource.Where(a => a.Name == item.Key).FirstOrDefault();
  385. var path = $"{dataConfig.Path}.{dataConfig.Name}.SetValue";
  386. var unitConfig = dataConfig.Items.Where(a => a.Name == "Unit").FirstOrDefault();
  387. var setValue = CheckUnitData(unitConfig.CurrentValue, item.Value.Split(',').LastOrDefault());
  388. InvokeClient.Instance.Service.DoOperation("System.SetConfig", path, setValue);
  389. }
  390. }
  391. GetDataOfConfigItems();
  392. BusyIndicatorVisibility = false;
  393. AllBtnIsEnable = true;
  394. }
  395. async void SetParameterUpload()
  396. {
  397. var allNames = TableDataSource.Select(a => a.Name.Replace("P", "")).ToList();
  398. string parameter = string.Join(";", allNames);
  399. if (!string.IsNullOrEmpty(parameter))
  400. {
  401. InvokeClient.Instance.Service.DoOperation($"{SystemName}.ReadRobotParameters", "CurrentRobotParameters", parameter);
  402. }
  403. await WaitForResultsAsync();
  404. if (ReadRobotParameterResultDict != null && ReadRobotParameterResultDict.Count > 0)
  405. {
  406. foreach (var item in ReadRobotParameterResultDict)
  407. {
  408. var itemConfig = TableDataSource.Where(a => a.Name == $"P{item.Key}").FirstOrDefault();
  409. if (!allNames.Contains(item.Key) || itemConfig == null)
  410. continue;
  411. var unitConfig = itemConfig.Items.Where(a => a.Name == "Unit").FirstOrDefault();
  412. var setValue = CheckUnitData(unitConfig.CurrentValue, item.Value);
  413. InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.Parameter.P{item.Key}.SetValue", setValue);
  414. }
  415. }
  416. GetDataOfConfigItems();
  417. BusyIndicatorVisibility = false;
  418. AllBtnIsEnable = true;
  419. }
  420. }
  421. public List<double> ExtractFloatingPointNumbers(string input)
  422. {
  423. // 使用正则表达式匹配所有数字字符,包括小数点
  424. MatchCollection matches = Regex.Matches(input, @"\d+\.\d+|\d+");
  425. // 将匹配到的数字部分转换为 double 类型并添加到列表中
  426. List<double> result = new List<double>();
  427. foreach (Match match in matches)
  428. {
  429. if (double.TryParse(match.Value, out double number))
  430. {
  431. result.Add(number);
  432. }
  433. }
  434. return result;
  435. }
  436. private double CheckUnitData(string unitStr, string valueStr, bool isDivision = false)
  437. {
  438. if (string.IsNullOrEmpty(unitStr))
  439. {
  440. return double.Parse(valueStr);
  441. }
  442. var numberData = ExtractFloatingPointNumbers(unitStr).FirstOrDefault();
  443. return isDivision ? double.Parse(valueStr) / numberData : double.Parse(valueStr) * numberData;
  444. }
  445. private string CheckUnitSetData(string unitStr, string valueStr, bool isDivision = false, int length = 11)
  446. {
  447. var setValue = CheckUnitData(unitStr, valueStr, isDivision);
  448. if (setValue >= 0)
  449. {
  450. return $"{Math.Abs(setValue).ToString().PadLeft(length, '0')}";
  451. }
  452. else
  453. {
  454. return $"{(Math.Abs(setValue) * -1).ToString().PadLeft(length, '0')}";
  455. }
  456. }
  457. private async Task WaitForResultsAsync()
  458. {
  459. // Simulate waiting for results using a delay
  460. // In a real-world scenario, you might wait for an event or a specific condition
  461. await Task.Delay(TableDataSource.Count * 300);
  462. // Here you can add logic to check if the results are ready
  463. // For example, polling or using a completion source
  464. }
  465. private string GetAxisValue(string value)
  466. {
  467. return (double.Parse(value.TrimStart('0')) / 1000).ToString("f3");
  468. }
  469. public void Download(object obj)
  470. {
  471. var selection = DialogBox.ShowDialog(DialogButton.Yes | DialogButton.No, DialogType.CONFIRM,
  472. $"Are you sure you want to Download?");
  473. if (selection == DialogButton.No)
  474. return;
  475. string parameter = "";
  476. string setParameter = "";
  477. if (obj.ToString().Equals("PositionConfig"))
  478. {
  479. SetPositionConfigDownload();
  480. }
  481. else if (obj.ToString().Equals("PositionAxis"))
  482. {
  483. SetPositionAxisDownload();
  484. }
  485. else if (obj.ToString().Equals("Parameter"))
  486. {
  487. SetParameterDownload();
  488. }
  489. if (!string.IsNullOrEmpty(parameter))
  490. {
  491. InvokeClient.Instance.Service.DoOperation($"{SystemName}.SetRobotParameters", setParameter, parameter);
  492. SetValues.Clear();
  493. }
  494. void SetParameterDownload()
  495. {
  496. setParameter = "SetParameter";
  497. foreach (var item in TableDataSource)
  498. {
  499. var value = item.Items.Where(a => a.Name == "SetValue").FirstOrDefault().CurrentValue;
  500. var unit = item.Items.Where(a => a.Name == "Unit").FirstOrDefault().CurrentValue;
  501. var setValue = CheckUnitSetData(unit, value, true);
  502. parameter = parameter + $"{item.Name.Replace("P", "")},{setValue};";
  503. }
  504. };
  505. void SetPositionAxisDownload()
  506. {
  507. setParameter = "SetPositionAxis";
  508. foreach (var item in TableDataSource)
  509. {
  510. List<string> valueStr = new List<string>();
  511. for (int i = 1; i < item.Items.Count; i++)
  512. {
  513. var setValue = CheckUnitSetData(item.Items[i].Unit, item.Items[i].CurrentValue, true);
  514. valueStr.Add(setValue);
  515. }
  516. parameter = parameter + $"{item.Name},{string.Join(",", valueStr.ToArray())};";
  517. }
  518. };
  519. void SetPositionConfigDownload()
  520. {
  521. setParameter = "SetPositionConfig";
  522. foreach (var item in TableDataSource)
  523. {
  524. var value = item.Items.Where(a => a.Name == "SetValue").FirstOrDefault().CurrentValue;
  525. var unit = item.Items.Where(a => a.Name == "Unit").FirstOrDefault().CurrentValue;
  526. var setValue = CheckUnitSetData(unit, value, true);
  527. parameter = parameter + $"{item.Name.Replace("P", "")},{setValue};";
  528. }
  529. };
  530. }
  531. public void ClearReadDicData()
  532. {
  533. //InvokeClient.Instance.Service.DoOperation("CarrierRobot.ClearReadDicData");
  534. }
  535. public void SelectionChangedHandle(object obj)
  536. {
  537. ConfigNode node = (ConfigNode)obj;
  538. if (node == null)
  539. {
  540. return;
  541. }
  542. var windowManager = IoC.Get<IWindowManager>();
  543. var colData = TableDataSource.Where(a => a.Name.Equals(node.Name)).FirstOrDefault();
  544. if (_checkTypeParameter == "PositionConfig")
  545. {
  546. WaferRobotPositionEditViewModel editViewModel = new WaferRobotPositionEditViewModel();
  547. editViewModel.TableNodeItems = colData.Items;
  548. var rtn = (windowManager as WindowManager)?.ShowDialogWithTitle(editViewModel, null, $"Edit{SystemName}Position");
  549. if ((bool)rtn)
  550. {
  551. if (string.IsNullOrEmpty(editViewModel.setValue))
  552. {
  553. return;
  554. }
  555. if (SetValues.ContainsKey(colData.Name))
  556. {
  557. SetValues[editViewModel._pName] = editViewModel.setValue;
  558. }
  559. else
  560. {
  561. SetValues.Add(editViewModel._pName, editViewModel.setValue);
  562. }
  563. }
  564. }
  565. else if (_checkTypeParameter == "PositionAxis")
  566. {
  567. WaferRobotPositionAxisEditViewModel editViewModel = new WaferRobotPositionAxisEditViewModel();
  568. editViewModel.TableNodeItems = colData.Items;
  569. var rtn = (windowManager as WindowManager)?.ShowDialogWithTitle(editViewModel, null, $"Edit {SystemName}PositionAxis");
  570. if ((bool)rtn)
  571. {
  572. if (string.IsNullOrEmpty(editViewModel.setValue))
  573. {
  574. return;
  575. }
  576. if (SetValues.ContainsKey(colData.Name))
  577. {
  578. SetValues[editViewModel._pName] = editViewModel.setValue;
  579. }
  580. else
  581. {
  582. SetValues.Add(editViewModel._pName, editViewModel.setValue);
  583. }
  584. }
  585. }
  586. else
  587. {
  588. WaferRobotParameterEditViewModel editViewModel = new WaferRobotParameterEditViewModel();
  589. editViewModel.TableNodeItems = colData.Items;
  590. var rtn = (windowManager as WindowManager)?.ShowDialogWithTitle(editViewModel, null, $"Edit {SystemName}Parameter");
  591. if ((bool)rtn)
  592. {
  593. if (string.IsNullOrEmpty(editViewModel.setValue))
  594. {
  595. return;
  596. }
  597. if (SetValues.ContainsKey(colData.Name))
  598. {
  599. SetValues[editViewModel._pName] = editViewModel.setValue;
  600. }
  601. else
  602. {
  603. SetValues.Add(editViewModel._pName, editViewModel.setValue);
  604. }
  605. }
  606. }
  607. GetDataOfConfigItems();
  608. }
  609. protected override void OnInitialize()
  610. {
  611. base.OnInitialize();
  612. InitData();
  613. }
  614. private void InitData()
  615. {
  616. _allRootNode = SystemConfigProvider.Instance.GetConfig(true);
  617. SwitchListView(_checkTypeParameter);
  618. }
  619. protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
  620. {
  621. base.InvokeAfterUpdateProperty(data);
  622. IsShowRobotDownBtn = (bool)QueryDataClient.Instance.Service.GetConfig("System.IsShowRobotDownBtn");
  623. var readData = QueryDataClient.Instance.Service.GetData($"{SystemName}.ReadRobotParameterResultDict");
  624. if (readData != null)
  625. {
  626. ReadRobotParameterResultDict = (Dictionary<string, string>)readData;
  627. }
  628. if (WaferRobotStaus != null)
  629. {
  630. IsClickButton = true;
  631. }
  632. }
  633. private ConfigNode FindNodeByName(ConfigNode parentNode, string strName)
  634. {
  635. string strCates = strName.Split('.')[0];
  636. ConfigNode node = parentNode.SubNodes.Find((x) => x.Name == strCates);
  637. if (node == null)
  638. return parentNode;
  639. else
  640. return FindNodeByName(node, strName.Replace(strCates + ".", ""));
  641. }
  642. }
  643. }