|
@@ -1,29 +1,43 @@
|
|
|
-using Aitex.Core.Util;
|
|
|
-using Caliburn.Micro;
|
|
|
+using Aitex.Core.Common.DeviceData;
|
|
|
using Caliburn.Micro.Core;
|
|
|
-using FurnaceUI.DataModule;
|
|
|
+using Caliburn.Micro;
|
|
|
using FurnaceUI.Models;
|
|
|
-using MECF.Framework.Common.DataCenter;
|
|
|
-using MECF.Framework.Common.OperationCenter;
|
|
|
+using FurnaceUI.Views.Parameter;
|
|
|
using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;
|
|
|
-using MECF.Framework.UI.Client.ClientBase;
|
|
|
-using OpenSEMI.ClientBase;
|
|
|
+using SciChart.Core.Extensions;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.Collections.ObjectModel;
|
|
|
using System.Linq;
|
|
|
-using System.Text.RegularExpressions;
|
|
|
+using System.Text;
|
|
|
using System.Threading.Tasks;
|
|
|
+using System.Xml.Linq;
|
|
|
+using MECF.Framework.Common.DataCenter;
|
|
|
+using MECF.Framework.Common.OperationCenter;
|
|
|
+using Microsoft.DwayneNeed.Win32.User32;
|
|
|
+using Aitex.Core.Util;
|
|
|
+using MECF.Framework.UI.Client.ClientBase;
|
|
|
+using OpenSEMI.ClientBase;
|
|
|
using System.Windows;
|
|
|
+using System.Threading;
|
|
|
+using FurnaceUI.DataModule;
|
|
|
+using System.Text.RegularExpressions;
|
|
|
+using System.Security.Policy;
|
|
|
|
|
|
namespace FurnaceUI.Views.Maintenances
|
|
|
{
|
|
|
public class WaferRobotParameterViewModel : FurnaceUIViewModelBase, ISupportMultipleSystem
|
|
|
{
|
|
|
public bool IsManagerPermission { get => this.Permission == 3; }
|
|
|
+ private const string WaferRobotParameter_PATH = "PM1.RecipeEditParameter";
|
|
|
+ public string SystemName { get; set; }
|
|
|
private string _checkTypeParameter = "Speed";
|
|
|
private string _checkAxis = "ZAxis";
|
|
|
public Dictionary<string, string> SetValues { get; set; } = new Dictionary<string, string>();
|
|
|
public Dictionary<string, string> ConfigDict { get; set; } = new Dictionary<string, string>();
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
public Dictionary<string, string> ReadRobotParameterResultDict { get; set; }
|
|
|
[Subscription("WaferRobot.Status")]
|
|
|
public string WaferRobotStaus { get; set; }
|
|
@@ -32,11 +46,7 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
public bool IsShowRobotDownBtn
|
|
|
{
|
|
|
get { return _isShowRobotDownBtn; }
|
|
|
- set
|
|
|
- {
|
|
|
- _isShowRobotDownBtn = value;
|
|
|
- this.NotifyOfPropertyChange(nameof(IsShowRobotDownBtn));
|
|
|
- }
|
|
|
+ set { _isShowRobotDownBtn = value; this.NotifyOfPropertyChange(nameof(IsShowRobotDownBtn)); }
|
|
|
}
|
|
|
public bool IsClickButton { get; set; }
|
|
|
private ConfigNode _waferRobotParameterNode { get; set; }
|
|
@@ -46,108 +56,68 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
public List<ConfigNode> TableDataSource
|
|
|
{
|
|
|
get { return _tableDataSource; }
|
|
|
- set
|
|
|
- {
|
|
|
- _tableDataSource = value;
|
|
|
- NotifyOfPropertyChange(nameof(TableDataSource));
|
|
|
- }
|
|
|
+ set { _tableDataSource = value; this.NotifyOfPropertyChange(nameof(TableDataSource)); }
|
|
|
}
|
|
|
private List<DisplayByWaferType> _topBtnGroupDatas = new List<DisplayByWaferType>();
|
|
|
public List<DisplayByWaferType> TopBtnGroupDatas
|
|
|
{
|
|
|
get { return _topBtnGroupDatas; }
|
|
|
- set
|
|
|
- {
|
|
|
- _topBtnGroupDatas = value;
|
|
|
- NotifyOfPropertyChange(nameof(TopBtnGroupDatas));
|
|
|
- }
|
|
|
+ set { _topBtnGroupDatas = value; this.NotifyOfPropertyChange(nameof(TopBtnGroupDatas)); }
|
|
|
}
|
|
|
|
|
|
private Visibility _parameterTableVisibility = Visibility.Visible;
|
|
|
public Visibility ParameterTableVisibility
|
|
|
{
|
|
|
get { return _parameterTableVisibility; }
|
|
|
- set
|
|
|
- {
|
|
|
- _parameterTableVisibility = value;
|
|
|
- NotifyOfPropertyChange(nameof(ParameterTableVisibility));
|
|
|
- }
|
|
|
+ set { _parameterTableVisibility = value; this.NotifyOfPropertyChange(nameof(ParameterTableVisibility)); }
|
|
|
}
|
|
|
private Visibility _positionAxisTableVisibility = Visibility.Collapsed;
|
|
|
public Visibility PositionAxisTableVisibility
|
|
|
{
|
|
|
get { return _positionAxisTableVisibility; }
|
|
|
- set
|
|
|
- {
|
|
|
- _positionAxisTableVisibility = value;
|
|
|
- NotifyOfPropertyChange(nameof(PositionAxisTableVisibility));
|
|
|
- }
|
|
|
+ set { _positionAxisTableVisibility = value; this.NotifyOfPropertyChange(nameof(PositionAxisTableVisibility)); }
|
|
|
}
|
|
|
private Visibility _positionConfigTableVisibility = Visibility.Collapsed;
|
|
|
public Visibility PositionConfigTableVisibility
|
|
|
{
|
|
|
get { return _positionConfigTableVisibility; }
|
|
|
- set
|
|
|
- {
|
|
|
- _positionConfigTableVisibility = value;
|
|
|
- NotifyOfPropertyChange(nameof(PositionConfigTableVisibility));
|
|
|
- }
|
|
|
+ set { _positionConfigTableVisibility = value; this.NotifyOfPropertyChange(nameof(PositionConfigTableVisibility)); }
|
|
|
}
|
|
|
private Visibility _downloadUploadVisibility = Visibility.Collapsed;
|
|
|
public Visibility DownloadUploadVisibility
|
|
|
{
|
|
|
get { return _downloadUploadVisibility; }
|
|
|
- set
|
|
|
- {
|
|
|
- _downloadUploadVisibility = value;
|
|
|
- NotifyOfPropertyChange(nameof(DownloadUploadVisibility));
|
|
|
- }
|
|
|
+ set { _downloadUploadVisibility = value; this.NotifyOfPropertyChange(nameof(DownloadUploadVisibility)); }
|
|
|
}
|
|
|
private Visibility _axisBtnVisibility = Visibility.Collapsed;
|
|
|
public Visibility AxisBtnVisibility
|
|
|
{
|
|
|
get { return _axisBtnVisibility; }
|
|
|
- set
|
|
|
- {
|
|
|
- _axisBtnVisibility = value;
|
|
|
- NotifyOfPropertyChange(nameof(AxisBtnVisibility));
|
|
|
- }
|
|
|
+ set { _axisBtnVisibility = value; this.NotifyOfPropertyChange(nameof(AxisBtnVisibility)); }
|
|
|
}
|
|
|
private bool _busyIndicatorVisibility = false;
|
|
|
public bool BusyIndicatorVisibility
|
|
|
{
|
|
|
get { return _busyIndicatorVisibility; }
|
|
|
- set
|
|
|
- {
|
|
|
- _busyIndicatorVisibility = value;
|
|
|
- NotifyOfPropertyChange(nameof(BusyIndicatorVisibility));
|
|
|
- }
|
|
|
+ set { _busyIndicatorVisibility = value; this.NotifyOfPropertyChange(nameof(BusyIndicatorVisibility)); }
|
|
|
}
|
|
|
private bool _allBtnIsEnable = true;
|
|
|
public bool AllBtnIsEnable
|
|
|
{
|
|
|
get { return _allBtnIsEnable; }
|
|
|
- set
|
|
|
- {
|
|
|
- _allBtnIsEnable = value;
|
|
|
- NotifyOfPropertyChange(nameof(AllBtnIsEnable));
|
|
|
- }
|
|
|
+ set { _allBtnIsEnable = value; this.NotifyOfPropertyChange(nameof(AllBtnIsEnable)); }
|
|
|
}
|
|
|
private Visibility _slotBtnVisibility = Visibility.Collapsed;
|
|
|
public Visibility SlotBtnVisibility
|
|
|
{
|
|
|
get { return _slotBtnVisibility; }
|
|
|
- set
|
|
|
- {
|
|
|
- _slotBtnVisibility = value;
|
|
|
- NotifyOfPropertyChange(nameof(SlotBtnVisibility));
|
|
|
- }
|
|
|
+ set { _slotBtnVisibility = value; this.NotifyOfPropertyChange(nameof(SlotBtnVisibility)); }
|
|
|
}
|
|
|
public void SwitchListView(object obj)
|
|
|
{
|
|
|
_checkTypeParameter = obj.ToString();
|
|
|
TableDataSource.Clear();
|
|
|
- _waferRobotParameterNode = FindNodeByName(_allRootNode, $"PM1.RecipeEditParameter.{SystemName}Parameter.{_checkTypeParameter}");
|
|
|
+ _waferRobotParameterNode = FindNodeByName(_allRootNode, $"{SystemName}.{SystemName}Parameter.{_checkTypeParameter}");
|
|
|
_checkAxis = "";
|
|
|
TopBtnGroupDatas = new List<DisplayByWaferType>();
|
|
|
switch (_checkTypeParameter)
|
|
@@ -234,8 +204,11 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+
|
|
|
foreach (var itemType in _waferRobotParameterNode.SubNodes)
|
|
|
{
|
|
|
+
|
|
|
+
|
|
|
foreach (var item in itemType.SubNodes)
|
|
|
{
|
|
|
var ptypeConfig = item.Items.Where(a => a.Name.Equals("Type")).FirstOrDefault();
|
|
@@ -254,6 +227,7 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+
|
|
|
var axisItem = item.Items.Where(a => a.Name.Equals("Axis")).FirstOrDefault();
|
|
|
|
|
|
if (axisItem != null && _checkAxis.Contains(axisItem.DefaultValue))
|
|
@@ -267,19 +241,31 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
TableDataSource = data;
|
|
|
GetDataOfConfigItems();
|
|
|
ClearReadDicData();
|
|
|
+
|
|
|
}
|
|
|
private void PositionAxisNodeToTableDataSource(List<ConfigNode> data)
|
|
|
{
|
|
|
foreach (var itemType in _waferRobotParameterNode.SubNodes)
|
|
|
{
|
|
|
+
|
|
|
+
|
|
|
data.Add(itemType);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
private void GetDataOfConfigItems()
|
|
@@ -294,6 +280,7 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
List<string> getConfigs = new List<string>();
|
|
|
foreach (var item in TableDataSource)
|
|
|
{
|
|
|
+
|
|
|
foreach (var tableItem in item.Items)
|
|
|
{
|
|
|
var key = $"{tableItem.Path}.{tableItem.Name}";
|
|
@@ -311,10 +298,12 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
|
|
|
public async void Upload(object obj)
|
|
|
{
|
|
|
+
|
|
|
var selection = DialogBox.ShowDialog(DialogButton.Yes | DialogButton.No, DialogType.CONFIRM,
|
|
|
$"Are you sure you want to Upload?");
|
|
|
if (selection == DialogButton.No)
|
|
|
return;
|
|
|
+
|
|
|
if (!IsClickButton)
|
|
|
{
|
|
|
return;
|
|
@@ -333,6 +322,8 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
{
|
|
|
SetParameterUpload();
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
async void SetPositionAxisUpload()
|
|
|
{
|
|
|
var allNames = TableDataSource.Select(a => a.Name).ToList();
|
|
@@ -359,14 +350,24 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.ToDownAxis", CheckUnitData(dataConfig.Items[1].Unit, itemValues[0]));
|
|
|
InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.RotateAxis", CheckUnitData(dataConfig.Items[2].Unit, itemValues[1]));
|
|
|
InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.TelescopingAxis1", CheckUnitData(dataConfig.Items[3].Unit, itemValues[2]));
|
|
|
- InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.TelescopingAxis2", CheckUnitData(dataConfig.Items[4].Unit, itemValues[3]));
|
|
|
- InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.VariableSpacingAxis", CheckUnitData(dataConfig.Items[5].Unit, itemValues[4]));
|
|
|
+ if (itemValues.Count>3)
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.TelescopingAxis2", CheckUnitData(dataConfig.Items[4].Unit, itemValues[3]));
|
|
|
+
|
|
|
+ }
|
|
|
+ if (itemValues.Count >4)
|
|
|
+ {
|
|
|
+ InvokeClient.Instance.Service.DoOperation("System.SetConfig", $"{SystemName}.{SystemName}Parameter.PositionAxis.{item.Key}.VariableSpacingAxis", CheckUnitData(dataConfig.Items[5].Unit, itemValues[4]));
|
|
|
+
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
GetDataOfConfigItems();
|
|
|
BusyIndicatorVisibility = false;
|
|
|
AllBtnIsEnable = true;
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
async void SetPositionConfigUpload()
|
|
|
{
|
|
|
|
|
@@ -406,6 +407,7 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
|
|
|
async void SetParameterUpload()
|
|
|
{
|
|
|
+
|
|
|
var allNames = TableDataSource.Select(a => a.Name.Replace("P", "")).ToList();
|
|
|
string parameter = string.Join(";", allNames);
|
|
|
|
|
@@ -429,6 +431,7 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
}
|
|
|
}
|
|
|
GetDataOfConfigItems();
|
|
|
+
|
|
|
BusyIndicatorVisibility = false;
|
|
|
AllBtnIsEnable = true;
|
|
|
}
|
|
@@ -448,6 +451,7 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
result.Add(number);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
return result;
|
|
|
}
|
|
|
private double CheckUnitData(string unitStr, string valueStr, bool isDivision = false)
|
|
@@ -472,15 +476,19 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
return $"{(Math.Abs(setValue) * -1).ToString().PadLeft(length, '0')}";
|
|
|
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
private async Task WaitForResultsAsync()
|
|
|
{
|
|
|
// Simulate waiting for results using a delay
|
|
|
// In a real-world scenario, you might wait for an event or a specific condition
|
|
|
await Task.Delay(TableDataSource.Count * 300);
|
|
|
+
|
|
|
// Here you can add logic to check if the results are ready
|
|
|
// For example, polling or using a completion source
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
private string GetAxisValue(string value)
|
|
|
{
|
|
|
return (double.Parse(value.TrimStart('0')) / 1000).ToString("f3");
|
|
@@ -526,9 +534,17 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
parameter = parameter + $"{item.Name.Replace("P", "")},{setValue};";
|
|
|
|
|
|
}
|
|
|
+ //foreach (var item in SetValues)
|
|
|
+ //{
|
|
|
+
|
|
|
+ // parameter = parameter + $"{item.Key.Replace("P", "")},{item.Value};";
|
|
|
+ //}
|
|
|
+
|
|
|
};
|
|
|
void SetPositionAxisDownload()
|
|
|
{
|
|
|
+
|
|
|
+
|
|
|
setParameter = "SetPositionAxis";
|
|
|
foreach (var item in TableDataSource)
|
|
|
{
|
|
@@ -554,11 +570,14 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
parameter = parameter + $"{item.Name.Replace("P", "")},{setValue};";
|
|
|
|
|
|
}
|
|
|
+
|
|
|
};
|
|
|
}
|
|
|
public void ClearReadDicData()
|
|
|
{
|
|
|
- //InvokeClient.Instance.Service.DoOperation("CarrierRobot.ClearReadDicData");
|
|
|
+ InvokeClient.Instance.Service.DoOperation("CarrierRobot.ClearReadDicData");
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
public void SelectionChangedHandle(object obj)
|
|
|
{
|
|
@@ -617,7 +636,7 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
{
|
|
|
WaferRobotParameterEditViewModel editViewModel = new WaferRobotParameterEditViewModel();
|
|
|
editViewModel.TableNodeItems = colData.Items;
|
|
|
- var rtn = (windowManager as WindowManager)?.ShowDialogWithTitle(editViewModel,this, null, $"Edit {SystemName}Parameter");
|
|
|
+ var rtn = (windowManager as WindowManager)?.ShowDialogWithTitle(editViewModel, null, $"Edit {SystemName}Parameter");
|
|
|
if ((bool)rtn)
|
|
|
{
|
|
|
if (string.IsNullOrEmpty(editViewModel.setValue))
|
|
@@ -631,7 +650,9 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
else
|
|
|
{
|
|
|
SetValues.Add(editViewModel._pName, editViewModel.setValue);
|
|
|
+
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
GetDataOfConfigItems();
|
|
@@ -639,16 +660,21 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
protected override void OnInitialize()
|
|
|
{
|
|
|
base.OnInitialize();
|
|
|
+
|
|
|
InitData();
|
|
|
+
|
|
|
}
|
|
|
private void InitData()
|
|
|
{
|
|
|
+
|
|
|
_allRootNode = SystemConfigProvider.Instance.GetConfig(true);
|
|
|
SwitchListView(_checkTypeParameter);
|
|
|
}
|
|
|
protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
|
|
|
{
|
|
|
base.InvokeAfterUpdateProperty(data);
|
|
|
+ // [Subscription("WaferRobot.ReadRobotParameterResultDict")]
|
|
|
+ //public Dictionary<string, string> ReadRobotParameterResultDict { get; set; }
|
|
|
IsShowRobotDownBtn = (bool)QueryDataClient.Instance.Service.GetConfig("System.IsShowRobotDownBtn");
|
|
|
var readData = QueryDataClient.Instance.Service.GetData($"{SystemName}.ReadRobotParameterResultDict");
|
|
|
if (readData != null)
|
|
@@ -669,5 +695,6 @@ namespace FurnaceUI.Views.Maintenances
|
|
|
else
|
|
|
return FindNodeByName(node, strName.Replace(strCates + ".", ""));
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
}
|