|
@@ -31,6 +31,22 @@ namespace PunkHPX8_MainPages.ViewModels
|
|
|
private RecipeNode _currentNode;
|
|
|
private bool _enable = false;
|
|
|
private bool _isEdit = false;
|
|
|
+ /// <summary>
|
|
|
+ /// Wafer尺寸集合
|
|
|
+ /// </summary>
|
|
|
+ private List<int> _waferSizeLst = null;
|
|
|
+ /// <summary>
|
|
|
+ /// Vacuum Prewet step选择索引
|
|
|
+ /// </summary>
|
|
|
+ private int _selectedVacuumPrewetIndex = -1;
|
|
|
+ /// <summary>
|
|
|
+ /// Extend Clean step选择索引
|
|
|
+ /// </summary>
|
|
|
+ private int _selectedExtendCleanIndex = -1;
|
|
|
+ /// <summary>
|
|
|
+ /// Vent Prewet step选择索引
|
|
|
+ /// </summary>
|
|
|
+ private int _selectedVentPrewetIndex = -1;
|
|
|
#endregion
|
|
|
|
|
|
#region 属性
|
|
@@ -70,7 +86,38 @@ namespace PunkHPX8_MainPages.ViewModels
|
|
|
get { return _recipe; }
|
|
|
set { SetProperty(ref _recipe, value); }
|
|
|
}
|
|
|
-
|
|
|
+ /// <summary>
|
|
|
+ /// Wafer 尺寸集合
|
|
|
+ /// </summary>
|
|
|
+ public List<int> WaferSizeLst
|
|
|
+ {
|
|
|
+ get { return _waferSizeLst; }
|
|
|
+ set { SetProperty(ref _waferSizeLst, value); }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// Vacuum Prewet step选择索引
|
|
|
+ /// </summary>
|
|
|
+ public int SelectedVacuumPrewetIndex
|
|
|
+ {
|
|
|
+ get { return _selectedVacuumPrewetIndex; }
|
|
|
+ set { SetProperty(ref _selectedVacuumPrewetIndex, value); }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// SelectedExtendCleanIndex选择索引
|
|
|
+ /// </summary>
|
|
|
+ public int SelectedExtendCleanIndex
|
|
|
+ {
|
|
|
+ get { return _selectedExtendCleanIndex; }
|
|
|
+ set { SetProperty(ref _selectedExtendCleanIndex, value); }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// SelectedVentPrewetIndex选择索引
|
|
|
+ /// </summary>
|
|
|
+ public int SelectedVentPrewetIndex
|
|
|
+ {
|
|
|
+ get { return _selectedVentPrewetIndex; }
|
|
|
+ set { SetProperty(ref _selectedVentPrewetIndex, value); }
|
|
|
+ }
|
|
|
#region 指令
|
|
|
public ICommand OperationCommand
|
|
|
{
|
|
@@ -85,6 +132,8 @@ namespace PunkHPX8_MainPages.ViewModels
|
|
|
public ICommand SaveRecipeCommand { get; private set; }
|
|
|
[IgnorePropertyChange]
|
|
|
public ICommand SaveAsRecipeCommand { get; private set; }
|
|
|
+ [IgnorePropertyChange]
|
|
|
+ public ICommand IsSprayBarRetractFalseCommand { get; private set; }
|
|
|
#endregion
|
|
|
|
|
|
public VpwRecipeViewModel()
|
|
@@ -94,9 +143,27 @@ namespace PunkHPX8_MainPages.ViewModels
|
|
|
EditCommand = new DelegateCommand<object>(EditAction);
|
|
|
SaveRecipeCommand = new DelegateCommand<object>(SaveAction);
|
|
|
SaveAsRecipeCommand = new DelegateCommand<object>(SaveAsAction);
|
|
|
+ IsSprayBarRetractFalseCommand = new DelegateCommand<object>(IsSprayBarRetractFalseAction);
|
|
|
+
|
|
|
+ //Wafer尺寸集合
|
|
|
+ WaferSizeLst = new List<int>();
|
|
|
+ WaferSizeLst.Add(100);
|
|
|
+ WaferSizeLst.Add(150);
|
|
|
+ WaferSizeLst.Add(200);
|
|
|
+ WaferSizeLst.Add(300);
|
|
|
+
|
|
|
+ InitializeProprtyValidResultDictionary();
|
|
|
}
|
|
|
#endregion
|
|
|
-
|
|
|
+ private void InitializeProprtyValidResultDictionary()
|
|
|
+ {
|
|
|
+ //需要检验的参数
|
|
|
+ PropertyValidResultDic["VacuumTarget"] = false;
|
|
|
+ PropertyValidResultDic["DryHoldTime"] = false;
|
|
|
+ PropertyValidResultDic["DiwLoopDoSet"] = false;
|
|
|
+ PropertyValidResultDic["SpinSpeed"] = false;
|
|
|
+ PropertyValidResultDic["SpinTime"] = false;
|
|
|
+ }
|
|
|
|
|
|
public void LoadRecipeData()
|
|
|
{
|
|
@@ -282,5 +349,275 @@ namespace PunkHPX8_MainPages.ViewModels
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ private void IsSprayBarRetractFalseAction(object param)
|
|
|
+ {
|
|
|
+ Recipe.IsSprayBarRetract = false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ #region Vacuum prewet按钮
|
|
|
+ /// <summary>
|
|
|
+ /// 增加
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void AddBelowAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ VpwRinseStep currentRinseSteps = new VpwRinseStep();
|
|
|
+ Recipe.VacuumRinseStep.Insert(SelectedVacuumPrewetIndex + 1, currentRinseSteps);
|
|
|
+ SelectedVacuumPrewetIndex++;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 增加
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void AddAboveAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ VpwRinseStep currentRinseSteps = new VpwRinseStep();
|
|
|
+ if (SelectedVacuumPrewetIndex == -1)
|
|
|
+ {
|
|
|
+ Recipe.VacuumRinseStep.Add(currentRinseSteps);
|
|
|
+ SelectedVacuumPrewetIndex = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Recipe.VacuumRinseStep.Insert(SelectedVacuumPrewetIndex, currentRinseSteps);
|
|
|
+ SelectedVacuumPrewetIndex--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 上移
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void MoveUpAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ if (SelectedVacuumPrewetIndex > 0)
|
|
|
+ {
|
|
|
+ int currentIndex = SelectedVacuumPrewetIndex;
|
|
|
+ VpwRinseStep currentRinseSteps = Recipe.VacuumRinseStep[SelectedVacuumPrewetIndex];
|
|
|
+ Recipe.VacuumRinseStep.RemoveAt(SelectedVacuumPrewetIndex);
|
|
|
+ Recipe.VacuumRinseStep.Insert(currentIndex - 1, currentRinseSteps);
|
|
|
+ SelectedVacuumPrewetIndex = currentIndex - 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 下移
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void MoveDownAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ if (SelectedVacuumPrewetIndex >= 0 && SelectedVacuumPrewetIndex < Recipe.VacuumRinseStep.Count - 1 && Recipe.VacuumRinseStep.Count > 1)
|
|
|
+ {
|
|
|
+ int currentIndex = SelectedVacuumPrewetIndex;
|
|
|
+ VpwRinseStep currentRinseSteps = Recipe.VacuumRinseStep[SelectedVacuumPrewetIndex];
|
|
|
+ Recipe.VacuumRinseStep.RemoveAt(SelectedVacuumPrewetIndex);
|
|
|
+ Recipe.VacuumRinseStep.Insert(currentIndex + 1, currentRinseSteps);
|
|
|
+ SelectedVacuumPrewetIndex = currentIndex + 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 删除
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void DeleteAction(object param)
|
|
|
+ {
|
|
|
+ if (SelectedVacuumPrewetIndex != -1)
|
|
|
+ {
|
|
|
+ if (Recipe != null && Recipe.VacuumRinseStep.Count > SelectedVacuumPrewetIndex)
|
|
|
+ {
|
|
|
+ Recipe.VacuumRinseStep.RemoveAt(SelectedVacuumPrewetIndex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region Vent prewet按钮
|
|
|
+ /// <summary>
|
|
|
+ /// 增加
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void VentPrewetAddBelowAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ VpwRinseStep currentRinseSteps = new VpwRinseStep();
|
|
|
+ Recipe.VentRinseStep.Insert(SelectedVentPrewetIndex + 1, currentRinseSteps);
|
|
|
+ SelectedVentPrewetIndex++;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 增加
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void VentPrewetAddAboveAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ VpwRinseStep currentRinseSteps = new VpwRinseStep();
|
|
|
+ if (SelectedVentPrewetIndex == -1)
|
|
|
+ {
|
|
|
+ Recipe.VentRinseStep.Add(currentRinseSteps);
|
|
|
+ SelectedVentPrewetIndex = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Recipe.VentRinseStep.Insert(SelectedVentPrewetIndex, currentRinseSteps);
|
|
|
+ SelectedVentPrewetIndex--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 上移
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void VentPrewetMoveUpAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ if (SelectedVentPrewetIndex > 0)
|
|
|
+ {
|
|
|
+ int currentIndex = SelectedVentPrewetIndex;
|
|
|
+ VpwRinseStep currentRinseSteps = Recipe.VentRinseStep[SelectedVentPrewetIndex];
|
|
|
+ Recipe.VentRinseStep.RemoveAt(SelectedVentPrewetIndex);
|
|
|
+ Recipe.VentRinseStep.Insert(currentIndex - 1, currentRinseSteps);
|
|
|
+ SelectedVentPrewetIndex = currentIndex - 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 下移
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void VentPrewetMoveDownAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ if (SelectedVentPrewetIndex >= 0 && SelectedVentPrewetIndex < Recipe.VentRinseStep.Count - 1 && Recipe.VentRinseStep.Count > 1)
|
|
|
+ {
|
|
|
+ int currentIndex = SelectedVentPrewetIndex;
|
|
|
+ VpwRinseStep currentRinseSteps = Recipe.VentRinseStep[SelectedVentPrewetIndex];
|
|
|
+ Recipe.VentRinseStep.RemoveAt(SelectedVentPrewetIndex);
|
|
|
+ Recipe.VentRinseStep.Insert(currentIndex + 1, currentRinseSteps);
|
|
|
+ SelectedVentPrewetIndex = currentIndex + 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 删除
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void VentPrewetDeleteAction(object param)
|
|
|
+ {
|
|
|
+ if (SelectedVentPrewetIndex != -1)
|
|
|
+ {
|
|
|
+ if (Recipe != null && Recipe.VentRinseStep.Count > SelectedVentPrewetIndex)
|
|
|
+ {
|
|
|
+ Recipe.VentRinseStep.RemoveAt(SelectedVentPrewetIndex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ #region Extend Clean按钮
|
|
|
+ /// <summary>
|
|
|
+ /// 增加
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void ExtendCleanAddBelowAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ VpwRinseStep currentRinseSteps = new VpwRinseStep();
|
|
|
+ Recipe.ExtendCleanRinseStep.Insert(SelectedExtendCleanIndex + 1, currentRinseSteps);
|
|
|
+ SelectedExtendCleanIndex++;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 增加
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void ExtendCleanAddAboveAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ VpwRinseStep currentRinseSteps = new VpwRinseStep();
|
|
|
+ if (SelectedExtendCleanIndex == -1)
|
|
|
+ {
|
|
|
+ Recipe.ExtendCleanRinseStep.Add(currentRinseSteps);
|
|
|
+ SelectedExtendCleanIndex = 0;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Recipe.ExtendCleanRinseStep.Insert(SelectedExtendCleanIndex, currentRinseSteps);
|
|
|
+ SelectedExtendCleanIndex--;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 上移
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void ExtendCleanMoveUpAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ if (SelectedExtendCleanIndex > 0)
|
|
|
+ {
|
|
|
+ int currentIndex = SelectedExtendCleanIndex;
|
|
|
+ VpwRinseStep currentRinseSteps = Recipe.ExtendCleanRinseStep[SelectedExtendCleanIndex];
|
|
|
+ Recipe.ExtendCleanRinseStep.RemoveAt(SelectedExtendCleanIndex);
|
|
|
+ Recipe.ExtendCleanRinseStep.Insert(currentIndex - 1, currentRinseSteps);
|
|
|
+ SelectedExtendCleanIndex = currentIndex - 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 下移
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void ExtendCleanMoveDownAction(object param)
|
|
|
+ {
|
|
|
+ if (Recipe != null)
|
|
|
+ {
|
|
|
+ if (SelectedExtendCleanIndex >= 0 && SelectedExtendCleanIndex < Recipe.ExtendCleanRinseStep.Count - 1 && Recipe.ExtendCleanRinseStep.Count > 1)
|
|
|
+ {
|
|
|
+ int currentIndex = SelectedExtendCleanIndex;
|
|
|
+ VpwRinseStep currentRinseSteps = Recipe.ExtendCleanRinseStep[SelectedExtendCleanIndex];
|
|
|
+ Recipe.ExtendCleanRinseStep.RemoveAt(SelectedExtendCleanIndex);
|
|
|
+ Recipe.ExtendCleanRinseStep.Insert(currentIndex + 1, currentRinseSteps);
|
|
|
+ SelectedExtendCleanIndex = currentIndex + 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /// <summary>
|
|
|
+ /// 删除
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="param"></param>
|
|
|
+ private void ExtendCleanDeleteAction(object param)
|
|
|
+ {
|
|
|
+ if (SelectedExtendCleanIndex != -1)
|
|
|
+ {
|
|
|
+ if (Recipe != null && Recipe.ExtendCleanRinseStep.Count > SelectedExtendCleanIndex)
|
|
|
+ {
|
|
|
+ Recipe.ExtendCleanRinseStep.RemoveAt(SelectedExtendCleanIndex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
}
|
|
|
}
|