From 1a9f180e2bc0b4fa12a81e11d72f0ec663b35c99 Mon Sep 17 00:00:00 2001 From: "SIC1016\\caipeilun" <905168240@qq.com> Date: Tue, 4 Aug 2026 18:19:29 +0800 Subject: [PATCH] =?UTF-8?q?PMroutine=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App/Modules/SicModules/PMs/PMModuleDevice.cs | 17 +- .../PMs/Routines/Base/PMBaseRoutine.cs | 4 +- .../SicModules/PMs/Routines/PMCleanRoutine.cs | 184 +++++++------ .../PMs/Routines/PMLeakCheckRoutine.cs | 153 ++++------- .../PMs/Routines/PMPostTransferRoutine.cs | 82 +++++- .../PMs/Routines/PMProcessAbortRoutine.cs | 61 ++--- .../SicModules/PMs/Routines/PMPurgeRoutine.cs | 245 +++++++----------- .../PMs/Routines/PMToIsolationRoutine.cs | 56 ++-- .../PMs/Routines/PMToProcessIdleRoutine.cs | 5 +- .../SicModules/PMs/Routines/PMVentRoutine.cs | 4 +- 10 files changed, 354 insertions(+), 457 deletions(-) diff --git a/App/Modules/SicModules/PMs/PMModuleDevice.cs b/App/Modules/SicModules/PMs/PMModuleDevice.cs index 5b805f8..321b645 100644 --- a/App/Modules/SicModules/PMs/PMModuleDevice.cs +++ b/App/Modules/SicModules/PMs/PMModuleDevice.cs @@ -71,8 +71,9 @@ namespace SicModules.PMs { Final1, Final2, - M1to17, - M18to40No303439, + M1toM17, + M18toM40No303439, + M2M9M15M19_M26, M1to16, M5M21, M17, @@ -93,7 +94,7 @@ namespace SicModules.PMs All, M32M35M37, M38, - AllWithoutM28M29M31M40 + AllWithoutM28M29M31M40, }; public partial class PMModule @@ -1031,7 +1032,7 @@ namespace SicModules.PMs } else if (eGroupName == IoGroupName.Final1) { - lst = new List() { "V92", "V93", "V94", "V95", "V96" }; + lst = new List() { "V93", "V94", "V95", "V96" }; } else if (eGroupName == IoGroupName.Final1WithOutV94) { @@ -1157,14 +1158,18 @@ namespace SicModules.PMs { lst = new List() { 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 30 };//新增 30 } - else if (mGroupName == MfcGroupName.M1to17) + else if (mGroupName == MfcGroupName.M1toM17) { lst = new List() { 1, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17 }; } - else if (mGroupName == MfcGroupName.M18to40No303439) + else if (mGroupName == MfcGroupName.M18toM40No303439) { lst = new List() { 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32,33,35,36,37,38,40 };//无30 34 39 } + else if (mGroupName == MfcGroupName.M2M9M15M19_M26) + { + lst = new List() { 2, 9, 15, 19, 20, 21, 22, 23, 24, 25, 26}; + } else if (mGroupName == MfcGroupName.M5M21) { lst = new List() { 5,21 }; diff --git a/App/Modules/SicModules/PMs/Routines/Base/PMBaseRoutine.cs b/App/Modules/SicModules/PMs/Routines/Base/PMBaseRoutine.cs index f4451cc..d70cc14 100644 --- a/App/Modules/SicModules/PMs/Routines/Base/PMBaseRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/Base/PMBaseRoutine.cs @@ -1743,7 +1743,7 @@ namespace SicModules.PMs.Routines.Base }, () => { - SetMfcRampByGroupAndPressureAlways(currentPressureUpOrDown); + //SetMfcRampByGroupAndPressureAlways(currentPressureUpOrDown); return Math.Abs(_IoThrottle.PressureFeedback - pressure) <= _pmPressureMaxDiff; }, timeout * 1000); @@ -1772,7 +1772,7 @@ namespace SicModules.PMs.Routines.Base }, () => { - SetMfcRampByGroupAndPressureAlways(currentPressureUpOrDown); + //SetMfcRampByGroupAndPressureAlways(currentPressureUpOrDown); return _IoThrottle.PressureFeedback >= pressure; }, timeout * 1000); diff --git a/App/Modules/SicModules/PMs/Routines/PMCleanRoutine.cs b/App/Modules/SicModules/PMs/Routines/PMCleanRoutine.cs index 3f6aa53..5dca017 100644 --- a/App/Modules/SicModules/PMs/Routines/PMCleanRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMCleanRoutine.cs @@ -1,12 +1,13 @@ -using System.Collections.Generic; -using System.Diagnostics; -using Aitex.Core.RT.Device; +using Aitex.Core.RT.Device; using Aitex.Core.RT.Device.Devices; using Aitex.Core.RT.Event; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Equipment; +using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MFCs; using SicModules.PMs.Routines.Base; +using System.Collections.Generic; +using System.Diagnostics; namespace SicModules.PMs.Routines { @@ -30,7 +31,7 @@ namespace SicModules.PMs.Routines SetGroupG, SetGroupK, - SetM1to16, + SetM1toM17, SetM17M18, SetPC, SetGroupJ, @@ -50,7 +51,7 @@ namespace SicModules.PMs.Routines SetGasIn2, SetGroupJOpen, - SetM291519to26, + SetM18toM40, OpenFinal2, SetMfcFinal2, @@ -122,7 +123,7 @@ namespace SicModules.PMs.Routines SetTVEnable_2, SetTVPressMode, SetTv1, - SetM2toM40, + Set0M18toM40, SetM18, SetV31, SetV32, @@ -142,7 +143,6 @@ namespace SicModules.PMs.Routines SetM18_1, SetM18_2, - SetV92V93V95, SetV94, SetV96, @@ -178,6 +178,30 @@ namespace SicModules.PMs.Routines Notify2, Notify3, Notify4, + WaitPressUpTo950, + + FirstWaitPressureUp, + FirstSetDefault_M18toM40, + FirstSet0_M18toM40, + FirstSetEPV2_1, + FirstSetEPV2_2, + FirstSetTv1, + + LoopSetDefault_M18toM40, + LoopSetEPV2_1, + LoopWaitPressureUp, + LoopSetEPV2_2, + LoopSetTv1, + LoopSet0_M18toM40, + Loop2Set0_M18toM40, + LoopWaitTv1, + + FinishSetM1toM17, + FinishSetM18toM40, + FinishVentPumpClose_1, + FinishCloseGroupV25, + FinishSetPressureUp2, + FinishSetTVto300 } private ModuleName moduleName; @@ -276,149 +300,115 @@ namespace SicModules.PMs.Routines SetHeatEnable((int)RoutineStep.HeatEnable, false, _heatTimeOut); SetRotationValve((int)RoutineStep.RotationEnable, _rotationCheckSpeed, false, _rotationCloseTimeout); - //关闭V72,打开V25 + //3、 关闭 V72(GasBox.Vent.Pump) 打开 V25(GasBox.Vent.Bypass)。 SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupV25, IoGroupName.V25, true, _IoValueOpenCloseTimeout); - //打开V103,关闭V105 - SetIoValueByGroup((int)RoutineStep.SetV103, IoGroupName.V103, true, _IoValueOpenCloseTimeout); - SetIoValueByGroup((int)RoutineStep.SetV105, IoGroupName.V105, false, _IoValueOpenCloseTimeout); - //打开V31,打开V32 + //4、 打开 V31(H2.Supply)、 V32(Ar.Supply) 。 SetIoValueByGroup((int)RoutineStep.SetV31, IoGroupName.V31, true, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetV32, IoGroupName.V32, true, _IoValueOpenCloseTimeout); - //打开V35,打开V36 + //5、 打开 V35(H2N2.Line1)、 V36(H2N2.Line2),关闭 B/C/E/F/H/KValves,打开 D/G Valves; 打开 J valve。 SetIoValueByGroup((int)RoutineStep.SetV35V36, IoGroupName.V35V36, true, _IoValueOpenCloseTimeout); - - //关闭B/C/E/F/H/K 阀门 SetIoValueByGroup((int)RoutineStep.SetGroupB, IoGroupName.B, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupC, IoGroupName.C, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupE, IoGroupName.E, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupF, IoGroupName.F, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupH, IoGroupName.H, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupK, IoGroupName.K, false, _IoValueOpenCloseTimeout); - - //打开D/G 阀门 SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout); - - //打开V65 - SetIoValueByGroup((int)RoutineStep.SetV65, IoGroupName.V65, true, _IoValueOpenCloseTimeout); + SetIoValueByGroup((int)RoutineStep.SetGroupJ, IoGroupName.J, true, _IoValueOpenCloseTimeout); //设置MFC和PC的模式 SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.All); SetPcModeToNormal((int)RoutineStep.SetPCMode, _lstPcList); - //打开J阀门 - SetIoValueByGroup((int)RoutineStep.SetGroupJ, IoGroupName.J, true, _IoValueOpenCloseTimeout); - - //M1-M16设定为default值(M2、M9、M15除外) - SetMfcToDefaultByGroup((int)RoutineStep.SetM1to16, MfcGroupName.M1to16, 0); - SetMfcToDefaultByGroup((int)RoutineStep.SetM17M18, MfcGroupName.M17M18, 0); - - //设置所有PC到默认值 + //6、 M1-M17 设定为 default 值,所有 PC 设定为 default 值(PC1-PC9), M18-M40(除M30\M34\M39)) MFC 3s ramp 到 default 值。 + SetMfcToDefaultByGroup((int)RoutineStep.SetM1toM17, MfcGroupName.M1toM17, 0); SetPcToDefault((int)RoutineStep.SetPC, _lstPcList); + SetMfcToDefaultByGroup((int)RoutineStep.SetM18toM40, MfcGroupName.M18toM40No303439, 3); - //设置M2,M9,M15,M19-M26 3s ramp 到default 值 - SetMfcToDefaultByGroup((int)RoutineStep.SetM291519to26, MfcGroupName.M2toM26, 3); - - //打开EPV2 + //7、打开 EPV2,等待 3s, 打开 TV enable, 压力模式,伺服压力默认设定为 0mbar; SetIoValueByGroup((int)RoutineStep.SetEPV2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); TimeDelay((int)RoutineStep.TimeDelay1, 3); - - //设置蝶阀Enable SetThrottleEnableAndWait((int)RoutineStep.SetTVEnable_1, _IoThrottle, 5); - - //设置蝶阀为压力模式 SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode, _IoThrottle, 5); - - //伺服压力设定值到0mbar SetThrottleToTargetAndNoWait((int)RoutineStep.SetTv1, _IoThrottle, _pressureMin); - //M2、M9、M15、M19-M40 MFC 5s ramp 到0 - SetMfcByGroup((int)RoutineStep.SetM2toM40, MfcGroupName.M2toM42, 0, 5); - SetMfcByGroup((int)RoutineStep.SetM18, MfcGroupName.M18, 0, 5); + //8、当蝶阀设定值 ramp 到 0 后,将 M18-M40(除 M30\M34\M39)) MFC 3s ramp 到 0; + SetMfcByGroup((int)RoutineStep.Set0M18toM40, MfcGroupName.M18toM40No303439, 0, 3); - //等待腔体压力Pump到设定值 + //9、等待腔体压力到 Pump Base Pressure(可配置),蝶阀改为位置模式,开度设定 100% WaitChamberPressDownTo((int)RoutineStep.WaitTv1, _pressureMin, _pumpTimeout); - TimeDelay((int)RoutineStep.TimeDelay2, 3); - - //蝶阀设置为位置模式,开度设置为最大 SetThrottleToPositionMode((int)RoutineStep.SetTVPositionMode, _IoThrottle, _throttleTimeout); TimeDelay((int)RoutineStep.TimeDelay11, 3); SetThrottleSetPosition((int)RoutineStep.SetTVPositionMax, _IoThrottle, 100, _throttleTimeout); - //Final2阀对应的MFC 3s Ramp到Default值 + //10、 M27、 M28、 M29、 M31、 M33、 M40 依次设定 3S ramp 到 default 值 ; SetMfcToDefaultByGroup((int)RoutineStep.SetMfcFinal2, MfcGroupName.Final2, 3); - //打开Final2阀 + //11、打开 V87( SHPurge.Final)、 V88( OuterGas.Final)、 V89( InnerGas.Final)、 V90(MiddleGas.Final)、 V91(OpticPurge.Final)、 V97(CarryGas.Final); SetIoValueByGroup((int)RoutineStep.OpenFinal2, IoGroupName.Final2, true, _IoValueOpenCloseTimeout); - //打开V68 + //12、 打开 V68(ChamBody.N2.Purge) SetIoValueByGroup((int)RoutineStep.SetV68, IoGroupName.GasIn1, true, _IoValueOpenCloseTimeout); TimeDelay((int)RoutineStep.TimeDelay3, 1); - //打开V92,V93和V95,再打开V94,在打开V96 + //13、 M32、 M35、 M36、 M37、 M38 依次设定 3S ramp 到 default 值 ; SetMfcToDefaultByGroup((int)RoutineStep.SetM32M35M37, MfcGroupName.M32M35M37, 1); SetMfcToDefaultByGroup((int)RoutineStep.SetM36, MfcGroupName.M36, 1); SetMfcToDefaultByGroup((int)RoutineStep.SetM38, MfcGroupName.M38, 1); TimeDelay((int)RoutineStep.TimeDelay4, 3); + //14、打开 V92(GasRingPurge.Final)、 V93(ChamberPurge.Final)、 V95(ConfinementRing.Final); + //等待 950,,打开 V94(RotationUpPurge.Final)、 等待 3S,打开 V96(HeaterWF.Final) ; + //蝶阀改为压力模式 SetIoValueByGroup((int)RoutineStep.SetV92V93V95, IoGroupName.V92V93V95, true, _IoValueOpenCloseTimeout); + WaitChamberPressUpTo((int)RoutineStep.WaitPressUpTo950, 950, 600); + SetIoValueByGroup((int)RoutineStep.SetV94, IoGroupName.V94, true, _IoValueOpenCloseTimeout); + TimeDelay((int)RoutineStep.TimeDelay4, 3); + SetIoValueByGroup((int)RoutineStep.SetV96, IoGroupName.V96, true, _IoValueOpenCloseTimeout); + SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode1, _IoThrottle, 5); + //M18 - M40(除 M30\M34\M39)) MFC 3s ramp 到 default 值。 + //关闭 EPV2,等待压力达到设定值,压力达到后,打开 EPV2; + //M18 - M40(除 M30\M34\M39)) MFC 5s ramp 到 0。 + //伺服压力到设定值 0(可配置) + SetMfcToDefaultByGroup((int)RoutineStep.FirstSetDefault_M18toM40, MfcGroupName.M18toM40No303439, 3); + SetIoValueByGroup((int)RoutineStep.FirstSetEPV2_1, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); + WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.FirstWaitPressureUp, _IoThrottle, _pressureMax, _ventTimeout); + SetIoValueByGroup((int)RoutineStep.FirstSetEPV2_2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); + SetMfcByGroup((int)RoutineStep.FirstSet0_M18toM40, MfcGroupName.M18toM40No303439, 0, 5); + SetThrottleToTargetAndNoWait((int)RoutineStep.FirstSetTv1, _IoThrottle, _pressureMin); //循环开始 Loop((int)RoutineStep.StartLoop, _pressureLoopCount); - //M2、M9、M15、M19-M40 MFC 3s ramp 到 default 值 - SetMfcToDefaultByGroup((int)RoutineStep.SetM2TOM40Default, MfcGroupName.M2toM42, 3); - SetMfcToDefaultByGroup((int)RoutineStep.SetM18Default, MfcGroupName.M18, 3); - - //先关蝶阀,再关闭EPV2 - SetThrottleToCloseMode((int)RoutineStep.SetTVCloseMode1, _IoThrottle, 8); - SetThrottleDisable((int)RoutineStep.CLoseTV1, _IoThrottle, 8); - TimeDelay((int)RoutineStep.TimeDelay5, 1); - SetIoValueByGroup((int)RoutineStep.SetEPV2_1, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); - - SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown1, PressureUpOrDown.Uping); - WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.WaitPressureUp, _IoThrottle, _pressureMax, _ventTimeout); - - TimeDelay((int)RoutineStep.TimeDelay6, _pressureMaxDelay); - - //打开EPV2 - SetIoValueByGroup((int)RoutineStep.SetEPV2_2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); - TimeDelay((int)RoutineStep.TimeDelay7, 1); - //设置蝶阀Enable - SetThrottleEnableAndWait((int)RoutineStep.SetTVEnable_2, _IoThrottle, 5); - //设置蝶阀为压力模式 - SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode1, _IoThrottle, 5); - - //M2、M9、M15、M19-M40 MFC 3s ramp 0 - SetMfcByGroup((int)RoutineStep.SetM2toM40_1, MfcGroupName.M2toM42, 0, 3); - SetMfcByGroup((int)RoutineStep.SetM18_1, MfcGroupName.M18, 0, 3); - - //伺服到0mbar - SetThrottlePressureAndWait((int)RoutineStep.SetPressureDown, _IoThrottle, _pressureMin, _pumpTimeout); + //M18 - M40(除 M30\M34\M39)) MFC 3s ramp 到 default 值。 + //关闭 EPV2,等待压力达到设定值,压力达到后,打开 EPV2; + //M18 - M40(除 M30\M34\M39)) MFC 5s ramp 到 0。 + //伺服压力到设定值 0(可配置) + //M18 - M40(除 M30\M34\M39)) MFC5s ramp 到 0。 + //等待压力到达 0(可配置) + SetMfcToDefaultByGroup((int)RoutineStep.LoopSetDefault_M18toM40, MfcGroupName.M18toM40No303439, 3); + SetIoValueByGroup((int)RoutineStep.LoopSetEPV2_1, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); + WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.LoopWaitPressureUp, _IoThrottle, _pressureMax, _ventTimeout); + SetIoValueByGroup((int)RoutineStep.LoopSetEPV2_2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); + SetMfcByGroup((int)RoutineStep.LoopSet0_M18toM40, MfcGroupName.M18toM40No303439, 0, 5); + SetThrottleToTargetAndNoWait((int)RoutineStep.LoopSetTv1, _IoThrottle, _pressureMin); + SetMfcByGroup((int)RoutineStep.Loop2Set0_M18toM40, MfcGroupName.M18toM40No303439, 0, 5); + WaitChamberPressDownTo((int)RoutineStep.LoopWaitTv1, _pressureMin, _pumpTimeout); EndLoop((int)RoutineStep.EndLoop); - - //M27-M40 MFC 3s ramp 到 default 值 - SetMfcToDefaultByGroup((int)RoutineStep.SetMfc2to40Default, MfcGroupName.M2toM42, 3); - SetMfcToDefaultByGroup((int)RoutineStep.SetM18_2, MfcGroupName.M18, 3); - - //打开J阀门 - SetIoValueByGroup((int)RoutineStep.SetGroupJ_1, IoGroupName.J, true, _IoValueOpenCloseTimeout); - - //打开V72,关闭V25 - SetIoValueByGroup((int)RoutineStep.VentPumpClose_1, IoGroupName.VentPump, true, _IoValueOpenCloseTimeout); - SetIoValueByGroup((int)RoutineStep.CloseGroupV25, IoGroupName.V25, false, _IoValueOpenCloseTimeout); - - //设置蝶阀为压力模式 - SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode2, _IoThrottle, 5); - - //压力伺服到300mbar - SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown2, PressureUpOrDown.Uping); - SetThrottleToTargetAndNoWait((int)RoutineStep.SetPressureUp2, _IoThrottle, _throttleFinalPressure); - WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.SetTVto300, _IoThrottle, _throttleFinalPressure, _pmPressureMaxDiff, _throttleTimeout); + //设置 M1-M17 3s ramp 到 default; M18 - M40(除 M30\M34\M39)) MFC 3s ramp 到default 值。 + //打开 V72(GasBox.Vent.Pump) 关闭 V25(GasBox.Vent.Bypass), 反应腔压力伺服到300mbar(可配置) + + SetMfcToDefaultByGroup((int)RoutineStep.FinishSetM1toM17, MfcGroupName.M1toM17, 3); + SetMfcToDefaultByGroup((int)RoutineStep.FinishSetM18toM40, MfcGroupName.M18toM40No303439, 3); + SetIoValueByGroup((int)RoutineStep.FinishVentPumpClose_1, IoGroupName.VentPump, true, _IoValueOpenCloseTimeout); + SetIoValueByGroup((int)RoutineStep.FinishCloseGroupV25, IoGroupName.V25, false, _IoValueOpenCloseTimeout); + SetThrottleToTargetAndNoWait((int)RoutineStep.FinishSetPressureUp2, _IoThrottle, _throttleFinalPressure); + WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.FinishSetTVto300, _IoThrottle, _throttleFinalPressure, _pmPressureMaxDiff, _throttleTimeout); } catch (RoutineBreakException) { diff --git a/App/Modules/SicModules/PMs/Routines/PMLeakCheckRoutine.cs b/App/Modules/SicModules/PMs/Routines/PMLeakCheckRoutine.cs index 1d43570..9837d61 100644 --- a/App/Modules/SicModules/PMs/Routines/PMLeakCheckRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMLeakCheckRoutine.cs @@ -1,14 +1,15 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using Aitex.Core.RT.Device; +using Aitex.Core.RT.Device; using Aitex.Core.RT.Device.Devices; using Aitex.Core.RT.Event; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.DBCore; using MECF.Framework.Common.Equipment; +using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MFCs; using SicModules.PMs.Routines.Base; +using System; +using System.Collections.Generic; +using System.Diagnostics; namespace SicModules.PMs.Routines { @@ -34,7 +35,7 @@ namespace SicModules.PMs.Routines SetMFCMode, SetPCMode, - SetM1to16, + SetM1toM17, SetPC, SetGroupJ, SetM291519to38, @@ -52,7 +53,7 @@ namespace SicModules.PMs.Routines SetGasIn2, SetGroupJOpen, - SetM291519to26, + SetM18toM40, SetM17M18, OpenFinal2, @@ -66,7 +67,7 @@ namespace SicModules.PMs.Routines SetTVPressMode, SetTv1, WaitTv1, - SetM2toM40, + Set0M18toM40, SetM18, SetTVPositionMode, SetTVPositionMode_1, @@ -97,7 +98,7 @@ namespace SicModules.PMs.Routines SetMfc28to31, SetReactorPress, - CloseFinanl1, + CloseFinal1, CloseFinanl2, CloseEPV2, SetTVCloseMode2, @@ -145,6 +146,7 @@ namespace SicModules.PMs.Routines SetV31, SetV32, SetV35V36, + CloseV68, SetV92V93V95, SetV94, @@ -184,6 +186,13 @@ namespace SicModules.PMs.Routines TimeDelay15, TimeDelay16, TimeDelay17, + + LoopSetTVPressMode1, + LoopSetM18toM40, + LoopSetTv1, + LoopSet0M18toM40, + LoopSetM18Default, + LoopWaitTv1 } enum LeakCheckType @@ -308,137 +317,73 @@ namespace SicModules.PMs.Routines SetHeatEnable((int)RoutineStep.HeatEnable, false, _heatTimeOut); SetRotationValve((int)RoutineStep.RotationEnable, _rotationCheckSpeed, false, _rotationCloseTimeout); - //关闭V72,打开V25 + //3、 关闭 V72(GasBox.Vent.Pump) 。 SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false, _IoValueOpenCloseTimeout); - SetIoValueByGroup((int)RoutineStep.SetGroupV25, IoGroupName.V25, true, _IoValueOpenCloseTimeout); - //打开V103,关闭V105 - SetIoValueByGroup((int)RoutineStep.SetV103, IoGroupName.V103, true, _IoValueOpenCloseTimeout); - SetIoValueByGroup((int)RoutineStep.SetV105, IoGroupName.V105, false, _IoValueOpenCloseTimeout); - //打开V31,打开V32 + //4、 打开 V31(H2.Supply)、 V32(N2Supply)。 SetIoValueByGroup((int)RoutineStep.SetV31, IoGroupName.V31, true, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetV32, IoGroupName.V32, true, _IoValueOpenCloseTimeout); - //打开V35,打开V36 + //5、 打开 V35(H2N2.Line1)、 V36(H2N2.Line2),关闭 B/C/E/F/H/KValves,打开 D/G Valves; 打开 J valve。 SetIoValueByGroup((int)RoutineStep.SetV35V36, IoGroupName.V35V36, true, _IoValueOpenCloseTimeout); - - //关闭B/C/E/F/H/K 阀门 SetIoValueByGroup((int)RoutineStep.SetGroupB, IoGroupName.B, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupC, IoGroupName.C, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupE, IoGroupName.E, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupF, IoGroupName.F, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupH, IoGroupName.H, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupK, IoGroupName.K, false, _IoValueOpenCloseTimeout); - - //打开D/G 阀门 SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout); - - //设置MFC和PC的模式 - SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.All); - SetPcModeToNormal((int)RoutineStep.SetPCMode, _lstPcList); - - //M1-M16设定为default值(M2、M9、M15除外) - SetMfcToDefaultByGroup((int)RoutineStep.SetM1to16, MfcGroupName.M1to16, 0); - - //设置所有PC到默认值 - SetPcToDefault((int)RoutineStep.SetPC, _lstPcList); - - //设置M2,M9,M15,M19-M26 3s ramp 到default 值 - SetMfcToDefaultByGroup((int)RoutineStep.SetM291519to26, MfcGroupName.M2toM42, 3);//组改变,.M2toM26改变为->M2toM42,防止MFC不在正常状态 - SetMfcToDefaultByGroup((int)RoutineStep.SetM17M18, MfcGroupName.M17M18, 3); - - //打开V68 - SetIoValueByGroup((int)RoutineStep.SetV68, IoGroupName.GasIn1, true, _IoValueOpenCloseTimeout); - - //打开J阀门 SetIoValueByGroup((int)RoutineStep.SetGroupJ, IoGroupName.J, true, _IoValueOpenCloseTimeout); - //打开EPV2 + //6、 M1-M17 设定为 default 值,所有 PC 设定为 default 值(PC1-PC9), M18-M40(除M30\M34\M39)) MFC 3s ramp 到 default 值。 + SetMfcToDefaultByGroup((int)RoutineStep.SetM1toM17, MfcGroupName.M1toM17, 0); + SetPcToDefault((int)RoutineStep.SetPC, _lstPcList); + SetMfcToDefaultByGroup((int)RoutineStep.SetM18toM40, MfcGroupName.M18toM40No303439, 3); + + //7、打开 EPV2,等待 3s, 打开 TV enable, 压力模式,伺服压力默认设定为 0mbar; SetIoValueByGroup((int)RoutineStep.SetEPV2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); TimeDelay((int)RoutineStep.TimeDelay1, 3); - - //设置蝶阀Enable SetThrottleEnableAndWait((int)RoutineStep.SetTVEnable, _IoThrottle, 5); - - //设置蝶阀为压力模式 SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode, _IoThrottle, 5); - - //伺服压力设定值到0mbar SetThrottleToTargetAndNoWait((int)RoutineStep.SetTv1, _IoThrottle, _pressureMin); - //M2、M9、M15、M19-M40 MFC 3s ramp到0 - SetMfcByGroup((int)RoutineStep.SetM2toM40, MfcGroupName.M2toM42, 0, 3); - SetMfcByGroup((int)RoutineStep.SetM18, MfcGroupName.M18, 0, 3); + //8、当蝶阀设定值 ramp 到 0 后,将 M18-M40(除 M30\M34\M39)) MFC 3s ramp 到 0; + SetMfcByGroup((int)RoutineStep.Set0M18toM40, MfcGroupName.M18toM40No303439, 0, 3); - //等待腔体压力Pump到设定值 + //9、等待腔体压力到 Pump Base Pressure(可配置),蝶阀改为位置模式,开度设定 100% WaitChamberPressDownTo((int)RoutineStep.WaitTv1, _pressureMin, _pressureMinTimeout); - TimeDelay((int)RoutineStep.TimeDelay8, 3); - - //蝶阀设置为位置模式,开度设置为最大 SetThrottleToPositionMode((int)RoutineStep.SetTVPositionMode, _IoThrottle, _throttleTimeout); TimeDelay((int)RoutineStep.TimeDelay11, 3); SetThrottleSetPosition((int)RoutineStep.SetTVPositionMax, _IoThrottle, 100, _throttleTimeout); - TimeDelay((int)RoutineStep.TimeDelay9, 3); - + //循环开始 Loop((int)RoutineStep.StartLoop, _pressureLoopCount); - - //M2、M9、M15、M19-M40 MFC 3s ramp 到 default 值 - SetMfcToDefaultByGroup((int)RoutineStep.SetM2TOM40Default, MfcGroupName.M2toM42, 3); - SetMfcToDefaultByGroup((int)RoutineStep.SetM18Default, MfcGroupName.M18, 3); - - //先关蝶阀,再关闭EPV2 - SetThrottleToCloseMode((int)RoutineStep.SetTVCloseMode1, _IoThrottle, 8); - SetThrottleDisable((int)RoutineStep.CLoseTV1, _IoThrottle, 8); - TimeDelay((int)RoutineStep.TimeDelay5, 1); - SetIoValueByGroup((int)RoutineStep.SetEPV2_1, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); - - SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown1, PressureUpOrDown.Uping); - WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.WaitPressureUp, _IoThrottle, _pressureMax, _pressureMaxTimeout); - - TimeDelay((int)RoutineStep.TimeDelay6, _pressureMaxDelay); - - //打开EPV2 - SetIoValueByGroup((int)RoutineStep.SetEPV2_2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); - TimeDelay((int)RoutineStep.TimeDelay7, 1); - //设置蝶阀Enable - SetThrottleEnableAndWait((int)RoutineStep.SetTVEnable_2, _IoThrottle, 5); - //设置蝶阀为压力模式 - SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode1, _IoThrottle, 5); - - //M2、M9、M15、M19-M40 MFC 3s ramp 0 - SetMfcByGroup((int)RoutineStep.SetM2toM40_1, MfcGroupName.M2toM42, 0, 3); - SetMfcByGroup((int)RoutineStep.SetM18_1, MfcGroupName.M18, 0, 3); - - //伺服到0mbar - SetThrottlePressureAndWait((int)RoutineStep.SetPressureDown, _IoThrottle, _pressureMin, _pressureMinTimeout); + //蝶阀改为压力模式 + //M18 - M40(除 M30\M34\M39)) MFC 3s ramp 到 default 值。 + //压力 servo 到 300(可配置) + //压力达到后, M18 - M40(除 M30\M34\M39)) MFC 5s ramp 到 0。 + //等待压力到达 0(可配置) + SetThrottleToPressModeAndWait((int)RoutineStep.LoopSetTVPressMode1, _IoThrottle, 5); + SetMfcToDefaultByGroup((int)RoutineStep.LoopSetM18toM40, MfcGroupName.M18toM40No303439, 3); + SetThrottleToTargetAndNoWait((int)RoutineStep.LoopSetTv1, _IoThrottle, _pressureMin); + SetMfcByGroup((int)RoutineStep.LoopSet0M18toM40, MfcGroupName.M18toM40No303439, 0, 5); + SetMfcToDefaultByGroup((int)RoutineStep.LoopSetM18Default, MfcGroupName.M18, 3); + WaitChamberPressDownTo((int)RoutineStep.LoopWaitTv1, _pressureMin, _pressureMinTimeout); EndLoop((int)RoutineStep.EndLoop); - - //依次关闭Final1 - SetIoValueByGroup((int)RoutineStep.CloseGasIn1, IoGroupName.GasIn1, false, _IoValueOpenCloseTimeout); - Delay((int)RoutineStep.TimeDelay13, 5); - - //关闭M32,M35,M36,M37,M38 - SetMfcByGroup((int)RoutineStep.CloseM32M35M37, MfcGroupName.M32M35M37, 0, 5); - SetMfcByGroup((int)RoutineStep.CloseM36, MfcGroupName.M36, 0, 5); - SetMfcByGroup((int)RoutineStep.CloseM38, MfcGroupName.M38, 0, 5); - - Delay((int)RoutineStep.TimeDelay14, 5); - - //关闭Final1阀 - SetIoValueByGroup((int)RoutineStep.CloseFinanl1, IoGroupName.Final1, false, _IoValueOpenCloseTimeout); - - //关闭Final2 + //11、 依次关闭 Final valves; + //先 关 闭 V93 ( ChamberPurge.Final )、 V94 ( RotationUpPurge.Final )、 V95(ConfinementRing.Final)、 V96(HeaterWF.Final); + //再关闭 V87( SHPurge.Final)、 V88( OuterGas.Final)、 V89( InnerGas.Final)、 V90( MiddleGas.Final )、 V91 ( OpticPurge.Final )、 V92 ( GasRingPurge.Final )、 V97(CarryGas.Final); + SetIoValueByGroup((int)RoutineStep.CloseFinal1, IoGroupName.Final1, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.CloseFinal2, IoGroupName.Final2, false, _IoValueOpenCloseTimeout); - - //延时 + //12、延时一定时间后(参数配置), 关闭蝶阀,再关闭 EPV2, 开始测漏记录腔体压力 P1(mbar)和时间 T1,测试时间 T(秒) 结束后, 记录腔体压力 P2 和时间 T2 + //计算腔体漏率 + //腔体漏率 =(P2 - P1) /(T2 - T1) *60 + //所得漏率与设定范围对比,小于范围,测漏成功,否则报错提示 TimeDelay((int)RoutineStep.TimeDelay15, _paramContinuePumpTime); - - //先关蝶阀,再关闭EPV2 SetThrottleToCloseMode((int)RoutineStep.SetTVCloseMode2, _IoThrottle, 8); SetThrottleDisable((int)RoutineStep.CLoseTvvvv, _IoThrottle, 8); TimeDelay((int)RoutineStep.TimeDelay16, 1); diff --git a/App/Modules/SicModules/PMs/Routines/PMPostTransferRoutine.cs b/App/Modules/SicModules/PMs/Routines/PMPostTransferRoutine.cs index c2e4f72..377bf5f 100644 --- a/App/Modules/SicModules/PMs/Routines/PMPostTransferRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMPostTransferRoutine.cs @@ -1,8 +1,11 @@ -using Aitex.Core.RT.Event; +using Aitex.Core.RT.Device; +using Aitex.Core.RT.Device.Devices; +using Aitex.Core.RT.Event; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.SubstrateTrackings; +using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MFCs; using SicModules.PMs.Routines.Base; namespace SicModules.PMs.Routines @@ -46,11 +49,37 @@ namespace SicModules.PMs.Routines TimeDelay12, TimeDelay13, TimeDelay14, - TimeDelay15 + TimeDelay15, + + SetV31, + SetV32, + SetV35V36, + SetGroupB, + SetGroupC, + SetGroupE, + SetGroupF, + SetGroupH, + SetGroupK, + SetGroupD, + SetGroupG, + SetM1toM17, + SetPC, + SetM18toM40, + SetEPV2, + SetGroupJ, + SetV72, + SetV25, + SetPressureDown, + SetTVto300 } bool hasWafer; + private IoThrottleValve2 _IoThrottle; + private double _throttleFinalPressure = 300;//蝶阀最终调整对的压力 + private double _pmPressureMaxDiff; //蝶阀与目标压力的差值范围(认为调整到位了) + private int _throttleTimeout; //蝶阀调整到指定压力的超时时间 + //private int _timeout; private int _rotationSpeed = 60; @@ -68,6 +97,7 @@ namespace SicModules.PMs.Routines private float _scrL2Ratio = 0; private float _scrL3Ratio = 0; + private int _IoValueOpenCloseTimeout = 10; //开关超时时间 private double _targetPressure; private PMServoToPressure _pmServoToPressure; @@ -99,11 +129,14 @@ namespace SicModules.PMs.Routines public override Result Start(params object[] objs) { - //servo = DEVICE.GetDevice($"{Module}.NAISServo"); - //_timeout = SC.GetValue($"NAISServo.UpTimeout"); + _IoThrottle = DEVICE.GetDevice($"{Module}.TV"); _rotationSpeed = SC.GetValue($"PM.{Module}.ProcessIdle.RotationSpeed"); + _pmPressureMaxDiff = SC.GetValue($"PM.{Module}.ThrottlePressureMaxDiff"); + _throttleFinalPressure = SC.GetValue($"PM.{Module}.ProcessIdle.FinalPressure"); + _throttleTimeout = SC.GetValue($"PM.{Module}.ThrottlePressureTimeout"); + _psuHeatEnable = SC.GetValue($"PM.{Module}.ProcessIdle.PSUHeaterEnable"); _psuHeatMode = SC.GetValue($"PM.{Module}.ProcessIdle.PSUHeaterMode"); //_psuPowerRef = (float)SC.GetValue($"PM.{Module}.ProcessIdle.PSUPowerRef"); @@ -135,19 +168,41 @@ namespace SicModules.PMs.Routines public override Result Monitor() { - try + try { + //1、 打开 V31(H2.Supply)、 V32(Ar.Supply)。 + SetIoValueByGroup((int)RoutineStep.SetV31, IoGroupName.V31, true, _IoValueOpenCloseTimeout); + SetIoValueByGroup((int)RoutineStep.SetV32, IoGroupName.V32, true, _IoValueOpenCloseTimeout); + //2、 打开 V35(H2N2.Line1)、 V36(H2N2.Line2),关闭 B/ C / E / F / H / KValves,打开 D/ G Valves。 + SetIoValueByGroup((int)RoutineStep.SetV35V36, IoGroupName.V35V36, true, _IoValueOpenCloseTimeout); + SetIoValueByGroup((int)RoutineStep.SetGroupB, IoGroupName.B, false, _IoValueOpenCloseTimeout); + SetIoValueByGroup((int)RoutineStep.SetGroupC, IoGroupName.C, false, _IoValueOpenCloseTimeout); + SetIoValueByGroup((int)RoutineStep.SetGroupE, IoGroupName.E, false, _IoValueOpenCloseTimeout); + SetIoValueByGroup((int)RoutineStep.SetGroupF, IoGroupName.F, false, _IoValueOpenCloseTimeout); + SetIoValueByGroup((int)RoutineStep.SetGroupH, IoGroupName.H, false, _IoValueOpenCloseTimeout); + SetIoValueByGroup((int)RoutineStep.SetGroupK, IoGroupName.K, false, _IoValueOpenCloseTimeout); + SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout); + SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout); + //3、 M1 - M17 设定为 default 值,所有 PC 设定为 default 值(PC1 - PC9)。 + SetMfcToDefaultByGroup((int)RoutineStep.SetM1toM17, MfcGroupName.M1toM17, 0); + SetPcToDefault((int)RoutineStep.SetPC, _lstPcList); + //4、 M18 - M40(除 M30\M34\M39)) MFC 3s ramp 到 default 值。 + SetMfcToDefaultByGroup((int)RoutineStep.SetM18toM40, MfcGroupName.M18toM40No303439, 3); + //5、 打开 EPV2。 + SetIoValueByGroup((int)RoutineStep.SetEPV2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); + //6、打开 J Valves + SetIoValueByGroup((int)RoutineStep.SetGroupJ, IoGroupName.J, true, _IoValueOpenCloseTimeout); + //7、打开 V72(GasBox.Vent.Pump) 关闭 V25(GasBox.Vent.Bypass), 反应腔压力伺服到300mbar(可配置) + SetIoValueByGroup((int)RoutineStep.SetV72, IoGroupName.VentPump, true, _IoValueOpenCloseTimeout); + TimeDelay((int)RoutineStep.TimeDelay5, 1); + SetIoValueByGroup((int)RoutineStep.SetV25, IoGroupName.V25, false, _IoValueOpenCloseTimeout); + SetThrottleToTargetAndNoWait((int)RoutineStep.SetPressureDown, _IoThrottle, _throttleFinalPressure); + WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.SetTVto300, _IoThrottle, _throttleFinalPressure, _pmPressureMaxDiff, _throttleTimeout); + //8、设定转速(可配置) EnableRotation((int)RoutineStep.EnableRotation, 5); SetRotationValveAndNoWait((int)RoutineStep.SetRotation1, _rotationSpeed); - TimeDelay((int)RoutineStep.TimeDelay1, _servoUpDelay); - - SetConfinementRingUpAndWait((int)RoutineStep.SetServoUp, 30); - - ExecuteRoutine((int)RoutineStep.SetChamberPressure, _pmServoToPressure); - - TimeDelay((int)RoutineStep.TimeDelay8, 1); - + //9、加热使能(PSU 和 SCR)(可配置) if (_psuHeatEnable && _needEnableHeat) { SetPSUEnable((int)RoutineStep.EnableTC1, true, 5); @@ -168,6 +223,7 @@ namespace SicModules.PMs.Routines SetSCRHeatRatio((int)RoutineStep.SetTC2Ratio, _scrL1Ratio, _scrL2Ratio, _scrL3Ratio); } + TimeDelay((int)RoutineStep.TimeDelay8, 1); WaitRotationValve((int)RoutineStep.WaitRotation1, _rotationSpeed, true, _rotationSpeed / 2); } catch (RoutineBreakException) diff --git a/App/Modules/SicModules/PMs/Routines/PMProcessAbortRoutine.cs b/App/Modules/SicModules/PMs/Routines/PMProcessAbortRoutine.cs index 0db0e2c..674b768 100644 --- a/App/Modules/SicModules/PMs/Routines/PMProcessAbortRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMProcessAbortRoutine.cs @@ -1,11 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; +using Aitex.Core.RT.Device.Devices; using Aitex.Core.RT.Event; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Equipment; using SicModules.PMs.Routines.Base; +using System; +using System.Collections.Generic; +using System.Diagnostics; namespace SicModules.PMs.Routines { @@ -19,9 +20,9 @@ namespace SicModules.PMs.Routines SetPSURatio, SetSCRRatio, SetRotation, - SetM2toM40, + SetM18toM40, SetM17M18, - SetM1to16, + SetM1toM17, SetM5M21, SetPC, SetV32, @@ -41,7 +42,8 @@ namespace SicModules.PMs.Routines SetV34, SetV100, TimeDelay1, - TimeDelay2, + TimeDelay2, + SetGroupJ } private int _heatTimeOut = 5; @@ -81,66 +83,35 @@ namespace SicModules.PMs.Routines { //CheckRoutineTimeOut(); - //停止加热 + //停止加热、停止旋转 SetHeatEnable((int)RoutineStep.HeatEnable, false, _heatTimeOut); - - //设置模式为Power - SetPSUHeatMode((int)RoutineStep.SetPSUMode, 0); - SetSCRHeatMode((int)RoutineStep.SetSCRMode, 0); - - //设定功率为0 - SetPSUHeatRatio((int)RoutineStep.SetPSURatio, 0, 0, 0); - SetSCRHeatRatio((int)RoutineStep.SetSCRRatio, 0, 0, 0); - - //停止旋转 SetRotationValveAndNoWait((int)RoutineStep.SetRotation, 0); - //M2、M9、M15、M19-M40 MFC 30s ramp 到 default 值 - SetMfcToDefaultByGroup((int)RoutineStep.SetM2toM40, MfcGroupName.M2toM42, _mfc2to40RampTime); - SetMfcToDefaultByGroup((int)RoutineStep.SetM17M18, MfcGroupName.M17M18, _mfc2to40RampTime); + //2、 M18-M40(除 M30\M34\M39)) MFC 30s ramp 到 default 值(时间可配置) + SetMfcToDefaultByGroup((int)RoutineStep.SetM18toM40, MfcGroupName.M18toM40No303439, _mfc2to40RampTime); - //M1 - M16 MFC 30s ramp 到 default 值(M2、M9、M15除外) - SetMfcToDefaultByGroup((int)RoutineStep.SetM1to16, MfcGroupName.M1to16, _mfc1to16RampTime); - //M5 M2130s ramp 到 default 值 - SetMfcToDefaultByGroup((int)RoutineStep.SetM5M21, MfcGroupName.M5M21, _mfc1to16RampTime); - - //所有PC设定为默认值 + //3、 M1-M17 MFC 30s ramp 到 default 值(时间可配置) , 所有 PC 设定为 default 值(PC1-PC9) + SetMfcToDefaultByGroup((int)RoutineStep.SetM1toM17, MfcGroupName.M1toM17, _mfc1to16RampTime); SetPcToDefault((int)RoutineStep.SetPC, _lstPcList); //等待MFC等流量 TimeDelay((int)RoutineStep.TimeDelay1, Math.Max(_mfc2to40RampTime, _mfc1to16RampTime)); - //打开V32 + //4、打开 V32(N2.Supply) SetIoValueByGroupNoWait((int)RoutineStep.SetV32, IoGroupName.V32, true); - //打开V35,打开V36 + //5、 打开 V35(H2N2.Line1)、 V36(H2N2.Line2),关闭 B/C/E/F/H/KValves,打开 D/G Valves;打开 J valve。 SetIoValueByGroupNoWait((int)RoutineStep.SetV35V36, IoGroupName.V35V36, true); - - //关闭B/C/E/F/H/K 阀门 SetIoValueByGroupNoWait((int)RoutineStep.SetGroupB, IoGroupName.B, false); SetIoValueByGroupNoWait((int)RoutineStep.SetGroupC, IoGroupName.C, false); SetIoValueByGroupNoWait((int)RoutineStep.SetGroupE, IoGroupName.E, false); SetIoValueByGroupNoWait((int)RoutineStep.SetGroupF, IoGroupName.F, false); SetIoValueByGroupNoWait((int)RoutineStep.SetGroupH, IoGroupName.H, false); SetIoValueByGroupNoWait((int)RoutineStep.SetGroupK, IoGroupName.K, false); - - SetIoValueByGroupNoWait((int)RoutineStep.SetV100, IoGroupName.V100, false); - - //打开D/G 阀门 SetIoValueByGroupNoWait((int)RoutineStep.SetGroupD, IoGroupName.D, true); SetIoValueByGroupNoWait((int)RoutineStep.SetGroupG, IoGroupName.G, true); + SetIoValueByGroupNoWait((int)RoutineStep.SetGroupJ, IoGroupName.V65, true); - //打开V65 - SetIoValueByGroupNoWait((int)RoutineStep.SetV65, IoGroupName.V65, true); - - //打开V68 - SetIoValueByGroupNoWait((int)RoutineStep.SetV68, IoGroupName.GasIn1, true); - - //关闭V72,打开V25 - SetIoValueByGroupNoWait((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false); - - TimeDelay((int)RoutineStep.TimeDelay2, 2); - SetIoValueByGroupNoWait((int)RoutineStep.SetGroupV25, IoGroupName.V25, true); } catch (RoutineBreakException) diff --git a/App/Modules/SicModules/PMs/Routines/PMPurgeRoutine.cs b/App/Modules/SicModules/PMs/Routines/PMPurgeRoutine.cs index cf76dc2..21ac7f9 100644 --- a/App/Modules/SicModules/PMs/Routines/PMPurgeRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMPurgeRoutine.cs @@ -1,12 +1,13 @@ -using System.Collections.Generic; -using System.Diagnostics; -using Aitex.Core.RT.Device; +using Aitex.Core.RT.Device; using Aitex.Core.RT.Device.Devices; using Aitex.Core.RT.Event; using Aitex.Core.RT.Routine; using Aitex.Core.RT.SCCore; using MECF.Framework.Common.Equipment; +using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MFCs; using SicModules.PMs.Routines.Base; +using System.Collections.Generic; +using System.Diagnostics; namespace SicModules.PMs.Routines { @@ -32,7 +33,7 @@ namespace SicModules.PMs.Routines SetMFCMode, SetPCMode, - SetM1to16, + SetM1toM17, SetM17M18, SetPC, SetGroupJ, @@ -50,9 +51,11 @@ namespace SicModules.PMs.Routines SetTVCloseMode, SetTvPositionToZero, + WaitPressUpTo950, + SetGasIn2, SetGroupJOpen, - SetM291519to26, + SetM18toM40, SetM291519to26_1, OpenFinal2, @@ -68,7 +71,8 @@ namespace SicModules.PMs.Routines SetTVEnable_1, SetTVEnable_2, - SetTVPressMode, + SetTVPressMode, + SetTVPressMode2, SetTVPressMode1, SetTv1, WaitTv1, @@ -85,7 +89,7 @@ namespace SicModules.PMs.Routines SetPressureUp, SetPressureDown, WaitPressureDown, - WaitPressureUp, + VentPumpOpen, PressureToMax, @@ -104,14 +108,29 @@ namespace SicModules.PMs.Routines CLoseTvvvv, CLoseTV1, CLoseTV2, - SetEPV2_1, - SetEPV2_2, + + FirstWaitPressureUp, + FirstSetDefault_M18toM40, + FirstSet0_M18toM40, + FirstSetEPV2_1, + FirstSetEPV2_2, + FirstSetTv1, + SetEPV2_3, CLoseEPV1, CheckPM1000, WaitPressUpTo1000, WaitPressUpTo1020, + LoopSetDefault_M18toM40, + LoopSetEPV2_1, + LoopWaitPressureUp, + LoopSetEPV2_2, + LoopSetTv1, + LoopSet0_M18toM40, + Loop2Set0_M18toM40, + LoopWaitTv1, + SetPressUpOrDown1, SetPressUpOrDown2, SetMfc28to40Special, @@ -128,7 +147,8 @@ namespace SicModules.PMs.Routines SetV761, SetV103, SetV105, - SetM2toM40, + Set0_M18toM40, + SetM2toM40_1, SetM2TOM40Default, SetM18, @@ -200,6 +220,14 @@ namespace SicModules.PMs.Routines Notify1, Notify2 + + ,FinishSetM1toM17, + FinishSetDefault_M18toM40, + FinishSetTVCloseMode2, + FinishCLoseTV2, + FinishSetEPV2_3, + FinishWaitPressUpTo1020, + FinishSet0_M2M9M15M19_M26 } private ModuleName moduleName; @@ -296,195 +324,118 @@ namespace SicModules.PMs.Routines SetIoValueByGroup((int)RoutineStep.SetV76, IoGroupName.V76, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetV75, IoGroupName.V75, true, _IoValueOpenCloseTimeout); - //旋转停止,加热停止 + //2、 旋转停止,加热停止 SetHeatEnable((int)RoutineStep.HeatEnable, false, _heatTimeOut); SetRotationValve((int)RoutineStep.RotationEnable, _rotationCheckSpeed, false, _rotationCloseTimeout); - //关闭V72,打开V25 + //3、 关闭 V72(GasBox.Vent.Pump) 打开 V25(GasBox.Vent.Bypass)。 SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupV25, IoGroupName.V25, true, _IoValueOpenCloseTimeout); - //打开V103,关闭V105 - SetIoValueByGroup((int)RoutineStep.SetV103, IoGroupName.V103, true, _IoValueOpenCloseTimeout); - SetIoValueByGroup((int)RoutineStep.SetV105, IoGroupName.V105, false, _IoValueOpenCloseTimeout); - //打开V31,打开V32 + //4、 打开 V31(H2.Supply)、 V32(Ar.Supply) 。 SetIoValueByGroup((int)RoutineStep.SetV31, IoGroupName.V31, true, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetV32, IoGroupName.V32, true, _IoValueOpenCloseTimeout); - //打开V35,打开V36 + //5、 打开 V35(H2N2.Line1)、 V36(H2N2.Line2),关闭 B/C/E/F/H/KValves,打开 D/G Valves; 打开 J valve。 SetIoValueByGroup((int)RoutineStep.SetV35V36, IoGroupName.V35V36, true, _IoValueOpenCloseTimeout); - - //关闭B/C/E/F/H/K 阀门 SetIoValueByGroup((int)RoutineStep.SetGroupB, IoGroupName.B, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupC, IoGroupName.C, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupE, IoGroupName.E, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupF, IoGroupName.F, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupH, IoGroupName.H, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupK, IoGroupName.K, false, _IoValueOpenCloseTimeout); - - //打开D/G 阀门 SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout); - - //打开V65 - SetIoValueByGroup((int)RoutineStep.SetV65, IoGroupName.V65, true, _IoValueOpenCloseTimeout); - - //设置MFC和PC的模式 - SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.All); - SetPcModeToNormal((int)RoutineStep.SetPCMode, _lstPcList); - - //打开J阀门 SetIoValueByGroup((int)RoutineStep.SetGroupJ, IoGroupName.J, true, _IoValueOpenCloseTimeout); - //M1-M16设定为default值(M2、M9、M15除外) - SetMfcToDefaultByGroup((int)RoutineStep.SetM1to16, MfcGroupName.M1to16, 0); - SetMfcToDefaultByGroup((int)RoutineStep.SetM17M18, MfcGroupName.M17M18, 0); + //6、 M1-M17 设定为 default 值,所有 PC 设定为 default 值(PC1-PC9), M18-M40(除M30\M34\M39)) MFC 3s ramp 到 default 值。 + SetMfcToDefaultByGroup((int)RoutineStep.SetM1toM17, MfcGroupName.M1toM17, 0); + SetPcModeToNormal((int)RoutineStep.SetPCMode, _lstPcList); + SetMfcToDefaultByGroup((int)RoutineStep.SetM18toM40, MfcGroupName.M18toM40No303439, 3); - //设置所有PC到默认值 - SetPcToDefault((int)RoutineStep.SetPC, _lstPcList); - - //设置M2,M9,M15,M19-M26 3s ramp 到default 值 - SetMfcToDefaultByGroup((int)RoutineStep.SetM291519to26, MfcGroupName.M2toM26, 3); - - //打开EPV2 + //7、打开 EPV2,等待 3s, 打开 TV enable, 压力模式,伺服压力默认设定为 0mbar; SetIoValueByGroup((int)RoutineStep.SetEPV2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); TimeDelay((int)RoutineStep.TimeDelay1, 3); - - //设置蝶阀Enable SetThrottleEnableAndWait((int)RoutineStep.SetTVEnable_1, _IoThrottle, 5); - - //设置蝶阀为压力模式 SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode, _IoThrottle, 5); + SetThrottleToTargetAndNoWait((int)RoutineStep.SetTv1, _IoThrottle, _pumpBasePressure); - //伺服压力设定值到0mbar - SetThrottleToTargetAndNoWait((int)RoutineStep.SetTv1, _IoThrottle, _pumpBasePressure); + //8、当蝶阀设定值 ramp 到 0 后,将 M18-M40(除 M30\M34\M39)) MFC 3s ramp 到 0; + SetMfcByGroup((int)RoutineStep.Set0_M18toM40, MfcGroupName.M18toM40No303439, 0, 3); - //M2、M9、M15、M19-M40 MFC 5s ramp 到0 - SetMfcByGroup((int)RoutineStep.SetM2toM40, MfcGroupName.M2toM42, 0, 5); - SetMfcByGroup((int)RoutineStep.SetM18, MfcGroupName.M18, 0, 5); - - //等待腔体压力Pump到设定值 + //9、等待腔体压力到 Pump Base Pressure(可配置),蝶阀改为位置模式,开度设定 100 % WaitChamberPressDownTo((int)RoutineStep.WaitTv1, _pumpBasePressure, _throttleTimeout); - TimeDelay((int)RoutineStep.TimeDelay2, 3); - - //蝶阀设置为位置模式,开度设置为最大 SetThrottleToPositionMode((int)RoutineStep.SetTVPositionMode, _IoThrottle, _throttleTimeout); TimeDelay((int)RoutineStep.TimeDelay11, 3); SetThrottleSetPosition((int)RoutineStep.SetTVPositionMax, _IoThrottle, 100, _throttleTimeout); - //Final2阀对应的MFC 3s Ramp到Default值 + //10、 M27、 M28、 M29、 M31、 M33、 M40 依次设定 3S ramp 到 default 值 ; SetMfcToDefaultByGroup((int)RoutineStep.SetMfcFinal2, MfcGroupName.Final2, 3); - //打开Final2阀 + //11、 打 开 V87( SHPurge.Final)、 V88( OuterGas.Final)、 V89( InnerGas.Final )、 V90(MiddleGas.Final)、 V91(OpticPurge.Final)、 V97(CarryGas.Final); SetIoValueByGroup((int)RoutineStep.OpenFinal2, IoGroupName.Final2, true, _IoValueOpenCloseTimeout); - //打开V68 + //12、 打开 V68(ChamBody.N2.Purge) SetIoValueByGroup((int)RoutineStep.SetV68, IoGroupName.GasIn1, true, _IoValueOpenCloseTimeout); TimeDelay((int)RoutineStep.TimeDelay3, 1); - //打开V92,V93和V95,再打开V94,在打开V96 + //13、 M32、 M35、 M36、 M37、 M38 依次设定 3S ramp 到 default 值 ; SetMfcToDefaultByGroup((int)RoutineStep.SetM32M35M37, MfcGroupName.M32M35M37, 1); SetMfcToDefaultByGroup((int)RoutineStep.SetM36, MfcGroupName.M36, 1); SetMfcToDefaultByGroup((int)RoutineStep.SetM38, MfcGroupName.M38, 1); - TimeDelay((int)RoutineStep.TimeDelay4, 3); + + //14、打开 V92(GasRingPurge.Final)、 V93(ChamberPurge.Final)、 V95(ConfinementRing.Final); + //等待 950,打开 V94(RotationUpPurge.Final)、 等待 3S,打开 V96(HeaterWF.Final) ; + //蝶阀改为压力模式 SetIoValueByGroup((int)RoutineStep.SetV92V93V95, IoGroupName.V92V93V95, true, _IoValueOpenCloseTimeout); - - //循环开始 - Loop((int)RoutineStep.StartLoop, _pressureLoopCount); - - //M2、M9、M15、M19-M40 MFC 3s ramp 到 default 值 - SetMfcToDefaultByGroup((int)RoutineStep.SetM2TOM40Default, MfcGroupName.M2toM42, 3); - SetMfcToDefaultByGroup((int)RoutineStep.SetM18Default, MfcGroupName.M18, 3); - - //先关蝶阀,再关闭EPV2 - SetThrottleToCloseMode((int)RoutineStep.SetTVCloseMode1, _IoThrottle, 8); - SetThrottleDisable((int)RoutineStep.CLoseTV1, _IoThrottle, 8); - TimeDelay((int)RoutineStep.TimeDelay5, 1); - SetIoValueByGroup((int)RoutineStep.SetEPV2_1, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); - - SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown1, PressureUpOrDown.Uping); - WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.WaitPressureUp, _IoThrottle, _ventBasePressure, _ventTimeout); - - ////设置蝶阀为压力模式 - //SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode1, _IoThrottle, 5); - - ////使用动态流量伺服到300mbar - //SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown1, PressureUpOrDown.Uping); - //SetThrottleToTargetAndNoWait((int)RoutineStep.SetPressureUp, _IoThrottle, _ventBasePressure); - //WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.WaitPressureUp, _IoThrottle, _ventBasePressure, _pmPressureMaxDiff, _pressureMaxTimeout); - - TimeDelay((int)RoutineStep.TimeDelay6, _pressureMaxDelay); - - //打开EPV2 - SetIoValueByGroup((int)RoutineStep.SetEPV2_2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); - TimeDelay((int)RoutineStep.TimeDelay7, 1); - //设置蝶阀Enable - SetThrottleEnableAndWait((int)RoutineStep.SetTVEnable_2, _IoThrottle, 5); - //设置蝶阀为压力模式 + WaitChamberPressUpTo((int)RoutineStep.WaitPressUpTo950, 950, _waitPressureTimeout); + SetIoValueByGroup((int)RoutineStep.SetV94, IoGroupName.V94, true, _IoValueOpenCloseTimeout); + TimeDelay((int)RoutineStep.TimeDelay4, 3); + SetIoValueByGroup((int)RoutineStep.SetV96, IoGroupName.V96, true, _IoValueOpenCloseTimeout); SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode1, _IoThrottle, 5); - //M2、M9、M15、M19-M40 MFC 3s ramp 0 - SetMfcByGroup((int)RoutineStep.SetM2toM40_1, MfcGroupName.M2toM42, 0, 3); - SetMfcByGroup((int)RoutineStep.SetM18_1, MfcGroupName.M18, 0, 3); + //M18-M40(除 M30\M34\M39)) MFC 3s ramp 到 default 值。 + //关闭 EPV2,等待压力达到设定值,压力达到后, 打开 EPV2; M18 - M40(除 M30\M34\M39)) MFC 5s ramp 到 0。 + //伺服压力到设定值 0(可配置) + SetMfcToDefaultByGroup((int)RoutineStep.FirstSetDefault_M18toM40, MfcGroupName.M18toM40No303439, 3); + SetIoValueByGroup((int)RoutineStep.FirstSetEPV2_1, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); + WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.FirstWaitPressureUp, _IoThrottle, _ventBasePressure, _ventTimeout); + SetIoValueByGroup((int)RoutineStep.FirstSetEPV2_2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); + SetMfcByGroup((int)RoutineStep.FirstSet0_M18toM40, MfcGroupName.M18toM40No303439, 0, 5); + SetThrottleToTargetAndNoWait((int)RoutineStep.FirstSetTv1, _IoThrottle, _pumpBasePressure); - //伺服到0mbar - SetThrottlePressureAndWait((int)RoutineStep.SetPressureDown, _IoThrottle, _pumpBasePressure, _pumpTimeout); + //循环开始 + Loop((int)RoutineStep.StartLoop, _pressureLoopCount); - //TimeDelay((int)RoutineStep.TimeDelay8, 3); - - ////蝶阀设置为位置模式,开度设置为最大 - //SetThrottleToPositionMode((int)RoutineStep.SetTVPositionMode_1, _IoThrottle, _throttleTimeout); - //SetThrottleSetPositionNoWait((int)RoutineStep.SetTVPositionMax_1, _IoThrottle, 100, _throttleTimeout); - - //TimeDelay((int)RoutineStep.TimeDelay9, _pressureMinDelay); + //M18 - M40(除 M30\M34\M39)) MFC 3s ramp 到 default 值。 + //关闭 EPV2,等待压力达到设定值,压力达到后,打开 EPV2; + //M18 - M40(除 M30\M34\M39)) MFC 5s ramp 到 0。 + //伺服压力到设定值 0(可配置) + //M18 - M40(除 M30\M34\M39)) MFC5s ramp 到 0。 + //等待压力到达 0(可配置) + SetMfcToDefaultByGroup((int)RoutineStep.LoopSetDefault_M18toM40, MfcGroupName.M18toM40No303439, 3); + SetIoValueByGroup((int)RoutineStep.LoopSetEPV2_1, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); + WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.LoopWaitPressureUp, _IoThrottle, _ventBasePressure, _ventTimeout); + SetIoValueByGroup((int)RoutineStep.LoopSetEPV2_2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); + SetMfcByGroup((int)RoutineStep.LoopSet0_M18toM40, MfcGroupName.M18toM40No303439, 0, 5); + SetThrottleToTargetAndNoWait((int)RoutineStep.LoopSetTv1, _IoThrottle, _pumpBasePressure); + SetMfcByGroup((int)RoutineStep.Loop2Set0_M18toM40, MfcGroupName.M18toM40No303439, 0, 5); + WaitChamberPressDownTo((int)RoutineStep.LoopWaitTv1, _pumpBasePressure, _pumpTimeout); EndLoop((int)RoutineStep.EndLoop); - + //设置 M1-M17 3s ramp 到 default; M18 - M40(除 M30\M34\M39)) MFC 3s ramp到 default 值。 + //关闭蝶阀,再关闭 EPV2; 等待压力到达 1020。 //M2,M9,M15,M19-M26 3s ramp 到0 - SetMfcToDefaultByGroup((int)RoutineStep.SetM291519to26_1, MfcGroupName.M2toM26, 3); - SetMfcToDefaultByGroup((int)RoutineStep.SetM18_2, MfcGroupName.M18, 3); - - //M27-M40 MFC 3s ramp 到 default 值 - SetMfcToDefaultByGroup((int)RoutineStep.SetMfc27to40Default, MfcGroupName.M27toM40, 3); - - //关闭J阀门 - SetIoValueByGroup((int)RoutineStep.CloseGroupJ, IoGroupName.J, true, _IoValueOpenCloseTimeout); - - //关闭先关蝶阀,再EPV2 - SetThrottleToCloseMode((int)RoutineStep.SetTVCloseMode2, _IoThrottle, 8); - SetThrottleDisable((int)RoutineStep.CLoseTV2, _IoThrottle, 8); + SetMfcToDefaultByGroup((int)RoutineStep.FinishSetM1toM17, MfcGroupName.M1toM17, 3); + SetMfcToDefaultByGroup((int)RoutineStep.FinishSetDefault_M18toM40, MfcGroupName.M18toM40No303439, 3); + SetThrottleToCloseMode((int)RoutineStep.FinishSetTVCloseMode2, _IoThrottle, 8); + SetThrottleDisable((int)RoutineStep.FinishCLoseTV2, _IoThrottle, 8); TimeDelay((int)RoutineStep.TimeDelay10, 1); - SetIoValueByGroup((int)RoutineStep.SetEPV2_3, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); - - //等待反应腔压力到达950 - NotifyInfo((int)RoutineStep.Notify1, $"Wait pm pressure to 950 mbar!"); - WaitChamberPressUpTo((int)RoutineStep.WaitPressUpTo1000, 950, _waitPressureTimeout); - - if (_needFinalValveOpen) - { - //打开Final1阀 - SetIoValueByGroup((int)RoutineStep.IsOpenFinal1, IoGroupName.Final1, true, _IoValueOpenCloseTimeout); - - //打开Final2阀 - SetIoValueByGroup((int)RoutineStep.IsOpenFinal2, IoGroupName.Final2, true, _IoValueOpenCloseTimeout); - - SetMfcToDefaultByGroup((int)RoutineStep.SetM36_1, MfcGroupName.M36, 3); - - SetMfcToDefaultByGroup((int)RoutineStep.SetM38_1, MfcGroupName.M38, 3); - - SetIoValueByGroup((int)RoutineStep.SetV111_1, IoGroupName.V111, true, _IoValueOpenCloseTimeout); - } - else - { - //关闭Final1阀 - SetIoValueByGroup((int)RoutineStep.IsCloseFinal1, IoGroupName.Final1, false, _IoValueOpenCloseTimeout); - - //关闭Final2阀 - SetIoValueByGroup((int)RoutineStep.IsCloseFinal2, IoGroupName.Final2, false, _IoValueOpenCloseTimeout); - - SetIoValueByGroup((int)RoutineStep.SetV111_2, IoGroupName.V111, false, _IoValueOpenCloseTimeout); - } + SetIoValueByGroup((int)RoutineStep.FinishSetEPV2_3, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); + NotifyInfo((int)RoutineStep.Notify1, $"Wait pm pressure to 1020 mbar!"); + WaitChamberPressUpTo((int)RoutineStep.FinishWaitPressUpTo1020, 1020, _waitPressureTimeout); + SetMfcByGroup((int)RoutineStep.FinishSet0_M2M9M15M19_M26, MfcGroupName.M2M9M15M19_M26, 0, 3); } catch (RoutineBreakException) { diff --git a/App/Modules/SicModules/PMs/Routines/PMToIsolationRoutine.cs b/App/Modules/SicModules/PMs/Routines/PMToIsolationRoutine.cs index 5d4e493..5ebe1a8 100644 --- a/App/Modules/SicModules/PMs/Routines/PMToIsolationRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMToIsolationRoutine.cs @@ -1,9 +1,10 @@ -using System.Collections.Generic; -using Aitex.Core.RT.Device; +using Aitex.Core.RT.Device; using Aitex.Core.RT.Device.Devices; using Aitex.Core.RT.Routine; using MECF.Framework.Common.Equipment; +using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.MFCs; using SicModules.PMs.Routines.Base; +using System.Collections.Generic; namespace SicModules.PMs.Routines { @@ -25,8 +26,8 @@ namespace SicModules.PMs.Routines SetGroupG, SetGroupK, - SetM1to16, - SetM2toM40, + SetM1to17, + SetM18toM40, SetM17M18, SetPC, SetGroupI, //V87-96 @@ -125,67 +126,46 @@ namespace SicModules.PMs.Routines SetIoValueByGroup((int)RoutineStep.SetV76, IoGroupName.V76, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetV75, IoGroupName.V75, true, _IoValueOpenCloseTimeout); - //旋转停止,加热停止 + //2、 旋转停止,加热停止 SetHeatEnable((int)RoutineStep.HeatEnable, false, _heatTimeOut); SetRotationValve((int)RoutineStep.RotationEnable, 0, false, _rotationCloseTimeout); - - //关闭V72 + + //3、 关闭 V72(GasBox.Vent.Pump) 。 SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false, _IoValueOpenCloseTimeout); - //打开V103,关闭V105 - SetIoValueByGroup((int)RoutineStep.SetV103, IoGroupName.V103, true, _IoValueOpenCloseTimeout); - SetIoValueByGroup((int)RoutineStep.SetV105, IoGroupName.V105, false, _IoValueOpenCloseTimeout); - //打开V31,打开V32 + //4、 打开 V31(H2.Supply)、 V32(N2Supply)。 SetIoValueByGroup((int)RoutineStep.SetV31, IoGroupName.V31, true, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetV32, IoGroupName.V32, true, _IoValueOpenCloseTimeout); - //打开V35,打开V36 + //5、 打开 V35(H2N2.Line1)、V36(H2N2.Line2),关闭 B/ C / E / F / H / KValves,打开D / G Valves。关闭 V68(ChamBody.Ar.Purge) SetIoValueByGroup((int)RoutineStep.SetV35V36, IoGroupName.V35V36, true, _IoValueOpenCloseTimeout); - - //关闭B/C/E/F/H/K 阀门 SetIoValueByGroup((int)RoutineStep.SetGroupB, IoGroupName.B, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupC, IoGroupName.C, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupE, IoGroupName.E, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupF, IoGroupName.F, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupH, IoGroupName.H, false, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupK, IoGroupName.K, false, _IoValueOpenCloseTimeout); - - //打开V65 - SetIoValueByGroup((int)RoutineStep.SetV65, IoGroupName.V65, true, _IoValueOpenCloseTimeout); - - //打开D/G 阀门 SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout); SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout); - - //关闭V68 SetIoValueByGroup((int)RoutineStep.CloseV68, IoGroupName.V68, false, _IoValueOpenCloseTimeout); - //设置MFC和PC的模式 - SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.All); - SetPcModeToNormal((int)RoutineStep.SetPCMode, _lstPcList); - - //M1-M16设定为default值(M2、M9、M15除外) - SetMfcToDefaultByGroup((int)RoutineStep.SetM1to16, MfcGroupName.M1to16, 0); - - //设置所有PC到默认值 + //6、 1 - M17 设定为 default 值,所有 PC 设定为 default 值(PC1 - PC9), + SetMfcToDefaultByGroup((int)RoutineStep.SetM1to17, MfcGroupName.M1toM17, 0); SetPcToDefault((int)RoutineStep.SetPC, _lstPcList); - //M2、M9、M15、M19-M40 MFC 5s ramp到0 - SetMfcByGroup((int)RoutineStep.SetM2toM40, MfcGroupName.M2toM42, 0, 5); - SetMfcByGroup((int)RoutineStep.SetM17M18, MfcGroupName.M17M18, 0, 5); + //7、 M18 - M40(除 M30\M34\M39)) MFC 5s ramp 到 0。 + SetMfcByGroup((int)RoutineStep.SetM18toM40, MfcGroupName.M18toM40No303439, 0, 5); - //关闭Final1阀 + //8、 依次关闭 Final valves; + //先关闭 V93(ChamberPurge.Final)、 V94(RotationUpPurge.Final)、 V95(ConfinementRing.Final)、 V96(HeaterWF.Final); + //再关闭 V87(SHPurge.Final)、 V88(OuterGas.Final)、 V89(InnerGas.Final)、 V90(MiddleGas.Final)、 V91(OpticPurge.Final)、 V92(GasRingPurge.Final)、 V97(CarryGas.Final); SetIoValueByGroup((int)RoutineStep.CloseFinal1, IoGroupName.Final1, false, _IoValueOpenCloseTimeout); - - //关闭Final2 SetIoValueByGroup((int)RoutineStep.CloseFinal2, IoGroupName.Final2, false, _IoValueOpenCloseTimeout); - //关闭蝶阀 + //9、 关闭蝶阀,再关闭 EPV2 SetThrottleToCloseMode((int)RoutineStep.SetTVCloseMode, _IoThrottle, 8); SetThrottleDisable((int)RoutineStep.SetTvPositionToZero, _IoThrottle, 8); TimeDelay((int)RoutineStep.TimeDelay1, 1); - - //关闭EPV2 SetIoValueByGroup((int)RoutineStep.CloseEPV2, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); } catch (RoutineBreakException) diff --git a/App/Modules/SicModules/PMs/Routines/PMToProcessIdleRoutine.cs b/App/Modules/SicModules/PMs/Routines/PMToProcessIdleRoutine.cs index 5958dc3..f6ead20 100644 --- a/App/Modules/SicModules/PMs/Routines/PMToProcessIdleRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMToProcessIdleRoutine.cs @@ -312,7 +312,7 @@ namespace SicModules.PMs.Routines SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout); //5、 M1-M17 设定为 default 值,所有 PC 设定为 default 值(PC1-PC9)。 - SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.M1to17); + SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.M1toM17); SetPcToDefault((int)RoutineStep.SetPC, _lstPcList); //M1-M16设定为default值(M2、M9、M15除外) @@ -320,7 +320,7 @@ namespace SicModules.PMs.Routines SetMfcToDefaultByGroup((int)RoutineStep.SetM17M18, MfcGroupName.M17M18, 0); //6、 M18-M40(除 M30\M34\M39) MFC 5s ramp 到 0。 - SetMfcByGroup((int)RoutineStep.SetM18toM40, MfcGroupName.M18to40No303439, 0, 5); + SetMfcByGroup((int)RoutineStep.SetM18toM40, MfcGroupName.M18toM40No303439, 0, 5); //7、 打开 EPV2。 SetIoValueByGroup((int)RoutineStep.SetEPV2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); @@ -361,7 +361,6 @@ namespace SicModules.PMs.Routines SetIoValueByGroup((int)RoutineStep.SetV72, IoGroupName.VentPump, true, _IoValueOpenCloseTimeout); TimeDelay((int)RoutineStep.TimeDelay5, 1); SetIoValueByGroup((int)RoutineStep.SetV25, IoGroupName.V25, false, _IoValueOpenCloseTimeout); - SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown1, PressureUpOrDown.Dowing); SetThrottleToTargetAndNoWait((int)RoutineStep.SetPressureDown, _IoThrottle, _throttleFinalPressure); WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.SetTVto300, _IoThrottle, _throttleFinalPressure, _pmPressureMaxDiff, _throttleTimeout); diff --git a/App/Modules/SicModules/PMs/Routines/PMVentRoutine.cs b/App/Modules/SicModules/PMs/Routines/PMVentRoutine.cs index fa5dca3..16dd594 100644 --- a/App/Modules/SicModules/PMs/Routines/PMVentRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMVentRoutine.cs @@ -193,9 +193,9 @@ namespace SicModules.PMs.Routines SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout); //6、 M1-M17 设定为 default 值, 所有 PC 设定为 default 值(PC1-PC9) ,M18 - M40(除 M30\M34\M39) MFC 5s ramp 到 0。 - SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.M1to17); + SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.M1toM17); SetPcToDefault((int)RoutineStep.SetPC, _lstPcList); - SetMfcToDefaultByGroup((int)RoutineStep.SetM18toM40, MfcGroupName.M18to40No303439, 5); + SetMfcToDefaultByGroup((int)RoutineStep.SetM18toM40, MfcGroupName.M18toM40No303439, 5); //7、 关闭蝶阀, 再关闭 EPV2 SetThrottleToCloseMode((int)RoutineStep.SetTVCloseMode, _IoThrottle, 8);