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">