WaferRobotParameterViewModel.cs 31 KB

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