Merge branch 'develop' into 添加MFC+气阀测试功能
# Conflicts: # ThirdParty/MECF.Framework/MECF.Framework.Common.dll # ThirdParty/MECF.Framework/MECF.Framework.RT.Core.dll # ThirdParty/MECF.Framework/MECF.Framework.RT.EquipmentLibrary.dll # ThirdParty/MECF.Framework/MECF.Framework.Simulator.Core.dll # ThirdParty/MECF.Framework/MECF.Framework.UI.Client.dll # ThirdParty/MECF.Framework/MECF.Framework.UI.Core.dll
This commit is contained in:
commit
1cc7d450e3
|
@ -301,14 +301,6 @@
|
|||
<IoPump id="Pump" module="" display="Pump" schematicId="Pump" unit="" aioType="" diDryPumpAlarm="DI_DryPumpAlarm" diPumpExhaustPress="DI_PumpExhaustPressSW" diDryPumpFlow="DI_DryPumpFlowSW" diDryPump1Running="DI_DryPump1Running" diDryPump1Warning="DI_DryPump1Warning" />
|
||||
</IoPumps>
|
||||
<IoPTOffsetAndKs classType="Aitex.Core.RT.Device.Devices.IoPTOffsetAndK" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<!--<IoPTOffsetAndK id="PT1OffsetAndK" module="" display="PT1" schematicId="" unit="" aioType="float" aoOffset="AO_PT1_Offset" aoK="AO_PT1_K" />
|
||||
<IoPTOffsetAndK id="PT2OffsetAndK" module="" display="PT2" schematicId="" unit="" aioType="float" aoOffset="AO_PT2_Offset" aoK="AO_PT2_K" />
|
||||
<IoPTOffsetAndK id="PT3OffsetAndK" module="" display="PT3" schematicId="" unit="" aioType="float" aoOffset="AO_PT3_Offset" aoK="AO_PT3_K" />
|
||||
<IoPTOffsetAndK id="PT4OffsetAndK" module="" display="PT4" schematicId="" unit="" aioType="float" aoOffset="AO_PT4_Offset" aoK="AO_PT4_K" />
|
||||
<IoPTOffsetAndK id="PT9OffsetAndK" module="" display="PT9" schematicId="" unit="" aioType="float" aoOffset="AO_PT9_Offset" aoK="AO_PT9_K" />
|
||||
<IoPTOffsetAndK id="PT10OffsetAndK" module="" display="PT10" schematicId="" unit="" aioType="float" aoOffset="AO_PT10_Offset" aoK="AO_PT10_K" />-->
|
||||
|
||||
|
||||
<IoPTOffsetAndK id="PT1_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT1_Offset" />
|
||||
<IoPTOffsetAndK id="PT1_K" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT1_K" />
|
||||
<IoPTOffsetAndK id="PT2_Offset" module="" display="PT" schematicId="" unit="" aioType="float" aoOffset="AO_PT2_Offset" />
|
||||
|
|
|
@ -37,7 +37,9 @@
|
|||
<Catalog DisplayName="StepInfo">
|
||||
<Group DisplayName="Temperature -> Control Mode">
|
||||
<Step ModuleName="" DeviceType="" InputType="ReadOnlySelection" DisplayName="8. PSU Control Mode" UnitName="" ControlName="TC1.SetHeaterMode" Description="">
|
||||
<Item DisplayName="Power" ControlName="Power" />
|
||||
<Item DisplayName="PyroAuto" ControlName="PyroAuto" />
|
||||
<Item DisplayName="PyroFollow" ControlName="PyroFollow" />
|
||||
<Item DisplayName="Power" ControlName="Power" />
|
||||
<Item DisplayName="Pyro" ControlName="Pyro" />
|
||||
</Step>
|
||||
<Step ModuleName="" DeviceType="" InputType="ReadOnlySelection" DisplayName="9. PSU Set Mode" UnitName="" ControlName="SusHeaterSetMode" Description="">
|
||||
|
|
|
@ -863,6 +863,7 @@ namespace SicModules.PMs
|
|||
|
||||
private bool FsmEnterError(object[] param)
|
||||
{
|
||||
AbortRoutine();
|
||||
InvokeOnEnterError(Module);
|
||||
if (IsOnline)
|
||||
{
|
||||
|
@ -1401,7 +1402,7 @@ namespace SicModules.PMs
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
StopRamp();
|
||||
_pmInterLock.SetPMProcessRunning(false, out string reason);
|
||||
_pmInterLock.SetPMPreProcessRunning(false, out reason);
|
||||
|
|
|
@ -43,6 +43,7 @@ namespace SicModules.PMs.Routines
|
|||
TimeDelay7,
|
||||
TimeDelay8,
|
||||
TimeDelay9,
|
||||
TimeDelay10,
|
||||
|
||||
SetEPV2_1,
|
||||
SetEPV2_2,
|
||||
|
@ -63,6 +64,7 @@ namespace SicModules.PMs.Routines
|
|||
PreSetMfcFlow,
|
||||
SetMfcFlow_1,
|
||||
SetMfcFlow_2,
|
||||
SetMfcFlow_3,
|
||||
PostSetMfcFlow,
|
||||
|
||||
SetPressure1,
|
||||
|
@ -253,6 +255,19 @@ namespace SicModules.PMs.Routines
|
|||
{
|
||||
try
|
||||
{
|
||||
//检查是否退出
|
||||
if(_pmModule.GetChamberPressure() >980)
|
||||
{
|
||||
//设置对应的MFC流量为0
|
||||
SetMfcFlow((int)RoutineStep.SetMfcFlow_3, _mfcData.Name, 0, 3);
|
||||
|
||||
TimeDelay((int)RoutineStep.TimeDelay10, 3);
|
||||
|
||||
EV.PostWarningLog(Module, "Chamber Pressure above 980mbar,Mfc Ror Routine Abort!");
|
||||
|
||||
throw (new RoutineFaildException());
|
||||
}
|
||||
|
||||
//CheckRoutineTimeOut();
|
||||
if (_flag1)
|
||||
{
|
||||
|
@ -577,7 +592,7 @@ namespace SicModules.PMs.Routines
|
|||
}
|
||||
else if (value == "Default")
|
||||
{
|
||||
pc.Ramp(pc.DefaultValue, 3);
|
||||
pc.Ramp(pc.DefaultValue, 3000);
|
||||
|
||||
EV.PostInfoLog(Module, $"{pcName} Set {value} Succeed");
|
||||
|
||||
|
@ -620,7 +635,7 @@ namespace SicModules.PMs.Routines
|
|||
}
|
||||
else if (value == "Default")
|
||||
{
|
||||
mfc.SetToDefaultByRamp(3);
|
||||
mfc.SetToDefaultByRamp(3000);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -628,7 +643,7 @@ namespace SicModules.PMs.Routines
|
|||
{
|
||||
if(double.TryParse(value,out double dValue))
|
||||
{
|
||||
mfc.Ramp(dValue,3,out reason);
|
||||
mfc.Ramp(dValue,3000,out reason);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -722,7 +737,7 @@ namespace SicModules.PMs.Routines
|
|||
_mfcData.Volume = Math.Round(_mfcData.Volume, 2);
|
||||
|
||||
//大于3%的MFC为超标
|
||||
_mfcData.IsOverStandard = Math.Abs(_mfcData.Deviation) - 3 > 0;
|
||||
_mfcData.IsOverStandard = Math.Abs(_mfcData.Deviation) > 3;
|
||||
|
||||
_endTime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
|
||||
|
||||
|
|
|
@ -425,13 +425,14 @@ begin
|
|||
|
||||
CREATE TABLE tray_thickness_main
|
||||
(
|
||||
"tray_guid" text NOT NULL,
|
||||
"tray_number" text NOT NULL,
|
||||
"tray_label" text,
|
||||
"pm_number" text,
|
||||
"tray_coating_thickness" real,
|
||||
"tray_max_thickness"real,
|
||||
"last_date" date,
|
||||
"last_time" time,
|
||||
CONSTRAINT "tray_thickness_main_pkey" PRIMARY KEY ("tray_number" )
|
||||
"tray_max_thickness" real,
|
||||
"create_time" timestamp,
|
||||
CONSTRAINT "tray_thickness_main_pkey" PRIMARY KEY ("tray_guid" )
|
||||
)
|
||||
WITH (
|
||||
OIDS=FALSE
|
||||
|
@ -449,13 +450,12 @@ begin
|
|||
|
||||
CREATE TABLE tray_thickness_data
|
||||
(
|
||||
"wafer_guid" text NOT NULL,
|
||||
"tray_guid" text NOT NULL,
|
||||
"tray_number" text ,
|
||||
"tray_inner_number" text,
|
||||
"ring_inner_number" text,
|
||||
"ring_outer_number" text,
|
||||
|
||||
CONSTRAINT "tray_thickness_data_pkey" PRIMARY KEY ("wafer_guid" )
|
||||
CONSTRAINT "tray_thickness_data_pkey" PRIMARY KEY ("tray_guid" )
|
||||
)
|
||||
WITH (
|
||||
OIDS=FALSE
|
||||
|
@ -465,7 +465,55 @@ begin
|
|||
GRANT SELECT ON TABLE tray_thickness_data TO postgres;
|
||||
end if;
|
||||
------------------------------------------------------------------------------------------------
|
||||
--
|
||||
if not exists(select * from information_schema.tables
|
||||
where
|
||||
table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA
|
||||
and table_name = 'pm_thickness_data') then
|
||||
|
||||
CREATE TABLE pm_thickness_data
|
||||
(
|
||||
|
||||
"pm_guid" text NOT NULL,
|
||||
"pm_minor_cycle" text ,
|
||||
"pm_major_cycle" text,
|
||||
|
||||
CONSTRAINT "pm_thickness_data_pkey" PRIMARY KEY ("pm_guid" )
|
||||
)
|
||||
WITH (
|
||||
OIDS=FALSE
|
||||
);
|
||||
ALTER TABLE pm_thickness_data
|
||||
OWNER TO postgres;
|
||||
GRANT SELECT ON TABLE pm_thickness_data TO postgres;
|
||||
end if;
|
||||
------------------------------------------------------------------------------------------------
|
||||
--
|
||||
if not exists(select * from information_schema.tables
|
||||
where
|
||||
table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA
|
||||
and table_name = 'pm_thickness_main') then
|
||||
|
||||
CREATE TABLE pm_thickness_main
|
||||
(
|
||||
"pm_guid" text NOT NULL,
|
||||
"pm_cycle" text NOT NULL,
|
||||
"pm_label" text,
|
||||
"pm_number" text,
|
||||
"pm_coating_thickness" real,
|
||||
"pm_max_thickness" real,
|
||||
"create_time" timestamp,
|
||||
CONSTRAINT "pm_thickness_main_pkey" PRIMARY KEY ("pm_guid" )
|
||||
)
|
||||
WITH (
|
||||
OIDS=FALSE
|
||||
);
|
||||
ALTER TABLE "pm_thickness_main"
|
||||
OWNER TO postgres;
|
||||
GRANT SELECT ON TABLE "pm_thickness_main" TO postgres;
|
||||
end if;
|
||||
------------------------------------------------------------------------------------------------
|
||||
--
|
||||
if not exists(select * from information_schema.tables
|
||||
where
|
||||
table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA
|
||||
|
|
|
@ -4,22 +4,14 @@ using System.IO;
|
|||
using System.Linq;
|
||||
using System.Windows.Media.Imaging;
|
||||
using Aitex.Core.Common;
|
||||
using Aitex.Core.RT.DataCenter;
|
||||
using Aitex.Core.RT.Device;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.Log;
|
||||
using Aitex.Core.RT.OperationCenter;
|
||||
using Aitex.Core.RT.RecipeCenter;
|
||||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.DBCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Jobs;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using SicRT.Equipments.Schedulers;
|
||||
using SicRT.Modules.Schedulers;
|
||||
using SicRT.Scheduler;
|
||||
|
|
|
@ -6,7 +6,6 @@ using System.Linq;
|
|||
using System.Text;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using Aitex.Core.RT.Event;
|
||||
using MECF.Framework.RT.Core.IoProviders.Siemens.Transfer;
|
||||
using MECF.Framework.RT.Core.IoProviders.Siemens.Net;
|
||||
|
||||
|
|
|
@ -1,11 +1,8 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using Aitex.Core.RT.Device;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
using Aitex.Core.Util;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using SicModules.Aligners;
|
||||
using SicModules.Buffers;
|
||||
using SicModules.Cassettes;
|
||||
|
|
|
@ -1,13 +1,9 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using SicModules.Aligners.Routines;
|
||||
using SicRT.Modules.Schedulers;
|
||||
|
||||
|
|
|
@ -1,14 +1,11 @@
|
|||
using System.Collections.Generic;
|
||||
using Aitex.Core.Common;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
using Aitex.Sorter.Common;
|
||||
using SicRT.Modules.Schedulers;
|
||||
using SicRT.Scheduler;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Buffers;
|
||||
|
||||
namespace SicRT.Modules
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
using Aitex.Core.RT.Fsm;
|
||||
using Aitex.Core.Util;
|
||||
using SicRT.Scheduler;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using SicRT.Equipments;
|
||||
using SicRT.Equipments.Systems;
|
||||
using Aitex.Core.RT.Device;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
using Aitex.Core.RT.Fsm;
|
||||
using Aitex.Core.Util;
|
||||
using SicRT.Scheduler;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using SicRT.Equipments;
|
||||
using SicRT.Equipments.Systems;
|
||||
using Aitex.Core.RT.Device;
|
||||
|
|
|
@ -1,8 +1,4 @@
|
|||
using System.Linq;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.Util;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using SicModules.Cassettes;
|
||||
using SicModules.PMs;
|
||||
using SicRT.Equipments.Systems;
|
||||
|
|
|
@ -5,9 +5,7 @@ using System.Text;
|
|||
using System.Threading.Tasks;
|
||||
using Aitex.Core.Common;
|
||||
using MECF.Framework.Common.DBCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Jobs;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
|
||||
namespace SicRT.Equipments.Schedulers
|
||||
{
|
||||
|
|
|
@ -6,11 +6,8 @@ using System.Threading.Tasks;
|
|||
using Aitex.Core.Common;
|
||||
using Aitex.Core.RT.Device;
|
||||
using Aitex.Core.RT.Fsm;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadLocks;
|
||||
using SicRT.Equipments;
|
||||
using SicRT.Equipments.Systems;
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
using System.Collections.Generic;
|
||||
using Aitex.Core.Common;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.Util;
|
||||
using DocumentFormat.OpenXml.Wordprocessing;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
|
||||
namespace SicRT.Modules.Schedulers
|
||||
{
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using SicRT.Scheduler;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using System.Collections.Generic;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
|
||||
|
|
|
@ -1,12 +1,9 @@
|
|||
using Aitex.Core.Common;
|
||||
using Aitex.Core.RT.Fsm;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
using Aitex.Core.Util;
|
||||
using SicRT.Modules;
|
||||
using SicRT.Modules.Schedulers;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using SicRT.Equipments;
|
||||
using SicRT.Equipments.Systems;
|
||||
using Aitex.Core.RT.Device;
|
||||
|
|
|
@ -3,12 +3,9 @@ using System.Collections.Generic;
|
|||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using SicRT.Modules;
|
||||
using SicRT.Modules.Schedulers;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using SicRT.Equipments.Systems;
|
||||
using Aitex.Core.RT.Fsm;
|
||||
using SicModules.TMs;
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using Aitex.Sorter.Common;
|
||||
using SicRT.Modules.Schedulers;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using SicModules.EFEMs;
|
||||
using SicRT.Equipments.Systems;
|
||||
|
||||
|
|
|
@ -2,15 +2,11 @@
|
|||
using Aitex.Core.Common;
|
||||
using Aitex.Core.RT.Device;
|
||||
using Aitex.Core.RT.Fsm;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using SicRT.Equipments.Systems;
|
||||
using SicRT.Modules.Schedulers;
|
||||
using System.Diagnostics;
|
||||
using Aitex.Core.RT.Event;
|
||||
using SicModules.LLs;
|
||||
using SicModules.UnLoads;
|
||||
|
||||
|
|
|
@ -1,8 +1,5 @@
|
|||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
using Aitex.Sorter.Common;
|
||||
using SicRT.Modules.Schedulers;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using SicModules.EFEMs;
|
||||
using SicRT.Equipments.Systems;
|
||||
|
||||
|
|
|
@ -1,18 +1,11 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Aitex.Core.Common;
|
||||
using Aitex.Core.RT.DataCenter;
|
||||
using Aitex.Core.RT.Device;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.Fsm;
|
||||
using Aitex.Core.RT.OperationCenter;
|
||||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Core.Utilities;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.Fsm;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.Core.IoProviders;
|
||||
using SicRT.Instances;
|
||||
using SicRT.Modules;
|
||||
using System.Linq;
|
||||
|
@ -30,9 +23,7 @@ using SicModules.LLs;
|
|||
using SicModules.PMs;
|
||||
using SicModules.TMs;
|
||||
using SicModules.UnLoads;
|
||||
using Aitex.Core.RT.DBCore;
|
||||
using System.Diagnostics;
|
||||
using Aitex.Core.RT.Log;
|
||||
using MECF.Framework.RT.EquipmentLibrary.Devices;
|
||||
|
||||
namespace SicRT.Equipments.Systems
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
// Global using directives
|
||||
|
||||
global using Aitex.Common.Util;
|
||||
global using Aitex.Core.RT.ConfigCenter;
|
||||
global using Aitex.Core.RT.DataCenter;
|
||||
global using Aitex.Core.RT.DataCollection;
|
||||
global using Aitex.Core.RT.DBCore;
|
||||
global using Aitex.Core.RT.Event;
|
||||
global using Aitex.Core.RT.Log;
|
||||
global using Aitex.Core.RT.OperationCenter;
|
||||
global using Aitex.Core.RT.RecipeCenter;
|
||||
global using Aitex.Core.Util;
|
||||
global using Aitex.Core.WCF;
|
||||
global using MECF.Framework.Common.Account;
|
||||
global using MECF.Framework.Common.Communications;
|
||||
global using MECF.Framework.Common.Equipment;
|
||||
global using MECF.Framework.Common.IOCore;
|
||||
global using MECF.Framework.Common.SCCore;
|
||||
global using MECF.Framework.Common.SubstrateTrackings;
|
||||
global using MECF.Framework.RT.Core.Applications;
|
||||
global using MECF.Framework.RT.Core.Backend;
|
||||
global using MECF.Framework.RT.Core.IoProviders;
|
||||
global using SicModules.PMs.RecipeExecutions;
|
||||
global using SorterRT.Modules;
|
|
@ -1,6 +1,4 @@
|
|||
using System.Windows;
|
||||
using MECF.Framework.RT.Core.Applications;
|
||||
using SorterRT.Modules;
|
||||
|
||||
namespace SicRT.Instances
|
||||
{
|
||||
|
|
|
@ -3,7 +3,6 @@ using System.Reflection;
|
|||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
using SicRT.Instances;
|
||||
using MECF.Framework.RT.Core.Applications;
|
||||
|
||||
namespace SorterRT.Modules
|
||||
{
|
||||
|
|
|
@ -1,26 +1,4 @@
|
|||
using Aitex.Common.Util;
|
||||
using Aitex.Core.RT.ConfigCenter;
|
||||
using Aitex.Core.RT.DataCenter;
|
||||
using Aitex.Core.RT.DataCollection;
|
||||
using Aitex.Core.RT.DBCore;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.Log;
|
||||
using Aitex.Core.RT.OperationCenter;
|
||||
using Aitex.Core.RT.RecipeCenter;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Core.WCF;
|
||||
using MECF.Framework.Common.Account;
|
||||
using MECF.Framework.Common.Communications;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.IOCore;
|
||||
using MECF.Framework.Common.SCCore;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.Core.Applications;
|
||||
using MECF.Framework.RT.Core.Backend;
|
||||
using MECF.Framework.RT.Core.IoProviders;
|
||||
using SicModules.PMs.RecipeExecutions;
|
||||
using SorterRT.Modules;
|
||||
using SicRT.Equipments.Systems;
|
||||
using SicRT.Equipments.Systems;
|
||||
using MECF.Framework.UI.Client.TrayThickness.HistoryData;
|
||||
|
||||
namespace SicRT.Instances
|
||||
|
|
|
@ -143,6 +143,7 @@
|
|||
<Compile Include="Equipments\Schedulers\SchedulerPM.cs" />
|
||||
<Compile Include="Equipments\Schedulers\SchedulerTMRobot.cs" />
|
||||
<Compile Include="Equipments\Schedulers\SchedulerModuleFactory.cs" />
|
||||
<Compile Include="GlobalUsings.cs" />
|
||||
<Compile Include="Properties\Annotations.cs" />
|
||||
<ApplicationDefinition Include="Instances\App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
|
|
|
@ -11,8 +11,6 @@ using System.Text.RegularExpressions;
|
|||
using System.Threading;
|
||||
using System.Windows;
|
||||
using System.Xml.Linq;
|
||||
using Aitex.Core.RT.Log;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Core.WCF;
|
||||
using CommandLine;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
|
|
|
@ -43,7 +43,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,5 +1,4 @@
|
|||
using Aitex.Core.Common.DeviceData;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using System;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -6,8 +6,6 @@ using System.Text;
|
|||
using System.Windows.Controls;
|
||||
using System.Windows.Input;
|
||||
using Aitex.Core.UI.MVVM;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Core.Utilities;
|
||||
|
||||
namespace SicUI.Controls.Common
|
||||
{
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using Aitex.Core.RT.Log;
|
||||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
using Aitex.Core.Common.DeviceData;
|
||||
using Aitex.Core.RT.Log;
|
||||
using Aitex.Core.UI.Control;
|
||||
using Aitex.Core.Util;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// Global using directives
|
||||
|
||||
global using Aitex.Core.RT.Event;
|
||||
global using Aitex.Core.RT.Log;
|
||||
global using Aitex.Core.UI.View.Common;
|
||||
global using Aitex.Core.Util;
|
||||
global using Aitex.Core.Utilities;
|
||||
global using MECF.Framework.Common.OperationCenter;
|
||||
global using MECF.Framework.UI.Client;
|
|
@ -1,13 +1,9 @@
|
|||
using Aitex.Core.Account;
|
||||
using Aitex.Core.Common.DeviceData;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.Log;
|
||||
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;
|
||||
|
|
|
@ -1,216 +1,11 @@
|
|||
using System;
|
||||
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 override void SubscribeKeys()
|
||||
{
|
||||
SubscribeKeys(this);
|
||||
}
|
||||
|
||||
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 ModuleInfo CassAL
|
||||
|
|
|
@ -2,11 +2,9 @@
|
|||
using System.Collections.ObjectModel;
|
||||
using System.Data;
|
||||
using System.Windows;
|
||||
using Aitex.Core.RT.Log;
|
||||
using SicUI.Models;
|
||||
using MECF.Framework.Common.CommonData;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
|
||||
namespace SicUI.Client.Models.Platform.LeakCheck
|
||||
|
|
|
@ -1,16 +1,12 @@
|
|||
using Aitex.Core.RT.DataCenter;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
using Aitex.Core.Util;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using SicUI.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Aitex.Core.RT.Event;
|
||||
|
||||
using System.Threading;
|
||||
using Aitex.Core.Common.DeviceData;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -1,19 +1,16 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Windows;
|
||||
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;
|
||||
using OpenSEMI.ClientBase;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.DataCenter;
|
||||
using MECF.Framework.Common.DBCore;
|
||||
using System;
|
||||
|
|
|
@ -1,8 +1,6 @@
|
|||
using Aitex.Core.Util;
|
||||
using Aitex.Sorter.Common;
|
||||
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;
|
||||
|
|
|
@ -4,7 +4,6 @@ using System.Linq;
|
|||
using System.ComponentModel;
|
||||
using SciChart.Charting.Model.DataSeries;
|
||||
using SciChart.Charting.Visuals.RenderableSeries;
|
||||
using Aitex.Core.Util;
|
||||
using System.Windows.Media;
|
||||
using System.Threading.Tasks;
|
||||
using SciChart.Charting.Visuals.Annotations;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using Aitex.Core.RT.Log;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
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
|
||||
{
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
using Aitex.Core.RT.Log;
|
||||
using Aitex.Core.UI.ControlDataContext;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Core.Utilities;
|
||||
using Aitex.Core.UI.ControlDataContext;
|
||||
using Caliburn.Micro.Core;
|
||||
using MECF.Framework.Common.ControlDataContext;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using Aitex.Core.UI.View.Common;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Controls;
|
||||
using AlarmInfoUi = Aitex.Core.UI.View.Common.AlarmItem;
|
||||
|
||||
namespace SicUI.Models.PMs
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
using System.Collections.Generic;
|
||||
using Aitex.Core.Utilities;
|
||||
using Aitex.Core.UI.View.Common;
|
||||
using System.Windows.Media;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using Aitex.Core.RT.Event;
|
||||
using System.Linq;
|
||||
using AlarmInfoUi = Aitex.Core.UI.View.Common.AlarmItem;
|
||||
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
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;
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
using Aitex.Core.Util;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
@ -8,8 +6,6 @@ using System.Threading;
|
|||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Media;
|
||||
|
||||
using Aitex.Core.RT.Event;
|
||||
using Timer = System.Timers.Timer;
|
||||
|
||||
namespace SicUI.Models.PMs
|
||||
|
|
|
@ -5,14 +5,11 @@ using System.Data;
|
|||
using System.Linq;
|
||||
using System.Windows;
|
||||
using Aitex.Core.Common.DeviceData;
|
||||
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,4 @@
|
|||
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;
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="300" />
|
||||
<RowDefinition Height="180" />
|
||||
<RowDefinition Height="200" />
|
||||
<RowDefinition Height="90" />
|
||||
<RowDefinition Height="*" />
|
||||
</Grid.RowDefinitions>
|
||||
|
@ -223,6 +223,9 @@
|
|||
<Border>
|
||||
<TextBlock Text="设定流量(sccm)" />
|
||||
</Border>
|
||||
<Border>
|
||||
<TextBlock Text="压力(mbar)" />
|
||||
</Border>
|
||||
<Border>
|
||||
<TextBlock Text="设定为标准MFC" />
|
||||
</Border>
|
||||
|
@ -240,6 +243,9 @@
|
|||
<Border Style="{StaticResource InfBorder}">
|
||||
<TextBox Text="{Binding SelectedMfcRorData.SetFlow, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</Border>
|
||||
<Border Style="{StaticResource InfBorder}">
|
||||
<TextBox Text="{Binding SelectedMfcRorData.BasePressure, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
|
||||
</Border>
|
||||
<Border>
|
||||
<CheckBox
|
||||
Margin="5"
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
using MECF.Framework.Common.DataCenter;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
|
@ -8,7 +7,6 @@ using System.Linq;
|
|||
using System.Reflection;
|
||||
using System.Data;
|
||||
using System.Windows.Forms;
|
||||
using Aitex.Core.Util;
|
||||
using Aitex.Core.Common.DeviceData;
|
||||
|
||||
namespace SicUI.Models.PMs
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
using Aitex.Core.Common.DeviceData;
|
||||
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;
|
||||
|
|
|
@ -1,9 +1,6 @@
|
|||
using Aitex.Core.Common.DeviceData;
|
||||
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;
|
||||
|
|
|
@ -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,33 +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;
|
||||
|
||||
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,6 +1,4 @@
|
|||
using Aitex.Core.Util;
|
||||
using MECF.Framework.Common.OperationCenter;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
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;
|
||||
|
|
|
@ -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>
|
||||
/// ProcessMonitorView.xaml 的交互逻辑
|
||||
/// </summary>
|
||||
public partial class ProcessMonitorView : Window
|
||||
{
|
||||
public ProcessMonitorView()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,214 +0,0 @@
|
|||
using Aitex.Core.Util;
|
||||
using SicUI.Models;
|
||||
using Aitex.Core.Common.DeviceData;
|
||||
using MECF.Framework.UI.Client.ClientBase;
|
||||
using System.Threading.Tasks;
|
||||
using System;
|
||||
using Aitex.Core.RT.Device.PmDevices;
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
|
@ -249,6 +249,7 @@ if exist "$(ProjectDir)..\SicSetup\Packages\SicUI\PresetGroups" rd "$(ProjectDir
|
|||
<Compile Include="Converter\EngModeToBdColorConverter.cs" />
|
||||
<Compile Include="Converter\EngModeToBdThicknessConverter.cs" />
|
||||
<Compile Include="Converter\EngModeToBgWatermarkVisibilityConverter.cs" />
|
||||
<Compile Include="GlobalUsings.cs" />
|
||||
<Compile Include="Models\Maintenances\RuntimeView.xaml.cs">
|
||||
<DependentUpon>RuntimeView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
|
@ -384,15 +385,10 @@ if exist "$(ProjectDir)..\SicSetup\Packages\SicUI\PresetGroups" rd "$(ProjectDir
|
|||
</Compile>
|
||||
<Compile Include="Bootstrapper.cs" />
|
||||
<Compile Include="MainViewModel.cs" />
|
||||
<Compile Include="Models\PMs\PMProcessGasFlowCounterViewModel.cs" />
|
||||
<Compile Include="Models\RecipeEditors\RoutineConfigView.xaml.cs">
|
||||
<DependentUpon>RoutineConfigView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Models\RecipeEditors\RoutineConfigViewModel.cs" />
|
||||
<Compile Include="ProcessMonitorView.xaml.cs">
|
||||
<DependentUpon>ProcessMonitorView.xaml</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="ProcessMonitorViewModel.cs" />
|
||||
<Compile Include="RtIpAddressInput.xaml.cs">
|
||||
<DependentUpon>RtIpAddressInput.xaml</DependentUpon>
|
||||
</Compile>
|
||||
|
@ -617,10 +613,6 @@ if exist "$(ProjectDir)..\SicSetup\Packages\SicUI\PresetGroups" rd "$(ProjectDir
|
|||
<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>
|
||||
|
@ -629,10 +621,6 @@ if exist "$(ProjectDir)..\SicSetup\Packages\SicUI\PresetGroups" rd "$(ProjectDir
|
|||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="ProcessMonitorView.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
</Page>
|
||||
<Page Include="RtIpAddressInput.xaml">
|
||||
<SubType>Designer</SubType>
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
|
@ -647,10 +635,6 @@ if exist "$(ProjectDir)..\SicSetup\Packages\SicUI\PresetGroups" rd "$(ProjectDir
|
|||
<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>
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue