移除PMProcessView视图、ProcessMonitor视图。
将一些常用的using整合到GlobalUsings.cs文件中,定义为全局using。
This commit is contained in:
parent
559fdaf4f9
commit
1dac143c58
|
@ -1,5 +1,4 @@
|
|||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System.Collections.Generic;
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
|
||||
<menuItem id="PM1" resKey="PM1" System="PM1">
|
||||
<menuItem id="mainPM1" resKey="Main" System="PM1" viewmodel="SicUI.Models.PMs.PMOperationViewModel,SicUI" />
|
||||
<menuItem id="processPM1" resKey="Process" System="PM1" viewmodel="SicUI.Models.PMs.PMProcessViewModel,SicUI" />
|
||||
<menuItem id="processPM1" resKey="Process" System="PM1" viewmodel="MECF.Framework.UI.Client.CenterViews.Modules.PM.PMProcessViewModel,MECF.Framework.UI.Client" />
|
||||
<menuItem id="ioPM1" resKey="IO" System="PM1.io" viewmodel="MECF.Framework.UI.Client.CenterViews.Maitenances.IO3.IO3ViewModel,MECF.Framework.UI.Client" />
|
||||
<menuItem id="motionPM1" resKey="Motion" System="PM1" viewmodel="SicUI.Models.PMs.PMMotionViewModel,SicUI" />
|
||||
<menuItem id="heaterPM1" resKey="Heater" System="PM1" viewmodel="SicUI.Models.PMs.PMHeaterViewModel,SicUI" />
|
||||
|
@ -56,7 +56,7 @@
|
|||
|
||||
<menuItem id="PM2" resKey="PM2" System="PM2">
|
||||
<menuItem id="mainPM2" resKey="Main" System="PM2" viewmodel="SicUI.Models.PMs.PMOperationViewModel,SicUI" />
|
||||
<menuItem id="processPM2" resKey="Process" System="PM2" viewmodel="SicUI.Models.PMs.PMProcessViewModel,SicUI" />
|
||||
<menuItem id="processPM2" resKey="Process" System="PM2" viewmodel="MECF.Framework.UI.Client.CenterViews.Modules.PM.PMProcessViewModel,MECF.Framework.UI.Client" />
|
||||
<menuItem id="ioPM2" resKey="IO" System="PM2.io" viewmodel="MECF.Framework.UI.Client.CenterViews.Maitenances.IO3.IO3ViewModel,MECF.Framework.UI.Client" />
|
||||
<menuItem id="motionPM2" resKey="Motion" System="PM2" viewmodel="SicUI.Models.PMs.PMMotionViewModel,SicUI" />
|
||||
<menuItem id="heaterPM2" resKey="Heater" System="PM2" viewmodel="SicUI.Models.PMs.PMHeaterViewModel,SicUI" />
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using Aitex.Core.Common.DeviceData;
|
||||
using Aitex.Core.UI.ControlDataContext;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using Aitex.Core.Common.DeviceData;
|
||||
using Aitex.Core.UI.ControlDataContext;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
using Aitex.Core.Common.DeviceData;
|
||||
using Aitex.Core.UI.ControlDataContext;
|
||||
using Caliburn.Micro;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.Ctrlib.UnitControls;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -3,7 +3,6 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using MECF.Framework.Common.CommonData;
|
||||
|
||||
namespace SicUI.Controls.Common
|
||||
{
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MECF.Framework.Common.CommonData;
|
||||
using SicUI.Controls.Common;
|
||||
using SicUI.Controls.Common;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MECF.Framework.Common.CommonData;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MECF.Framework.Common.CommonData;
|
||||
using SicUI.Controls.Common;
|
||||
using SicUI.Controls.Common;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MECF.Framework.Common.CommonData;
|
||||
using SicUI.Controls.Common;
|
||||
using SicUI.Controls.Common;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using Aitex.Core.UI.MVVM;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using Aitex.Core.Common.DeviceData;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MECF.Framework.Common.OperationCenter;
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
|
|
@ -7,7 +7,7 @@ using System.Windows.Input;
|
|||
|
||||
using OpenSEMI.ClientBase;
|
||||
using OpenSEMI.ClientBase.Command;
|
||||
using MECF.Framework.Common.RecipeCenter;
|
||||
|
||||
namespace SicUI.Client.Dialog
|
||||
{
|
||||
public class ItemsSelectDialogViewModel : DialogViewModel<string>
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// Global using directives
|
||||
|
||||
global using MECF.Framework.Common.CommonData;
|
||||
global using MECF.Framework.Common.DataCenter;
|
||||
global using MECF.Framework.Common.OperationCenter;
|
||||
global using MECF.Framework.Common.RecipeCenter;
|
||||
global using MECF.Framework.UI.Client;
|
||||
global using MECF.Framework.UI.Client.CenterViews.Editors.Sequence;
|
||||
global using MECF.Framework.UI.Client.CenterViews.Modules.PM;
|
|
@ -6,8 +6,6 @@ using Aitex.Core.Util;
|
|||
using Aitex.Core.WCF;
|
||||
using Caliburn.Micro;
|
||||
using MECF.Framework.Common.Account.Extends;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.CenterViews.LogOnOff;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using MECF.Framework.UI.Core.Accounts;
|
||||
|
|
|
@ -3,209 +3,11 @@ using System.Windows;
|
|||
using Aitex.Core.RT.Log;
|
||||
using Aitex.Core.Util;
|
||||
using Caliburn.Micro;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using OpenSEMI.Ctrlib.Controls;
|
||||
|
||||
namespace SicUI.Models
|
||||
{
|
||||
public class SicModuleUIViewModelBase : UiViewModelBase
|
||||
{
|
||||
public ModuleInfo CassAL
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["CassAL"].WaferManager.Wafers.Count > 0)
|
||||
return ModuleManager.ModuleInfos["CassAL"];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public ModuleInfo CassAR
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["CassAR"].WaferManager.Wafers.Count > 0)
|
||||
return ModuleManager.ModuleInfos["CassAR"];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public ModuleInfo CassBL
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["CassBL"].WaferManager.Wafers.Count > 0)
|
||||
return ModuleManager.ModuleInfos["CassBL"];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public ModuleInfo Buffer
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["Buffer"].WaferManager.Wafers.Count > 0)
|
||||
return ModuleManager.ModuleInfos["Buffer"];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public ModuleInfo Aligner { get; set; }
|
||||
public ModuleInfo TMRobot { get; set; }
|
||||
public ModuleInfo WaferRobot { get; set; }
|
||||
public ModuleInfo TrayRobot { get; set; }
|
||||
public ModuleInfo LoadLock { get; set; }
|
||||
public ModuleInfo UnLoad { get; set; }
|
||||
public ModuleInfo PM1 { get; set; }
|
||||
public ModuleInfo PM2 { get; set; }
|
||||
|
||||
|
||||
#region Wafer info for machine
|
||||
|
||||
|
||||
public WaferInfo BufferWafer
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["Buffer"].WaferManager.Wafers.Count > 0)
|
||||
return ModuleManager.ModuleInfos["Buffer"].WaferManager.Wafers[0];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public WaferInfo PM1Wafer
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers.Count > 0)
|
||||
return ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers[0];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public WaferInfo PM2Wafer
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["PM2"].WaferManager.Wafers.Count > 0)
|
||||
return ModuleManager.ModuleInfos["PM2"].WaferManager.Wafers[0];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public WaferInfo Wafer1
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers.Count > 0)
|
||||
return ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[0];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public WaferInfo TrayRobotWafer
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["TrayRobot"].WaferManager.Wafers.Count > 0)
|
||||
return ModuleManager.ModuleInfos["TrayRobot"].WaferManager.Wafers[0];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
public WaferInfo WaferRobotWafer
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["WaferRobot"].WaferManager.Wafers.Count > 0)
|
||||
return ModuleManager.ModuleInfos["WaferRobot"].WaferManager.Wafers[0];
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Tray Visble
|
||||
public Visibility TrayRobotHaveTray
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["TrayRobot"].WaferManager.Wafers.Count > 0 && ModuleManager.ModuleInfos["TrayRobot"].WaferManager.Wafers[0].WaferTrayStatus > 0)
|
||||
{
|
||||
return Visibility.Visible;
|
||||
}
|
||||
return Visibility.Hidden;
|
||||
}
|
||||
}
|
||||
|
||||
public Visibility TMRobotHaveTray
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers.Count > 0 && ModuleManager.ModuleInfos["TMRobot"].WaferManager.Wafers[0].WaferTrayStatus > 0)
|
||||
{
|
||||
return Visibility.Visible;
|
||||
}
|
||||
return Visibility.Hidden;
|
||||
}
|
||||
}
|
||||
|
||||
public Visibility LoadLockHaveTray
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["LoadLock"].WaferManager.Wafers.Count > 0 && ModuleManager.ModuleInfos["LoadLock"].WaferManager.Wafers[0].WaferTrayStatus > 0)
|
||||
{
|
||||
return Visibility.Visible;
|
||||
}
|
||||
return Visibility.Hidden;
|
||||
}
|
||||
}
|
||||
|
||||
public Visibility UnLoadHaveTray
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["UnLoad"].WaferManager.Wafers.Count > 0 && ModuleManager.ModuleInfos["UnLoad"].WaferManager.Wafers[0].WaferTrayStatus > 0)
|
||||
{
|
||||
return Visibility.Visible;
|
||||
}
|
||||
return Visibility.Hidden;
|
||||
}
|
||||
}
|
||||
|
||||
public Visibility PM1HaveTray
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers.Count > 0 && ModuleManager.ModuleInfos["PM1"].WaferManager.Wafers[0].WaferTrayStatus > 0)
|
||||
{
|
||||
return Visibility.Visible;
|
||||
}
|
||||
return Visibility.Hidden;
|
||||
}
|
||||
}
|
||||
|
||||
public Visibility PM2HaveTray
|
||||
{
|
||||
get
|
||||
{
|
||||
if (ModuleManager.ModuleInfos["PM2"].WaferManager.Wafers.Count > 0 && ModuleManager.ModuleInfos["PM2"].WaferManager.Wafers[0].WaferTrayStatus > 0)
|
||||
{
|
||||
return Visibility.Visible;
|
||||
}
|
||||
return Visibility.Hidden;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
protected void InitPM()
|
||||
{
|
||||
TMRobot = ModuleManager.ModuleInfos["TMRobot"];
|
||||
PM1 = ModuleManager.ModuleInfos["PM1"];
|
||||
PM2 = ModuleManager.ModuleInfos["PM2"];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public class SicUIViewModelBase : UiViewModelBase
|
||||
{
|
||||
public string SystemName { get; set; }
|
||||
|
|
|
@ -10,9 +10,6 @@ using Aitex.Core.Util;
|
|||
using Aitex.Sorter.Common;
|
||||
using Caliburn.Micro.Core;
|
||||
using SicUI.Models;
|
||||
using MECF.Framework.Common.CommonData;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using OpenSEMI.ClientBase;
|
||||
using SciChart.Core.Extensions;
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
using MECF.Framework.Common.CommonData;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.DBCore;
|
||||
using MECF.Framework.Common.DBCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using Aitex.Core.Util;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using SicUI.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
using Aitex.Core.Common.DeviceData;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.CommonData;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using SicUI.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.CommonData;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using SicUI.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -3,7 +3,6 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using OpenSEMI.ClientBase.ServiceProvider;
|
||||
|
||||
namespace SicUI.Client.Models.Platform.TM
|
||||
|
|
|
@ -4,9 +4,6 @@ using Aitex.Core.Common.DeviceData;
|
|||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using SicUI.Models;
|
||||
using MECF.Framework.Common.CommonData;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using Caliburn.Micro;
|
||||
using System.Windows.Input;
|
||||
using Aitex.Core.UI.MVVM;
|
||||
|
|
|
@ -1,15 +1,10 @@
|
|||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.CommonData;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.Common.RecipeCenter;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using Caliburn.Micro;
|
||||
using MECF.Framework.UI.Client.CenterViews.Editors.Sequence;
|
||||
using MECF.Framework.UI.Client.CenterViews.Operations.WaferAssociation;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using OpenSEMI.ClientBase;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using Aitex.Core.RT.Log;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System;
|
||||
|
|
|
@ -1,14 +1,10 @@
|
|||
using Aitex.Common.Util;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using SciChart.Charting.Visuals.RenderableSeries;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace SicUI.Models.PMs.Charting
|
||||
{
|
||||
|
|
|
@ -4,7 +4,6 @@ using Aitex.Core.Util;
|
|||
using Aitex.Core.Utilities;
|
||||
using Caliburn.Micro.Core;
|
||||
using MECF.Framework.Common.ControlDataContext;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.UI.Client.CenterViews.DataLogs.ProcessHistory;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using SciChart.Charting.ChartModifiers;
|
||||
|
|
|
@ -2,10 +2,7 @@
|
|||
using Aitex.Core.Util;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Caliburn.Micro;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
|
||||
using MECF.Framework.UI.Client.CenterViews.Editors.Sequence;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
using Aitex.Core.Common.DeviceData;
|
||||
using Aitex.Core.Util;
|
||||
using Caliburn.Micro;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
|
||||
using MECF.Framework.UI.Client.CenterViews.Editors.Sequence;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -9,10 +9,7 @@ using Aitex.Core.RT.Log;
|
|||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using Caliburn.Micro.Core;
|
||||
using MECF.Framework.Common.CommonData;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using OpenSEMI.ClientBase;
|
||||
using SciChart.Core.Extensions;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
using Aitex.Core.Common.DeviceData;
|
||||
using Aitex.Core.Util;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -2,10 +2,7 @@
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using Aitex.Core.Util;
|
||||
using Caliburn.Micro;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
|
||||
using MECF.Framework.UI.Client.CenterViews.Editors.Sequence;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -3,9 +3,6 @@ using Aitex.Core.RT.Event;
|
|||
using Aitex.Core.RT.SCCore;
|
||||
using Aitex.Core.Util;
|
||||
using Caliburn.Micro;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using SicUI.Controls;
|
||||
using System;
|
||||
|
|
|
@ -2,10 +2,7 @@
|
|||
using Aitex.Core.Util;
|
||||
using Aitex.Core.Utilities;
|
||||
using Caliburn.Micro;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.CenterViews.Editors.Recipe;
|
||||
using MECF.Framework.UI.Client.CenterViews.Editors.Sequence;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using OpenSEMI.ClientBase;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,525 +0,0 @@
|
|||
#define _FAKE_DATA
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Windows.Data;
|
||||
using Aitex.Core.RT.Log;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using Sicentury.Core;
|
||||
using SicModules.PMs;
|
||||
|
||||
#if FAKE_DATA
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
#endif
|
||||
|
||||
|
||||
namespace SicUI.Models.PMs
|
||||
{
|
||||
public class ObservableQueue<T> : Queue<T>, INotifyCollectionChanged
|
||||
{
|
||||
public event NotifyCollectionChangedEventHandler CollectionChanged;
|
||||
|
||||
private readonly object _syncRoot = new object();
|
||||
|
||||
#region Constructors
|
||||
|
||||
public ObservableQueue()
|
||||
{
|
||||
LimitSize = 0;
|
||||
}
|
||||
|
||||
public ObservableQueue(int capacity) : base(capacity)
|
||||
{
|
||||
LimitSize = capacity;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public int LimitSize { get; }
|
||||
|
||||
public new virtual void Enqueue(T obj)
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
base.Enqueue(obj);
|
||||
|
||||
if (LimitSize > 0 && base.Count > LimitSize)
|
||||
base.Dequeue();
|
||||
|
||||
CollectionChanged?.Invoke(this,
|
||||
new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, obj));
|
||||
}
|
||||
}
|
||||
|
||||
public new virtual T Dequeue()
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
var obj = base.Dequeue();
|
||||
CollectionChanged?.Invoke(this,
|
||||
new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Remove, obj));
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public new virtual void Clear()
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
base.Clear();
|
||||
CollectionChanged?.Invoke(this,
|
||||
new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class GasFlowCounter : BindableBase
|
||||
{
|
||||
#region Variables
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
public GasFlowCounter(string gasName)
|
||||
{
|
||||
GasName = gasName;
|
||||
TotalFlow = 0;
|
||||
}
|
||||
|
||||
public GasFlowCounter(string gasName, double initValue) : this(gasName)
|
||||
{
|
||||
TotalFlow = initValue;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public string GasName { get; }
|
||||
|
||||
public double TotalFlow { get; private set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
public void AddFlow(double increment)
|
||||
{
|
||||
TotalFlow += increment;
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"{TotalFlow:F1}";
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class PmGasFlowCountInfo : BindableBase
|
||||
{
|
||||
#region Variables
|
||||
|
||||
private DateTime _statStart;
|
||||
private DateTime? _statEnd;
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
public PmGasFlowCountInfo(int index, Guid uid, string recipeName, string waferUid, DateTime beginTime, DateTime endTime, double h2,
|
||||
double ar,
|
||||
double pn2, double hcl, double sih4, double cxhx, double tcs, double tma)
|
||||
{
|
||||
Index = index;
|
||||
StatisticsUid = uid;
|
||||
RecipeName = recipeName;
|
||||
WaferId = waferUid;
|
||||
StatisticsStart = beginTime;
|
||||
StatisticsEnd = endTime;
|
||||
H2 = new GasFlowCounter(nameof(H2), h2);
|
||||
Ar = new GasFlowCounter(nameof(Ar), ar);
|
||||
PN2 = new GasFlowCounter(nameof(PN2), pn2);
|
||||
HCL = new GasFlowCounter(nameof(HCL), hcl);
|
||||
SiH4 = new GasFlowCounter(nameof(SiH4), sih4);
|
||||
CxHx = new GasFlowCounter(nameof(CxHx), cxhx);
|
||||
TCS = new GasFlowCounter(nameof(TCS), tcs);
|
||||
TMA = new GasFlowCounter(nameof(TMA), tma);
|
||||
|
||||
|
||||
}
|
||||
|
||||
public PmGasFlowCountInfo()
|
||||
{
|
||||
StatisticsUid = Guid.NewGuid();
|
||||
WaferId = string.Empty;
|
||||
RecipeName = string.Empty;
|
||||
StatisticsStart = DateTime.Now;
|
||||
|
||||
H2 = new GasFlowCounter(nameof(H2));
|
||||
Ar = new GasFlowCounter(nameof(Ar));
|
||||
PN2 = new GasFlowCounter(nameof(PN2));
|
||||
HCL = new GasFlowCounter(nameof(HCL));
|
||||
SiH4 = new GasFlowCounter(nameof(SiH4));
|
||||
CxHx = new GasFlowCounter(nameof(CxHx));
|
||||
TCS = new GasFlowCounter(nameof(TCS));
|
||||
TMA = new GasFlowCounter(nameof(TMA));
|
||||
}
|
||||
|
||||
public PmGasFlowCountInfo(string waferId) : this()
|
||||
{
|
||||
WaferId = waferId;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public int Index { get; set; }
|
||||
|
||||
public string WaferId { get; }
|
||||
|
||||
public string RecipeName { get; }
|
||||
|
||||
public Guid StatisticsUid { get; }
|
||||
|
||||
public DateTime StatisticsStart
|
||||
{
|
||||
get => _statStart;
|
||||
set => Set(ref _statStart, value);
|
||||
}
|
||||
|
||||
public DateTime? StatisticsEnd
|
||||
{
|
||||
get => _statEnd;
|
||||
set => Set(ref _statEnd, value);
|
||||
}
|
||||
|
||||
public GasFlowCounter H2 { get; }
|
||||
|
||||
public GasFlowCounter Ar { get; }
|
||||
|
||||
public GasFlowCounter PN2 { get; }
|
||||
|
||||
public GasFlowCounter HCL { get; }
|
||||
|
||||
public GasFlowCounter SiH4 { get; }
|
||||
|
||||
public GasFlowCounter CxHx { get; }
|
||||
|
||||
public GasFlowCounter TCS { get; }
|
||||
|
||||
public GasFlowCounter TMA { get; }
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
||||
public class PMProcessGasFlowCounterViewModel : UiViewModelBase
|
||||
{
|
||||
#region Variables
|
||||
|
||||
private const int MAX_ROWS = 10;
|
||||
|
||||
private readonly object _syncObject = new object();
|
||||
|
||||
private readonly PMProcessViewModel _pmProcessVm;
|
||||
private string _previousStatus;
|
||||
|
||||
|
||||
#if FAKE_DATA
|
||||
|
||||
private readonly Random _randomFlow;
|
||||
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
|
||||
public PMProcessGasFlowCounterViewModel(PMProcessViewModel vm)
|
||||
{
|
||||
_previousStatus = PMModule.STATE.Init.ToString();
|
||||
_pmProcessVm = vm;
|
||||
GasFlowCountCollection = new ObservableQueue<PmGasFlowCountInfo>(MAX_ROWS);
|
||||
GasFlowCountCollection.CollectionChanged += GasFlowCountCollectionOnCollectionChanged;
|
||||
vm.PropertyChanged += VmOnPropertyChanged;
|
||||
|
||||
// 加载历史记录。
|
||||
ReadLastFlowCounts();
|
||||
|
||||
#if FAKE_DATA
|
||||
|
||||
_randomFlow = new Random();
|
||||
|
||||
//for (var i = 0; i < 10; i++)
|
||||
//{
|
||||
// var counter = new PmGasFlowCountInfo();
|
||||
// counter.H2.AddFlow(_randomFlow.NextDouble());
|
||||
// counter.Ar.AddFlow(_randomFlow.NextDouble());
|
||||
// counter.PN2.AddFlow(_randomFlow.NextDouble());
|
||||
// counter.HCL.AddFlow(_randomFlow.NextDouble());
|
||||
// counter.SiH4.AddFlow(_randomFlow.NextDouble());
|
||||
// counter.C3H8.AddFlow(_randomFlow.NextDouble());
|
||||
// counter.TCS.AddFlow(_randomFlow.NextDouble());
|
||||
// counter.TMA.AddFlow(_randomFlow.NextDouble());
|
||||
// counter.StatisticsEnd = DateTime.Now;
|
||||
|
||||
// GasFlowCountCollection.Enqueue(counter);
|
||||
|
||||
// CurrentFlowCounter = counter;
|
||||
//}
|
||||
|
||||
// Add new Flow Counter every 5s
|
||||
Task.Run(() =>
|
||||
{
|
||||
while (true)
|
||||
{
|
||||
Thread.Sleep(5000);
|
||||
if (CurrentFlowCounter != null)
|
||||
{
|
||||
// 结束当前的统计,随后开启新统计
|
||||
CurrentFlowCounter.StatisticsEnd = DateTime.Now;
|
||||
SaveFlowCount(CurrentFlowCounter);
|
||||
}
|
||||
|
||||
var counter = new PmGasFlowCountInfo();
|
||||
GasFlowCountCollection.Enqueue(counter);
|
||||
CurrentFlowCounter = counter;
|
||||
}
|
||||
});
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Properties
|
||||
|
||||
public ObservableQueue<PmGasFlowCountInfo> GasFlowCountCollection { get; }
|
||||
|
||||
public PmGasFlowCountInfo CurrentFlowCounter { get; private set; }
|
||||
|
||||
public ICollectionView GasFlowDetailList
|
||||
{
|
||||
get
|
||||
{
|
||||
var view = CollectionViewSource.GetDefaultView(GasFlowCountCollection.ToList());
|
||||
view.SortDescriptions.Add(new SortDescription(nameof(PmGasFlowCountInfo.Index),
|
||||
ListSortDirection.Ascending));
|
||||
return view;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Methods
|
||||
|
||||
private void GasFlowCountCollectionOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||
{
|
||||
// 列表发生变化时重新排序。
|
||||
if (e.Action == NotifyCollectionChangedAction.Add)
|
||||
{
|
||||
var i = 1;
|
||||
GasFlowCountCollection.ToList().OrderByDescending(x => x.StatisticsStart).ToList().ForEach(x =>
|
||||
{
|
||||
x.Index = i;
|
||||
i++;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 监测Process的Status属性是否变化,以确定Process的开始和结束时机。
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void VmOnPropertyChanged(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName == nameof(PMOperationViewModel.Status))
|
||||
{
|
||||
var currentStatus = _pmProcessVm.Status;
|
||||
|
||||
if (CheckIfProcessStarted(_previousStatus, currentStatus))
|
||||
{
|
||||
// Process启动
|
||||
|
||||
lock (_syncObject)
|
||||
{
|
||||
CurrentFlowCounter = new PmGasFlowCountInfo();
|
||||
GasFlowCountCollection.Enqueue(CurrentFlowCounter);
|
||||
}
|
||||
|
||||
}
|
||||
else if (CheckIfProcessStopped(_previousStatus, currentStatus))
|
||||
{
|
||||
lock (_syncObject)
|
||||
{
|
||||
// Process结束
|
||||
if (CurrentFlowCounter != null)
|
||||
{
|
||||
CurrentFlowCounter.StatisticsEnd = DateTime.Now;
|
||||
|
||||
// 写数据库
|
||||
SaveFlowCount(CurrentFlowCounter);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Debug.WriteLineIf(_previousStatus != currentStatus,
|
||||
$"PM Process Status: {_previousStatus} to {currentStatus}");
|
||||
|
||||
_previousStatus = currentStatus;
|
||||
}
|
||||
}
|
||||
|
||||
private bool CheckIfProcessStarted(string previousStatus, string currentStatus)
|
||||
{
|
||||
if (previousStatus == PMModule.STATE.ProcessIdle.ToString() &&
|
||||
currentStatus == PMModule.STATE.PreProcess.ToString())
|
||||
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool CheckIfProcessStopped(string previousStatus, string currentStatus)
|
||||
{
|
||||
if ((previousStatus != PMModule.STATE.ProcessIdle.ToString() &&
|
||||
currentStatus == PMModule.STATE.ProcessIdle.ToString()) ||
|
||||
(previousStatus != PMModule.STATE.Error.ToString() &&
|
||||
currentStatus == PMModule.STATE.Error.ToString()))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将统计值保存到数据库。
|
||||
/// </summary>
|
||||
/// <param name="count"></param>
|
||||
private void SaveFlowCount(PmGasFlowCountInfo count)
|
||||
{
|
||||
try
|
||||
{
|
||||
var c = count;
|
||||
var sql = $"INSERT INTO process_flow_data " +
|
||||
$"(process_guid, module_name, recipe_name, wafer_guid, process_begin_time, process_end_time, h2, ar, pn2, hcl, sih4, c3h8, tcs, tma) " +
|
||||
$"VALUES " +
|
||||
$"('{c.StatisticsUid:D}', '{_pmProcessVm.SystemName}', '{_pmProcessVm.SelectedRecipe}', '{c.WaferId:D}', " +
|
||||
$"'{c.StatisticsStart:yyyy/MM/dd HH:mm:ss.fff}', '{c.StatisticsEnd:yyyy/MM/dd HH:mm:ss.fff}', " +
|
||||
$"{c.H2}, {c.Ar}, {c.PN2}, {c.HCL}, {c.SiH4}, {c.CxHx}, {c.TCS}, {c.TMA})";
|
||||
|
||||
QueryDataClient.Instance.Service.QueryData(sql);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LOG.Error($"Unable to save total gas flow to database, {ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从数据库加载指定的记录。
|
||||
/// </summary>
|
||||
/// <param name="limit"></param>
|
||||
private void ReadLastFlowCounts(int limit = MAX_ROWS)
|
||||
{
|
||||
try
|
||||
{
|
||||
var sql =
|
||||
$"SELECT * FROM process_flow_data where module_name = '{_pmProcessVm.SystemName}' " +
|
||||
$" ORDER BY process_begin_time DESC LIMIT {limit}";
|
||||
var dt = QueryDataClient.Instance.Service.QueryData(sql);
|
||||
if (dt != null && dt.Rows.Count > 0)
|
||||
{
|
||||
for (var i = 0; i < dt.Rows.Count; i++)
|
||||
{
|
||||
try
|
||||
{
|
||||
var row = dt.Rows[i];
|
||||
var uid = Guid.Parse(row["process_guid"].ToString());
|
||||
var recipeName = row["recipe_name"].ToString();
|
||||
var waferUid = row["wafer_guid"].ToString();
|
||||
var beginTime = DateTime.Parse(row["process_begin_time"].ToString());
|
||||
var endTime = DateTime.Parse(row["process_end_time"].ToString());
|
||||
var h2 = double.Parse(row["h2"].ToString());
|
||||
var ar = double.Parse(row["ar"].ToString());
|
||||
var pn2 = double.Parse(row["pn2"].ToString());
|
||||
var hcl = double.Parse(row["hcl"].ToString());
|
||||
var sih4 = double.Parse(row["sih4"].ToString());
|
||||
var cxhx = double.Parse(row["c3h8"].ToString());
|
||||
var tcs = double.Parse(row["tcs"].ToString());
|
||||
var tma = double.Parse(row["tma"].ToString());
|
||||
var counter = new PmGasFlowCountInfo(i + 1, uid, recipeName, waferUid, beginTime, endTime, h2, ar, pn2,
|
||||
hcl,
|
||||
sih4, cxhx, tcs, tma);
|
||||
|
||||
GasFlowCountCollection.Enqueue(counter);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LOG.Error($"Unable to load process flow count history at row {i}, {ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LOG.Error($"Unable to load process flow count history, {ex.Message}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
protected override void Poll()
|
||||
{
|
||||
base.Poll();
|
||||
|
||||
lock (_syncObject)
|
||||
{
|
||||
if (CurrentFlowCounter != null && CurrentFlowCounter.StatisticsEnd.HasValue == false)
|
||||
{
|
||||
#if FAKE_DATA
|
||||
CurrentFlowCounter.H2.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.Ar.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.PN2.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.HCL.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.SiH4.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.CxHx.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.TCS.AddFlow(_randomFlow.NextDouble());
|
||||
CurrentFlowCounter.TMA.AddFlow(_randomFlow.NextDouble());
|
||||
#else
|
||||
|
||||
CurrentFlowCounter.H2.AddFlow(_pmProcessVm.H2Flow);
|
||||
CurrentFlowCounter.Ar.AddFlow(_pmProcessVm.ArFlow);
|
||||
CurrentFlowCounter.PN2.AddFlow(_pmProcessVm.PN2Flow);
|
||||
CurrentFlowCounter.HCL.AddFlow(_pmProcessVm.HCLFlow);
|
||||
CurrentFlowCounter.SiH4.AddFlow(_pmProcessVm.SiH4Flow);
|
||||
CurrentFlowCounter.CxHx.AddFlow(_pmProcessVm.C2H4Flow);
|
||||
CurrentFlowCounter.TCS.AddFlow(_pmProcessVm.TCSFlow);
|
||||
CurrentFlowCounter.TMA.AddFlow(_pmProcessVm.TMAFlow);
|
||||
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,36 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Navigation;
|
||||
using System.Windows.Shapes;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using MECF.Framework.UI.Client.RecipeEditorLib.RecipeModel;
|
||||
using DataGridBeginningEditEventArgs = ExtendedGrid.Microsoft.Windows.Controls.DataGridBeginningEditEventArgs;
|
||||
|
||||
namespace SicUI.Models.PMs
|
||||
{
|
||||
/// <summary>
|
||||
/// PMProcessView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class PMProcessView : UserControl
|
||||
{
|
||||
public PMProcessView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void BtnLockRecipe_OnClick(object sender, RoutedEventArgs e)
|
||||
{
|
||||
recipeLocker.Lock();
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,4 @@
|
|||
using Aitex.Core.Util;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -1,598 +0,0 @@
|
|||
<Window x:Class="SicUI.ProcessMonitorView"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="clr-namespace:SicUI"
|
||||
mc:Ignorable="d"
|
||||
Height="380" Width="600" Topmost="True" WindowStartupLocation="CenterScreen" >
|
||||
<Window.Resources>
|
||||
<Style TargetType="TextBlock" >
|
||||
<Setter Property="FontSize" Value="12" />
|
||||
<Setter Property="TextAlignment" Value="Center" />
|
||||
<Setter Property="VerticalAlignment" Value="Center" />
|
||||
<Setter Property="TextWrapping" Value="Wrap" />
|
||||
<Setter Property="Margin" Value="3"/>
|
||||
</Style>
|
||||
|
||||
<Style TargetType="Border">
|
||||
<Setter Property="Background" Value="{DynamicResource Table_BG_Title}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource Table_BD}"/>
|
||||
<Setter Property="SnapsToDevicePixels" Value="True"/>
|
||||
</Style>
|
||||
|
||||
<Style x:Key="InfBorder" TargetType="Border">
|
||||
<Setter Property="Background" Value="{DynamicResource Table_BG_Content}" />
|
||||
<Setter Property="BorderBrush" Value="{DynamicResource Table_BD}"/>
|
||||
<Setter Property="SnapsToDevicePixels" Value="True"/>
|
||||
</Style>
|
||||
</Window.Resources>
|
||||
<Viewbox Stretch="Fill"
|
||||
Margin="2">
|
||||
<Grid>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="85" />
|
||||
<RowDefinition Height="25" />
|
||||
<RowDefinition Height="25" />
|
||||
<RowDefinition Height="25" />
|
||||
<RowDefinition Height="5" />
|
||||
<RowDefinition Height="25" />
|
||||
<RowDefinition Height="25" />
|
||||
<RowDefinition Height="25" />
|
||||
<RowDefinition Height="25" />
|
||||
<RowDefinition Height="5" />
|
||||
<RowDefinition Height="25" />
|
||||
<RowDefinition Height="25" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="100" />
|
||||
<ColumnDefinition Width="90" />
|
||||
<ColumnDefinition Width="90" />
|
||||
<ColumnDefinition Width="100" />
|
||||
<ColumnDefinition Width="90" />
|
||||
<ColumnDefinition Width="90" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Grid Grid.ColumnSpan="6">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="30" />
|
||||
<RowDefinition Height="25" />
|
||||
<RowDefinition Height="25" />
|
||||
<RowDefinition Height="5" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="100" />
|
||||
<ColumnDefinition />
|
||||
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<Border
|
||||
CornerRadius="8,8,0,0"
|
||||
Grid.ColumnSpan="2"
|
||||
Background="#FF243664" >
|
||||
<TextBlock
|
||||
Text="Process Monitor" FontSize="13" Foreground="White" HorizontalAlignment="Center" Padding="8,0,0,0"/>
|
||||
</Border >
|
||||
|
||||
|
||||
|
||||
<Border
|
||||
Grid.Row="1"
|
||||
Padding="5,1,0,1"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock Text="PM1 Recipe" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="1"
|
||||
Grid.Column="1"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.RecipeName}" HorizontalAlignment="Left" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="2"
|
||||
Padding="5,1,0,1"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock Text="PM2 Recipe" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="2"
|
||||
Grid.Column="1"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.RecipeName}" HorizontalAlignment="Left"/>
|
||||
</Border>
|
||||
|
||||
|
||||
<!--<Border
|
||||
Grid.Column="1"
|
||||
CornerRadius="0,10,0,0"
|
||||
Background="#FF243664"
|
||||
Style="{StaticResource InfBorder}">
|
||||
<TextBlock
|
||||
Text="{Binding Pm1Monitor.RecipeName}" FontSize="14" Foreground="White" HorizontalAlignment="Left" Padding="8,0,0,0"/>
|
||||
</Border>-->
|
||||
<!--<Border
|
||||
Grid.Row="1"
|
||||
Grid.Column="2"
|
||||
Grid.ColumnSpan="5"
|
||||
Background="#FF243664"
|
||||
Style="{StaticResource InfBorder}">
|
||||
<TextBlock
|
||||
Text="{Binding Pm2Monitor.RecipeName}" FontSize="14" Foreground="White" HorizontalAlignment="Left" Padding="8,0,0,0"/>
|
||||
</Border>-->
|
||||
|
||||
</Grid>
|
||||
|
||||
<Border
|
||||
Grid.Row="1"
|
||||
Padding="5,1,0,1"
|
||||
BorderThickness="1,1,1,1">
|
||||
<TextBlock Text="Mode Name"/>
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="1"
|
||||
Grid.Column="1"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,1,1,1">
|
||||
<TextBlock Text="PM1" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="1"
|
||||
Grid.Column="2"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,1,1,1">
|
||||
<TextBlock Text="PM2" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="2"
|
||||
Padding="5,1,0,1"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock Text="Step No."/>
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="2"
|
||||
Grid.Column="1"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.StepNumber}" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="2"
|
||||
Grid.Column="2"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.StepNumber}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="1"
|
||||
Grid.Column="3"
|
||||
Padding="5,1,0,1"
|
||||
BorderThickness="0,1,1,1">
|
||||
<TextBlock Text="Mode Name"/>
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="1"
|
||||
Grid.Column="4"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,1,1,1">
|
||||
<TextBlock Text="PM1" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="1"
|
||||
Grid.Column="5"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,1,1,1">
|
||||
<TextBlock Text="PM2" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="2"
|
||||
Grid.Column="3"
|
||||
Padding="5,1,0,1"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="Step Name"/>
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="2"
|
||||
Grid.Column="4"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.StepName}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="2"
|
||||
Grid.Column="5"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.StepName}" />
|
||||
</Border>
|
||||
|
||||
|
||||
<Border
|
||||
Grid.Row="3"
|
||||
Padding="5,1,0,1"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock Text="Step Time"/>
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="3"
|
||||
Grid.Column="1"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.StepTime}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="3"
|
||||
Grid.Column="2"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.StepTime}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="3"
|
||||
Grid.Column="3"
|
||||
Padding="5,1,0,1"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="Recipe Time" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="3"
|
||||
Grid.Column="4"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.RecipeTime}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="3"
|
||||
Grid.Column="5"
|
||||
Padding="5,1,0,1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.RecipeTime}" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="4"
|
||||
Grid.ColumnSpan="6"
|
||||
Background="{DynamicResource Table_BG_Content}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="1,0,1,1"
|
||||
SnapsToDevicePixels="True" />
|
||||
|
||||
<!-- PSU/SCR Mode -->
|
||||
<Border
|
||||
Grid.Row="5"
|
||||
Grid.Column="0"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock Text="PSU Mode"/>
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="5"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1"
|
||||
SnapsToDevicePixels="True">
|
||||
<TextBlock Text="{Binding Pm1Monitor.PsuMode}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="5"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1"
|
||||
SnapsToDevicePixels="True">
|
||||
<TextBlock Text="{Binding Pm2Monitor.PsuMode}" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="5"
|
||||
Grid.Column="3"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="SCR Mode" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="5"
|
||||
Grid.Column="4"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.ScrMode}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="5"
|
||||
Grid.Column="5"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.ScrMode}" />
|
||||
</Border>
|
||||
<!-- 底部三区功率 -->
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Grid.Column="0"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock Text="Power Inner" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.PSU1Power}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.PSU1Power}" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Grid.Column="3"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="Power Upper" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Grid.Column="4"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.SCR1Power}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Grid.Column="5"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.SCR1Power}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="7"
|
||||
Grid.Column="0"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock Text="Power Middle" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="7"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.PSU2Power}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="7"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.PSU2Power}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="7"
|
||||
Grid.Column="3"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="Power Middle" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="7"
|
||||
Grid.Column="4"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.SCR2Power}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="7"
|
||||
Grid.Column="5"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.SCR2Power}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="8"
|
||||
Grid.Column="0"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock Text="Power Outer" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="8"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.PSU3Power}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="8"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.PSU3Power}" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="8"
|
||||
Grid.Column="3"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="Power Lower" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="8"
|
||||
Grid.Column="4"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.SCR3Power}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="8"
|
||||
Grid.Column="5"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.SCR3Power}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="9"
|
||||
Grid.ColumnSpan="6"
|
||||
Background="{DynamicResource Table_BG_Content}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="1,0,1,1"/>
|
||||
|
||||
|
||||
<!-- SCR功率 -->
|
||||
|
||||
|
||||
<!-- 底部三区温度 -->
|
||||
|
||||
<!--<Border
|
||||
Grid.Row="10"
|
||||
Grid.Column="0"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock Text="Pyro Lower" />
|
||||
</Border>-->
|
||||
<!--<Border
|
||||
Grid.Row="10"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.SCRL3InputTemp}" />
|
||||
</Border>-->
|
||||
<!--<Border
|
||||
Grid.Row="10"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.SCRL3InputTemp}" />
|
||||
</Border>-->
|
||||
<Border
|
||||
Grid.Row="10"
|
||||
Grid.Column="3"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="Pressure" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="10"
|
||||
Grid.Column="4"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.ChamberPressureFeedback}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="10"
|
||||
Grid.Column="5"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.ChamberPressureFeedback}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="10"
|
||||
Grid.Column="0"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock Text="Pyro Middle"/>
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="10"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.L2InputTemp}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="10"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.L2InputTemp}" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="11"
|
||||
Grid.Column="3"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
FontSize="11"
|
||||
Foreground="{DynamicResource FG_Black}"
|
||||
Text="Rotate Speed "
|
||||
TextWrapping="Wrap" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="11"
|
||||
Grid.Column="4"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.ActualSpeedFeedback}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="11"
|
||||
Grid.Column="5"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.ActualSpeedFeedback}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="11"
|
||||
Grid.Column="0"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock Text="Pyro Outer"/>
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="11"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm1Monitor.L3InputTemp}" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="11"
|
||||
Grid.Column="2"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock Text="{Binding Pm2Monitor.L3InputTemp}" />
|
||||
</Border>
|
||||
|
||||
<!--<Border
|
||||
Grid.Row="12"
|
||||
Grid.Column="3"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
FontSize="11"
|
||||
Foreground="{DynamicResource FG_Black}"
|
||||
Text=""
|
||||
TextWrapping="Wrap" />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="12"
|
||||
Grid.Column="4"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock />
|
||||
</Border>
|
||||
<Border
|
||||
Grid.Row="12"
|
||||
Grid.Column="5"
|
||||
Style="{StaticResource InfBorder}"
|
||||
BorderThickness="0,0,1,1">
|
||||
<TextBlock />
|
||||
</Border>-->
|
||||
<!-- 腔体压力 转速 -->
|
||||
|
||||
|
||||
|
||||
</Grid>
|
||||
</Viewbox>
|
||||
</Window>
|
|
@ -1,27 +0,0 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Data;
|
||||
using System.Windows.Documents;
|
||||
using System.Windows.Input;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using System.Windows.Shapes;
|
||||
|
||||
namespace SicUI
|
||||
{
|
||||
/// <summary>
|
||||
/// Window2.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class ProcessMonitorView : Window
|
||||
{
|
||||
public ProcessMonitorView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,213 +0,0 @@
|
|||
using Aitex.Core.Util;
|
||||
using Aitex.Core.Common.DeviceData;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System;
|
||||
using Aitex.Core.RT.Device.PmDevices;
|
||||
using SicUI.Models;
|
||||
|
||||
namespace SicUI
|
||||
{
|
||||
public class ProcessMonitorViewModel : SicModuleUIViewModelBase
|
||||
{
|
||||
|
||||
public ProcessMonitorViewModel()
|
||||
{
|
||||
Pm1Monitor = new MonitorModel() { SystemName = "PM1" };
|
||||
Pm2Monitor = new MonitorModel() { SystemName = "PM2" };
|
||||
|
||||
|
||||
}
|
||||
|
||||
public MonitorModel Pm1Monitor { get; set; }
|
||||
public MonitorModel Pm2Monitor { get; }
|
||||
|
||||
|
||||
protected override void OnInitialize()
|
||||
{
|
||||
base.OnInitialize();
|
||||
|
||||
Pm1Monitor.SubscribeKeys();
|
||||
Pm2Monitor.SubscribeKeys();
|
||||
}
|
||||
|
||||
protected override void OnActivate()
|
||||
{
|
||||
base.OnActivate();
|
||||
|
||||
Pm1Monitor.EnableTimer(true);
|
||||
Pm2Monitor.EnableTimer(true);
|
||||
}
|
||||
|
||||
protected override void OnDeactivate(bool close)
|
||||
{
|
||||
base.OnDeactivate(close);
|
||||
|
||||
Pm1Monitor.EnableTimer(false);
|
||||
Pm2Monitor.EnableTimer(false);
|
||||
}
|
||||
}
|
||||
public class MonitorModel : SicModuleUIViewModelBase, ISupportMultipleSystem
|
||||
{
|
||||
public string TargetModule { get; set; }
|
||||
|
||||
|
||||
[Subscription("SelectedRecipeName")]
|
||||
public string RecipeName { get; set; }
|
||||
|
||||
[Subscription("RecipeStepNumber")]
|
||||
public int RecipeStepNumber { get; set; }
|
||||
|
||||
[Subscription("RecipeStepName")]
|
||||
public string RecipeStepName { get; set; }
|
||||
|
||||
[Subscription("RecipeStepElapseTime")]
|
||||
public int RecipeStepElapseTime { get; set; }
|
||||
|
||||
[Subscription("RecipeStepTime")]
|
||||
public int RecipeStepTime { get; set; }
|
||||
|
||||
[Subscription("RecipeTotalElapseTime")]
|
||||
public int RecipeTotalElapseTime { get; set; }
|
||||
|
||||
[Subscription("RecipeTotalTime")]
|
||||
public int RecipeTotalTime { get; set; }
|
||||
|
||||
[Subscription("TC1.HeaterModeSetPoint")]
|
||||
public float TC1HeaterMode { get; set; }
|
||||
|
||||
[Subscription("TC2.HeaterModeSetPoint")]
|
||||
public float TC2HeaterMode { get; set; }
|
||||
|
||||
[Subscription("SCR1.PowerFeedBack")]
|
||||
public float SCR1Power { get; set; }
|
||||
|
||||
[Subscription("SCR2.PowerFeedBack")]
|
||||
public float SCR2Power { get; set; }
|
||||
|
||||
[Subscription("SCR3.PowerFeedBack")]
|
||||
public float SCR3Power { get; set; }
|
||||
|
||||
[Subscription("PSU1.OutputPowerFeedBack")]
|
||||
public float PSU1Power { get; set; }
|
||||
|
||||
[Subscription("PSU2.OutputPowerFeedBack")]
|
||||
public float PSU2Power { get; set; }
|
||||
|
||||
[Subscription("PSU3.OutputPowerFeedBack")]
|
||||
public float PSU3Power { get; set; }
|
||||
|
||||
[Subscription("TC1.L2InputTempSetPoint")]
|
||||
public float L2InputTemp { get; set; }
|
||||
|
||||
[Subscription("TC1.L3InputTempSetPoint")]
|
||||
public float L3InputTemp { get; set; }
|
||||
|
||||
[Subscription("TC2.L3InputTempSetPoint")]
|
||||
public float SCRL3InputTemp { get; set; }
|
||||
|
||||
[Subscription("PMServo.ActualSpeedFeedback")]
|
||||
public float ActualSpeedFeedback { get; set; }
|
||||
|
||||
[Subscription("PT1.DeviceData")]
|
||||
public AITPressureMeterData ChamPress { get; set; }
|
||||
|
||||
[Subscription("TC1.TempCtrlTCIN")]
|
||||
public float PM1Temprature { get; set; }
|
||||
|
||||
[Subscription("Status")]
|
||||
public string Status { get; set; }
|
||||
|
||||
public bool IsPMProcess => Status == "Process" || Status == "PostProcess" || Status == "Paused" ||
|
||||
Status == "PMMacroPause" || Status == "PMMacro" || Status == "PostPMMacro";
|
||||
|
||||
public bool IsPreProcess => Status == "PreProcess" || Status == "PrePMMacro";
|
||||
|
||||
public string StepNumber
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IsPMProcess)
|
||||
{
|
||||
return $"{RecipeStepNumber}";
|
||||
}
|
||||
else if (IsPreProcess)
|
||||
{
|
||||
return "0";
|
||||
}
|
||||
return "--";
|
||||
|
||||
}
|
||||
set
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public string StepName
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IsPMProcess)
|
||||
{
|
||||
return $"{RecipeStepName}";
|
||||
}
|
||||
else if (IsPreProcess)
|
||||
{
|
||||
return "0";
|
||||
}
|
||||
return "--";
|
||||
}
|
||||
}
|
||||
|
||||
public string StepTime
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IsPMProcess)
|
||||
{
|
||||
return $"{RecipeStepElapseTime}/{RecipeStepTime}";
|
||||
}
|
||||
else if (IsPreProcess)
|
||||
{
|
||||
return "0";
|
||||
}
|
||||
return "--";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public string RecipeTime
|
||||
{
|
||||
get
|
||||
{
|
||||
if (IsPMProcess)
|
||||
{
|
||||
return $"{RecipeTotalElapseTime}/{RecipeTotalTime}";
|
||||
}
|
||||
else if (IsPreProcess)
|
||||
{
|
||||
return "0";
|
||||
}
|
||||
return "--";
|
||||
}
|
||||
}
|
||||
|
||||
public string PsuMode
|
||||
{
|
||||
get
|
||||
{
|
||||
return Enum.GetName(typeof(DicMode.HeaterControlMode),Convert.ToInt32( TC1HeaterMode));
|
||||
}
|
||||
}
|
||||
|
||||
public string ScrMode
|
||||
{
|
||||
get
|
||||
{
|
||||
return Enum.GetName(typeof(DicMode.HeaterControlMode), Convert.ToInt32(TC2HeaterMode));
|
||||
}
|
||||
}
|
||||
|
||||
public string ChamberPressureFeedback => ChamPress?.FeedBack.ToString(ChamPress?.FormatString);
|
||||
}
|
||||
}
|
|
@ -212,6 +212,7 @@
|
|||
<Compile Include="Controls\WaferAssociationUnitLite.xaml.cs">
|
||||
<DependentUpon>WaferAssociationUnitLite.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="GlobalUsings.cs" />
|
||||
<Compile Include="Models\Maintenances\RuntimeView.xaml.cs">
|
||||
<DependentUpon>RuntimeView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
|
@ -341,8 +342,6 @@
|
|||
</Compile>
|
||||
<Compile Include="Bootstrapper.cs" />
|
||||
<Compile Include="MainViewModel.cs" />
|
||||
<Compile Include="Models\PMs\PMProcessGasFlowCounterViewModel.cs" />
|
||||
<Compile Include="ProcessMonitorViewModel.cs" />
|
||||
<Compile Include="RtIpAddressInput.xaml.cs">
|
||||
<DependentUpon>RtIpAddressInput.xaml</DependentUpon>
|
||||
</Compile>
|
||||
|
@ -351,9 +350,6 @@
|
|||
<DependentUpon>Splash.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="StartupArguments.cs" />
|
||||
<Compile Include="ProcessMonitorView.xaml.cs">
|
||||
<DependentUpon>ProcessMonitorView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="TimeredMainViewModel.cs" />
|
||||
<Page Include="Controls\AITPump.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
|
@ -567,10 +563,6 @@
|
|||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Models\PMs\PMProcessView.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Models\PMs\PMServoView.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
|
@ -583,20 +575,12 @@
|
|||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="ProcessMonitorView.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Models\PMs\PMOperationView.xaml.cs">
|
||||
<DependentUpon>PMOperationView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Models\PMs\PMOperationViewModel.cs" />
|
||||
<Compile Include="Models\PMs\PMProcessView.xaml.cs">
|
||||
<DependentUpon>PMProcessView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Models\PMs\PMProcessViewModel.cs" />
|
||||
<Compile Include="Models\PMs\PMServoView.xaml.cs">
|
||||
<DependentUpon>PMServoView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using Aitex.Core.Util;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
|
|
Loading…
Reference in New Issue