From 84c34147d34a29e9c5245ab5b5e536b22ff51643 Mon Sep 17 00:00:00 2001 From: "SIC1016\\caipeilun" <905168240@qq.com> Date: Fri, 21 Aug 2026 09:24:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9pmroutine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SicModules/Config/PM/PM1/interlockPM1.xml | 2 +- App/Modules/SicModules/PMs/PMModule.cs | 14 +--- App/Modules/SicModules/PMs/PMModuleDevice.cs | 10 +-- .../PMs/Routines/Base/PMBaseRoutine.cs | 10 +-- .../SicModules/PMs/Routines/PMCleanRoutine.cs | 60 ++++++++++---- .../PMs/Routines/PMExchangeMoRoutine.cs | 6 +- .../PMs/Routines/PMLeakCheckRoutine.cs | 36 +++++--- .../SicModules/PMs/Routines/PMPurgeRoutine.cs | 82 ++++++++++++++----- App/SicRT/Config/System.sccfg | 2 +- .../PMs/ExchangeMoSelectDialogView.xaml | 47 +++++++++++ .../PMs/ExchangeMoSelectDialogView.xaml.cs | 59 +++++++++++++ .../Models/PMs/PMMfcDynamicFlowViewModel.cs | 2 +- App/SicUI/Models/PMs/PMOperationView.xaml | 5 +- App/SicUI/Models/PMs/PMOperationViewModel.cs | 23 ++++-- App/SicUI/SicUI.csproj | 7 ++ 15 files changed, 280 insertions(+), 85 deletions(-) create mode 100644 App/SicUI/Models/PMs/ExchangeMoSelectDialogView.xaml create mode 100644 App/SicUI/Models/PMs/ExchangeMoSelectDialogView.xaml.cs diff --git a/App/Modules/SicModules/Config/PM/PM1/interlockPM1.xml b/App/Modules/SicModules/Config/PM/PM1/interlockPM1.xml index c005140..60992c6 100644 --- a/App/Modules/SicModules/Config/PM/PM1/interlockPM1.xml +++ b/App/Modules/SicModules/Config/PM/PM1/interlockPM1.xml @@ -19,7 +19,7 @@ - + diff --git a/App/Modules/SicModules/PMs/PMModule.cs b/App/Modules/SicModules/PMs/PMModule.cs index 55bb229..06b8cf5 100644 --- a/App/Modules/SicModules/PMs/PMModule.cs +++ b/App/Modules/SicModules/PMs/PMModule.cs @@ -1130,18 +1130,8 @@ namespace SicModules.PMs private bool FsmStartExchangeMO(object[] param) { Result ret; - if (SC.GetValue($"PM.IsExchangeMO{param[0]}Routine")) - { - string RoutineFileName = SC.GetStringValue($"PM.{Module}.ExchangeMO{param[0]}FileName"); - - _pMMacroRoutine.Init(RoutineFileName, RoutineType.ExchangeMORoutine); - ret = StartRoutine(_pMMacroRoutine); - } - else - { - _changeMoRoutine.Init(param[0].ToString()); - ret = StartRoutine(_changeMoRoutine); - } + _changeMoRoutine.Init(param[0].ToString()); + ret = StartRoutine(_changeMoRoutine); if (ret == Result.FAIL || ret == Result.DONE) return false; diff --git a/App/Modules/SicModules/PMs/PMModuleDevice.cs b/App/Modules/SicModules/PMs/PMModuleDevice.cs index e7642b0..862b74f 100644 --- a/App/Modules/SicModules/PMs/PMModuleDevice.cs +++ b/App/Modules/SicModules/PMs/PMModuleDevice.cs @@ -88,7 +88,7 @@ namespace SicModules.PMs M19toM33, M32toM38, M36, - M28293140, + M27M28293140, M18toM26, M19toM26, All, @@ -1031,7 +1031,7 @@ namespace SicModules.PMs } else if (eGroupName == IoGroupName.Final2) { - lst = new List() { "V87", "V88", "V89", "V90", "V91", "V97" }; + lst = new List() { "V87", "V88", "V89", "V90", "V91", "V92", "V97" }; } else if (eGroupName == IoGroupName.GasIn1) { @@ -1151,7 +1151,7 @@ namespace SicModules.PMs } else if (mGroupName == MfcGroupName.M1toM17) { - lst = new List() { 1, 3, 4, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17 }; + lst = new List() { 1, 3, 4, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17 }; } else if (mGroupName == MfcGroupName.M18toM40No303439) { @@ -1209,9 +1209,9 @@ namespace SicModules.PMs { lst = new List() { 27, 28, 29, 31, 33, 32, 35, 36, 37, 38, 40 }; } - else if (mGroupName == MfcGroupName.M28293140) + else if (mGroupName == MfcGroupName.M27M28293140) { - lst = new List() { 28, 29, 31, 40 }; + lst = new List() { 27 ,28, 29, 31, 40 }; } else if (mGroupName == MfcGroupName.M19toM33) { diff --git a/App/Modules/SicModules/PMs/Routines/Base/PMBaseRoutine.cs b/App/Modules/SicModules/PMs/Routines/Base/PMBaseRoutine.cs index d70cc14..379673e 100644 --- a/App/Modules/SicModules/PMs/Routines/Base/PMBaseRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/Base/PMBaseRoutine.cs @@ -1288,18 +1288,18 @@ namespace SicModules.PMs.Routines.Base int cIntLv = (int)level; if (cIntLv < 100) { - Notify($"Set MFC28,29,31,40 to pressureLevel [20-100]"); + Notify($"Set MFC27,28,29,31,40 to pressureLevel [20-100]"); } else if (cIntLv >= 950) { - Notify($"Set MFC28,29,31,40 to pressureLevel [950]"); + Notify($"Set MFC27,28,29,31,40 to pressureLevel [950]"); } else { - Notify($"Set MFC28,29,31,40 to pressureLevel [{cIntLv - 50},{cIntLv + 50})"); + Notify($"Set MFC27,28,29,31,40 to pressureLevel [{cIntLv - 50},{cIntLv + 50})"); } _lastPressureLevel = level; - _pm.SetMfcRampByGroupAndPressure(MfcGroupName.M28293140, Convert.ToDouble((int)level)); + _pm.SetMfcRampByGroupAndPressure(MfcGroupName.M27M28293140, Convert.ToDouble((int)level)); } } } @@ -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 fa23bbe..c65751e 100644 --- a/App/Modules/SicModules/PMs/Routines/PMCleanRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMCleanRoutine.cs @@ -92,6 +92,8 @@ namespace SicModules.PMs.Routines SetV75, SetTVto300, + SetMfcFinal2gongyi, + CheckPM1000, SetMfc28to40Special, WaitPressUpTo1000, @@ -181,19 +183,25 @@ namespace SicModules.PMs.Routines WaitPressUpTo950, FirstWaitPressureUp, - FirstSetDefault_M18toM40, + FirstSetDefault_M18toM40, FirstSetTvPositionToZero, FirstSetEPV2, FirstSetTVEnable_1, FirstSetTVPressMode, + FirstSetTVCloseMode, FirstSet0_M18toM40, FirstSetEPV2_1, FirstSetEPV2_2, FirstSetTv1, + FirstWaitTv1, LoopSetDefault_M18toM40, - LoopSetEPV2_1, + LoopSetTVCloseMode, + LoopSetTvPositionToZero, + LoopSetEPV2, LoopWaitPressureUp, LoopSetEPV2_2, LoopSetTv1, LoopSet0_M18toM40, Loop2Set0_M18toM40, + LoopSetTVEnable_1, + LoopSetTVPressMode, LoopWaitTv1, FinishSetM1toM17, @@ -348,6 +356,7 @@ namespace SicModules.PMs.Routines //10、 M27、 M28、 M29、 M31、 M33、 M40 依次设定 3S ramp 到 default 值 ; SetMfcToDefaultByGroup((int)RoutineStep.SetMfcFinal2, MfcGroupName.Final2, 3); + SetMfcToDefaultByGroup((int)RoutineStep.SetMfcFinal2gongyi, MfcGroupName.M18toM26, 3); //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); @@ -362,41 +371,64 @@ namespace SicModules.PMs.Routines 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) ; - //蝶阀改为压力模式 + //关闭蝶阀, 再关闭 EPV2,等待 950,打开 V94(RotationUpPurge.Final)、 等待 3S,打开 V96(HeaterWF.Final) ; + //打开蝶阀,打开EPV2,蝶阀改为压力模式 SetIoValueByGroup((int)RoutineStep.SetV92V93V95, IoGroupName.V92V93V95, true, _IoValueOpenCloseTimeout); - WaitChamberPressUpTo((int)RoutineStep.WaitPressUpTo950, 950, 600); + SetThrottleToCloseMode((int)RoutineStep.SetTVCloseMode, _IoThrottle, 8); + SetThrottleDisable((int)RoutineStep.SetTvPositionToZero, _IoThrottle, 8); + SetIoValueByGroup((int)RoutineStep.SetEPV2_1, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); + WaitPMPressureAndSetMfcSpecial((int)RoutineStep.WaitPmPressureUp1, 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); + //SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode1, _IoThrottle, 5); //M18 - M40(除 M30\M34\M39)) MFC 3s ramp 到 default 值。 - //关闭 EPV2,等待压力达到设定值,压力达到后,打开 EPV2; + //关闭蝶阀, 再关闭 EPV2,等待压力达到设定值,压力达到后,打开 EPV2,打开 TV enable, 压力模式,伺服压力默认设定为 0mbar; //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); + + SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown2, PressureUpOrDown.Uping); + SetThrottleToCloseMode((int)RoutineStep.FirstSetTVCloseMode, _IoThrottle, 8); + SetThrottleDisable((int)RoutineStep.FirstSetTvPositionToZero, _IoThrottle, 8); + SetIoValueByGroup((int)RoutineStep.FirstSetEPV2, 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); + + SetThrottleEnableAndWait((int)RoutineStep.FirstSetTVEnable_1, _IoThrottle, 5); + SetThrottleToPressModeAndWait((int)RoutineStep.FirstSetTVPressMode, _IoThrottle, 5); SetThrottleToTargetAndNoWait((int)RoutineStep.FirstSetTv1, _IoThrottle, _pressureMin); + + SetMfcByGroup((int)RoutineStep.FirstSet0_M18toM40, MfcGroupName.M18toM40No303439, 0, 5); + WaitChamberPressDownTo((int)RoutineStep.FirstWaitTv1, _pressureMin, _pumpTimeout); //循环开始 Loop((int)RoutineStep.StartLoop, _pressureLoopCount); //M18 - M40(除 M30\M34\M39)) MFC 3s ramp 到 default 值。 - //关闭 EPV2,等待压力达到设定值,压力达到后,打开 EPV2; + //关闭蝶阀, 再关闭 EPV2,等待压力达到设定值,压力达到后,打开 EPV2 //M18 - M40(除 M30\M34\M39)) MFC 5s ramp 到 0。 - //伺服压力到设定值 0(可配置) - //M18 - M40(除 M30\M34\M39)) MFC5s ramp 到 0。 + //打开 TV enable, 压力模式,伺服压力默认设定为 0mbar; //等待压力到达 0(可配置) SetMfcToDefaultByGroup((int)RoutineStep.LoopSetDefault_M18toM40, MfcGroupName.M18toM40No303439, 3); - SetIoValueByGroup((int)RoutineStep.LoopSetEPV2_1, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); + + SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown2, PressureUpOrDown.Uping); + SetThrottleToCloseMode((int)RoutineStep.LoopSetTVCloseMode, _IoThrottle, 8); + SetThrottleDisable((int)RoutineStep.LoopSetTvPositionToZero, _IoThrottle, 8); + SetIoValueByGroup((int)RoutineStep.LoopSetEPV2, 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); + + SetThrottleEnableAndWait((int)RoutineStep.LoopSetTVEnable_1, _IoThrottle, 5); + SetThrottleToPressModeAndWait((int)RoutineStep.LoopSetTVPressMode, _IoThrottle, 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); diff --git a/App/Modules/SicModules/PMs/Routines/PMExchangeMoRoutine.cs b/App/Modules/SicModules/PMs/Routines/PMExchangeMoRoutine.cs index 7fb8188..724f3fe 100644 --- a/App/Modules/SicModules/PMs/Routines/PMExchangeMoRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMExchangeMoRoutine.cs @@ -129,7 +129,7 @@ namespace SicModules.PMs.Routines _lstGroup2 = new List() { "V50", "V50s" }; _lstGroup3 = new List() { "V48", "V48s" }; break; - case "WCO6": + case "W(CO)6": mfc1 = 7; mfc2 = 8; pc = 2; @@ -138,7 +138,7 @@ namespace SicModules.PMs.Routines _lstGroup2 = new List() { "V46", "V46s" }; _lstGroup3 = new List() { "V43", "V43s" }; break; - case "MORE": + case "MOReserved": mfc1 = 16; mfc2 = 17; pc = 9; @@ -147,7 +147,7 @@ namespace SicModules.PMs.Routines _lstGroup2 = new List() { "V23", "V23s" }; _lstGroup3 = new List() { "V21", "V21s" }; break; - case "MOCO6": + case "MO(CO)6": mfc1 = 9; mfc2 = 10; pc = 8; diff --git a/App/Modules/SicModules/PMs/Routines/PMLeakCheckRoutine.cs b/App/Modules/SicModules/PMs/Routines/PMLeakCheckRoutine.cs index c905b19..74d6658 100644 --- a/App/Modules/SicModules/PMs/Routines/PMLeakCheckRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMLeakCheckRoutine.cs @@ -192,7 +192,8 @@ namespace SicModules.PMs.Routines LoopSetTv1, LoopSet0M18toM40, LoopSetM18Default, - LoopWaitTv1 + LoopWaitTv1, + LoopSetDefault_M18toM40, LoopSetTVCloseMode, LoopSetTvPositionToZero, LoopSetEPV2, LoopWaitPressureUp, LoopSetEPV2_2, LoopSet0_M18toM40, LoopSetTVEnable_1, LoopSetTVPressMode } enum LeakCheckType @@ -356,22 +357,37 @@ namespace SicModules.PMs.Routines TimeDelay((int)RoutineStep.TimeDelay11, 3); SetThrottleSetPosition((int)RoutineStep.SetTVPositionMax, _IoThrottle, 100, _throttleTimeout); TimeDelay((int)RoutineStep.TimeDelay9, 3); - + //循环开始 Loop((int)RoutineStep.StartLoop, _pressureLoopCount); - //蝶阀改为压力模式 + //M18 - M40(除 M30\M34\M39)) MFC 3s ramp 到 default 值。 - //压力 servo 到 300(可配置) - //压力达到后, M18 - M40(除 M30\M34\M39)) MFC 5s ramp 到 0。 + //关闭蝶阀, 再关闭 EPV2,等待压力达到设定值,压力达到后,打开 EPV2 + //M18 - M40(除 M30\M34\M39)) MFC 5s ramp 到 0。 + //打开 TV enable, 压力模式,伺服压力默认设定为 0mbar; //等待压力到达 0(可配置) - SetThrottleToPressModeAndWait((int)RoutineStep.LoopSetTVPressMode1, _IoThrottle, 5); - SetMfcToDefaultByGroup((int)RoutineStep.LoopSetM18toM40, MfcGroupName.M18toM40No303439, 3); + SetMfcToDefaultByGroup((int)RoutineStep.LoopSetDefault_M18toM40, MfcGroupName.M18toM40No303439, 3); + + SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown2, PressureUpOrDown.Uping); + SetThrottleToCloseMode((int)RoutineStep.LoopSetTVCloseMode, _IoThrottle, 8); + SetThrottleDisable((int)RoutineStep.LoopSetTvPositionToZero, _IoThrottle, 8); + SetIoValueByGroup((int)RoutineStep.LoopSetEPV2, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); + + WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.LoopWaitPressureUp, _IoThrottle, _pressureMax, _pressureMaxTimeout); + + SetIoValueByGroup((int)RoutineStep.LoopSetEPV2_2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); + + SetMfcByGroup((int)RoutineStep.LoopSet0_M18toM40, MfcGroupName.M18toM40No303439, 0, 5); + + SetThrottleEnableAndWait((int)RoutineStep.LoopSetTVEnable_1, _IoThrottle, 5); + SetThrottleToPressModeAndWait((int)RoutineStep.LoopSetTVPressMode, _IoThrottle, 5); 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); + + WaitChamberPressDownTo((int)RoutineStep.LoopWaitTv1, _pressureMin, _pressureMinTimeout); EndLoop((int)RoutineStep.EndLoop); + + //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); diff --git a/App/Modules/SicModules/PMs/Routines/PMPurgeRoutine.cs b/App/Modules/SicModules/PMs/Routines/PMPurgeRoutine.cs index 21ac7f9..dc779cc 100644 --- a/App/Modules/SicModules/PMs/Routines/PMPurgeRoutine.cs +++ b/App/Modules/SicModules/PMs/Routines/PMPurgeRoutine.cs @@ -67,6 +67,7 @@ namespace SicModules.PMs.Routines SetEPV1, SetEPV2, + SetEPV2_1, SetTvMode, SetTVEnable_1, @@ -115,6 +116,12 @@ namespace SicModules.PMs.Routines FirstSetEPV2_1, FirstSetEPV2_2, FirstSetTv1, + FirstSetTVCloseMode, + FirstSetTvPositionToZero, + FirstSetEPV2, + FirstSetTVEnable_1, + FirstSetTVPressMode, + FirstWaitTv1, SetEPV2_3, CLoseEPV1, @@ -227,7 +234,13 @@ namespace SicModules.PMs.Routines FinishCLoseTV2, FinishSetEPV2_3, FinishWaitPressUpTo1020, - FinishSet0_M2M9M15M19_M26 + FinishSet0_M2M9M15M19_M26, + LoopSetTVCloseMode, + LoopSetTvPositionToZero, + LoopSetTVEnable_1, + LoopSetTVPressMode, + + SetMfcFinal2gongyi } private ModuleName moduleName; @@ -372,6 +385,7 @@ namespace SicModules.PMs.Routines //10、 M27、 M28、 M29、 M31、 M33、 M40 依次设定 3S ramp 到 default 值 ; SetMfcToDefaultByGroup((int)RoutineStep.SetMfcFinal2, MfcGroupName.Final2, 3); + SetMfcToDefaultByGroup((int)RoutineStep.SetMfcFinal2gongyi, MfcGroupName.M18toM26, 3); //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); @@ -384,42 +398,66 @@ namespace SicModules.PMs.Routines SetMfcToDefaultByGroup((int)RoutineStep.SetM32M35M37, MfcGroupName.M32M35M37, 1); SetMfcToDefaultByGroup((int)RoutineStep.SetM36, MfcGroupName.M36, 1); SetMfcToDefaultByGroup((int)RoutineStep.SetM38, MfcGroupName.M38, 1); - + //14、打开 V92(GasRingPurge.Final)、 V93(ChamberPurge.Final)、 V95(ConfinementRing.Final); - //等待 950,打开 V94(RotationUpPurge.Final)、 等待 3S,打开 V96(HeaterWF.Final) ; - //蝶阀改为压力模式 + //关闭蝶阀, 再关闭 EPV2,等待 950,打开 V94(RotationUpPurge.Final)、 等待 3S,打开 V96(HeaterWF.Final) ; SetIoValueByGroup((int)RoutineStep.SetV92V93V95, IoGroupName.V92V93V95, true, _IoValueOpenCloseTimeout); - WaitChamberPressUpTo((int)RoutineStep.WaitPressUpTo950, 950, _waitPressureTimeout); + + SetThrottleToCloseMode((int)RoutineStep.SetTVCloseMode, _IoThrottle, 8); + SetThrottleDisable((int)RoutineStep.SetTvPositionToZero, _IoThrottle, 8); + SetIoValueByGroup((int)RoutineStep.SetEPV2_1, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); + + WaitPMPressureAndSetMfcSpecial((int)RoutineStep.WaitPmPressureUp1, 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, _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); - - //循环开始 - Loop((int)RoutineStep.StartLoop, _pressureLoopCount); - - //M18 - M40(除 M30\M34\M39)) MFC 3s ramp 到 default 值。 - //关闭 EPV2,等待压力达到设定值,压力达到后,打开 EPV2; + //关闭蝶阀, 再关闭 EPV2,等待压力达到设定值,压力达到后,打开 EPV2,打开 TV enable, 压力模式,伺服压力默认设定为 0mbar; //M18 - M40(除 M30\M34\M39)) MFC 5s ramp 到 0。 //伺服压力到设定值 0(可配置) + SetMfcToDefaultByGroup((int)RoutineStep.FirstSetDefault_M18toM40, MfcGroupName.M18toM40No303439, 3); + + SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown2, PressureUpOrDown.Uping); + SetThrottleToCloseMode((int)RoutineStep.FirstSetTVCloseMode, _IoThrottle, 8); + SetThrottleDisable((int)RoutineStep.FirstSetTvPositionToZero, _IoThrottle, 8); + SetIoValueByGroup((int)RoutineStep.FirstSetEPV2, IoGroupName.EPV2, false, _IoValueOpenCloseTimeout); + + WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.FirstWaitPressureUp, _IoThrottle, _ventBasePressure, _ventTimeout); + SetIoValueByGroup((int)RoutineStep.FirstSetEPV2_2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout); + + + SetThrottleEnableAndWait((int)RoutineStep.FirstSetTVEnable_1, _IoThrottle, 5); + SetThrottleToPressModeAndWait((int)RoutineStep.FirstSetTVPressMode, _IoThrottle, 5); + SetThrottleToTargetAndNoWait((int)RoutineStep.FirstSetTv1, _IoThrottle, _pumpBasePressure); + + SetMfcByGroup((int)RoutineStep.FirstSet0_M18toM40, MfcGroupName.M18toM40No303439, 0, 5); + + WaitChamberPressDownTo((int)RoutineStep.FirstWaitTv1, _pumpBasePressure, _pumpTimeout); + + //循环开始 + Loop((int)RoutineStep.StartLoop, _pressureLoopCount); + + //M18 - M40(除 M30\M34\M39)) MFC 3s ramp 到 default 值。 + //关闭蝶阀, 再关闭 EPV2,等待压力达到设定值,压力达到后,打开 EPV2 + //M18 - M40(除 M30\M34\M39)) MFC 5s ramp 到 0。 + //打开 TV enable, 压力模式,伺服压力默认设定为 0mbar; //M18 - M40(除 M30\M34\M39)) MFC5s ramp 到 0。 //等待压力到达 0(可配置) SetMfcToDefaultByGroup((int)RoutineStep.LoopSetDefault_M18toM40, MfcGroupName.M18toM40No303439, 3); + + SetThrottleToCloseMode((int)RoutineStep.LoopSetTVCloseMode, _IoThrottle, 8); + SetThrottleDisable((int)RoutineStep.LoopSetTvPositionToZero, _IoThrottle, 8); 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); + + SetThrottleEnableAndWait((int)RoutineStep.LoopSetTVEnable_1, _IoThrottle, 5); + SetThrottleToPressModeAndWait((int)RoutineStep.LoopSetTVPressMode, _IoThrottle, 5); SetThrottleToTargetAndNoWait((int)RoutineStep.LoopSetTv1, _IoThrottle, _pumpBasePressure); + SetMfcByGroup((int)RoutineStep.Loop2Set0_M18toM40, MfcGroupName.M18toM40No303439, 0, 5); WaitChamberPressDownTo((int)RoutineStep.LoopWaitTv1, _pumpBasePressure, _pumpTimeout); @@ -432,9 +470,11 @@ namespace SicModules.PMs.Routines SetThrottleToCloseMode((int)RoutineStep.FinishSetTVCloseMode2, _IoThrottle, 8); SetThrottleDisable((int)RoutineStep.FinishCLoseTV2, _IoThrottle, 8); TimeDelay((int)RoutineStep.TimeDelay10, 1); + + SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown2, PressureUpOrDown.Uping); 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); + WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.FinishWaitPressUpTo1020, _IoThrottle, 1200, _ventTimeout); SetMfcByGroup((int)RoutineStep.FinishSet0_M2M9M15M19_M26, MfcGroupName.M2M9M15M19_M26, 0, 3); } catch (RoutineBreakException) diff --git a/App/SicRT/Config/System.sccfg b/App/SicRT/Config/System.sccfg index a346506..4833280 100644 --- a/App/SicRT/Config/System.sccfg +++ b/App/SicRT/Config/System.sccfg @@ -611,7 +611,7 @@ - + diff --git a/App/SicUI/Models/PMs/ExchangeMoSelectDialogView.xaml b/App/SicUI/Models/PMs/ExchangeMoSelectDialogView.xaml new file mode 100644 index 0000000..acbe362 --- /dev/null +++ b/App/SicUI/Models/PMs/ExchangeMoSelectDialogView.xaml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/App/SicUI/Models/PMs/ExchangeMoSelectDialogView.xaml.cs b/App/SicUI/Models/PMs/ExchangeMoSelectDialogView.xaml.cs new file mode 100644 index 0000000..db1ae02 --- /dev/null +++ b/App/SicUI/Models/PMs/ExchangeMoSelectDialogView.xaml.cs @@ -0,0 +1,59 @@ +using MECF.Framework.Common.DataCenter; +using OpenSEMI.ClientBase; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +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 +{ + /// + /// ExchangeMoSelectDialogView.xaml 的交互逻辑 + /// + public partial class ExchangeMoSelectDialogView : UserControl + { + public ExchangeMoSelectDialogView() + { + InitializeComponent(); + } + } + + public class ExchangeMoSelectDialogViewModel : DialogViewModel + { + + public ExchangeMoSelectDialogViewModel() + { + MoList = new List() { "CS2", "W(CO)6", "MOReserved", "MO(CO)6" }; + } + + public void OK() + { + if (!string.IsNullOrEmpty(SelectedMO)) + { + this.DialogResult = SelectedMO; + IsCancel = false; + TryClose(true); + } + } + + public void Cancel() + { + IsCancel = true; + TryClose(false); + } + + public List MoList { get; set; } + public string SelectedMO { get; set; } + } +} diff --git a/App/SicUI/Models/PMs/PMMfcDynamicFlowViewModel.cs b/App/SicUI/Models/PMs/PMMfcDynamicFlowViewModel.cs index 779ba5a..84c20a5 100644 --- a/App/SicUI/Models/PMs/PMMfcDynamicFlowViewModel.cs +++ b/App/SicUI/Models/PMs/PMMfcDynamicFlowViewModel.cs @@ -125,7 +125,7 @@ namespace SicUI.Models.PMs } - private List _MFCGroup = new List() { "MFC28", "MFC29", "MFC31","MFC40" }; + private List _MFCGroup = new List() { "MFC27", "MFC28", "MFC29", "MFC31","MFC40" }; public List MFCGroup { get { return _MFCGroup; } diff --git a/App/SicUI/Models/PMs/PMOperationView.xaml b/App/SicUI/Models/PMs/PMOperationView.xaml index 33a7c3e..0b32220 100644 --- a/App/SicUI/Models/PMs/PMOperationView.xaml +++ b/App/SicUI/Models/PMs/PMOperationView.xaml @@ -647,11 +647,10 @@ Margin="5" Orientation="Horizontal">