WaferRobotParameterViewModel.cs 31 KB

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