修改pmroutine

This commit is contained in:
SIC1016\caipeilun 2026-08-21 09:24:18 +08:00
parent 8653fc01b0
commit 84c34147d3
15 changed files with 280 additions and 85 deletions

View File

@ -19,7 +19,7 @@
<Limit di="PM1.DI_PumpExhaustDPSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-40" />
<Limit di="PM1.DI_ScrubberIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-41" />
<Limit di="PM1.DI_FacilityIntlkSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-42" />
<Limit di="PM1.DI_GN2InletPressSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-55" />
<Limit di="PM1.DI_GN2InletPressSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-55"
<Limit di="PM1.DI_GBH2SeDetectorSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-57" />
<Limit di="PM1.DI_EMOStatusSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-70" />
<Limit di="PM1.DI_MainCBStatusSW" value="true" tip="" tip.zh-CN="" tip.en-US="DI-76" />

View File

@ -1130,18 +1130,8 @@ namespace SicModules.PMs
private bool FsmStartExchangeMO(object[] param)
{
Result ret;
if (SC.GetValue<bool>($"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);
}
if (ret == Result.FAIL || ret == Result.DONE)
return false;

View File

@ -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<string>() { "V87", "V88", "V89", "V90", "V91", "V97" };
lst = new List<string>() { "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<int>() { 1, 3, 4, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17 };
lst = new List<int>() { 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<int>() { 27, 28, 29, 31, 33, 32, 35, 36, 37, 38, 40 };
}
else if (mGroupName == MfcGroupName.M28293140)
else if (mGroupName == MfcGroupName.M27M28293140)
{
lst = new List<int>() { 28, 29, 31, 40 };
lst = new List<int>() { 27 ,28, 29, 31, 40 };
}
else if (mGroupName == MfcGroupName.M19toM33)
{

View File

@ -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);

View File

@ -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、 V90MiddleGas.Final、 V91OpticPurge.Final、 V97CarryGas.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、打开 V92GasRingPurge.Final、 V93ChamberPurge.Final、 V95ConfinementRing.Final
//等待 950,打开 V94RotationUpPurge.Final、 等待 3S打开 V96HeaterWF.Final
//蝶阀改为压力模式
//关闭蝶阀, 再关闭 EPV2,等待 950打开 V94RotationUpPurge.Final、 等待 3S打开 V96HeaterWF.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
//M18 - M40除 M30\M34\M39 MFC 5s ramp 到 0。
//伺服压力到设定值 0可配置
//关闭蝶阀, 再关闭 EPV2等待压力达到设定值压力达到后打开 EPV2
//M18 - M40除 M30\M34\M39 MFC 5s 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);

View File

@ -129,7 +129,7 @@ namespace SicModules.PMs.Routines
_lstGroup2 = new List<string>() { "V50", "V50s" };
_lstGroup3 = new List<string>() { "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<string>() { "V46", "V46s" };
_lstGroup3 = new List<string>() { "V43", "V43s" };
break;
case "MORE":
case "MOReserved":
mfc1 = 16;
mfc2 = 17;
pc = 9;
@ -147,7 +147,7 @@ namespace SicModules.PMs.Routines
_lstGroup2 = new List<string>() { "V23", "V23s" };
_lstGroup3 = new List<string>() { "V21", "V21s" };
break;
case "MOCO6":
case "MO(CO)6":
mfc1 = 9;
mfc2 = 10;
pc = 8;

View File

@ -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
@ -359,19 +360,34 @@ namespace SicModules.PMs.Routines
//循环开始
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);
EndLoop((int)RoutineStep.EndLoop);
//11、 依次关闭 Final valves
//先 关 闭 V93 ChamberPurge.Final )、 V94 RotationUpPurge.Final )、 V95ConfinementRing.Final、 V96HeaterWF.Final
//再关闭 V87 SHPurge.Final、 V88 OuterGas.Final、 V89 InnerGas.Final、 V90 MiddleGas.Final )、 V91 OpticPurge.Final )、 V92 GasRingPurge.Final )、 V97CarryGas.Final

View File

@ -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 )、 V90MiddleGas.Final、 V91OpticPurge.Final、 V97CarryGas.Final
SetIoValueByGroup((int)RoutineStep.OpenFinal2, IoGroupName.Final2, true, _IoValueOpenCloseTimeout);
@ -386,40 +400,64 @@ namespace SicModules.PMs.Routines
SetMfcToDefaultByGroup((int)RoutineStep.SetM38, MfcGroupName.M38, 1);
//14、打开 V92GasRingPurge.Final、 V93ChamberPurge.Final、 V95ConfinementRing.Final
//等待 950打开 V94RotationUpPurge.Final、 等待 3S打开 V96HeaterWF.Final
//蝶阀改为压力模式
//关闭蝶阀, 再关闭 EPV2,等待 950打开 V94RotationUpPurge.Final、 等待 3S打开 V96HeaterWF.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。
//关闭蝶阀, 再关闭 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, _ventBasePressure, _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, _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
//关闭蝶阀, 再关闭 EPV2等待压力达到设定值压力达到后打开 EPV2
//M18 - M40除 M30\M34\M39 MFC 5s ramp 到 0。
//伺服压力到设定值 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)

View File

@ -611,7 +611,7 @@
<config default="0" name="ThrottlePositionDefaultValue" description="蝶阀位置模式默认值" max="100" min="0" paramter="" tag="" unit="s" type="Double" />
<config default="1100" name="ThrottlePressureDefaultValue" description="蝶阀压力模式默认值" max="1500" min="0" paramter="" tag="" unit="s" type="Double" />
<config default="400" name="ThrottlePositionModeMaxPressure" description="蝶阀允许位置模式需要的最大压力值" max="1100" min="0" paramter="" tag="" unit="mbar" type="Double" />
<config default="1000*10,3000*10,3000*10,4000*10,6000*10,8000*10,10000*10,12000*10,14000*10,2500*10" name="MFC27DynamicFlow" description="MFC27 动态流量" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />
<config default="4000*10,7000*10,11000*10,13000*10,16000*10,19000*10,23000*10,28000*10,34000*10,11000*10" name="MFC27DynamicFlow" description="MFC27 动态流量" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />
<config default="1000*10,3000*10,3000*10,4000*10,6000*10,8000*10,10000*10,12000*10,14000*10,2500*10" name="MFC28DynamicFlow" description="MFC28 动态流量" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />
<config default="500*10,2000*10,2500*10,3500*10,5500*10,7500*10,9500*10,11500*10,13000*10,2000*10" name="MFC29DynamicFlow" description="MFC29 动态流量" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />
<config default="1000*10,3000*10,5000*10,6000*10,8000*10,10000*10,12000*10,14000*10,16000*10,4000*10" name="MFC31DynamicFlow" description="MFC31 动态流量" max="" min="" paramter="" tag="" visible="false" unit="" type="String" />

View File

@ -0,0 +1,47 @@
<UserControl x:Class="SicUI.Models.PMs.ExchangeMoSelectDialogView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:cal="http://www.caliburn.org"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
mc:Ignorable="d"
Width="350"
Height="200">
<UserControl.Resources>
</UserControl.Resources>
<Border BorderBrush="Gray" BorderThickness="0,1,0,0" Background="{DynamicResource Tab_BG}">
<Grid Margin="20,30">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Border BorderBrush="{DynamicResource Table_BD}" BorderThickness="1" Background="{DynamicResource Table_BG_Content_Highlight}">
<StackPanel VerticalAlignment="Center" HorizontalAlignment="Center" Orientation="Horizontal">
<TextBlock VerticalAlignment="Center" FontFamily="Arial" Margin="10 0" FontSize="12" Foreground="{DynamicResource FG_Black}" Text="Select MO:" TextWrapping="Wrap" />
<ComboBox Width="150" Height="25" Margin="10 0" ItemsSource="{Binding MoList}" SelectedIndex="0" SelectedItem="{Binding SelectedMO}"/>
</StackPanel>
</Border>
<StackPanel Grid.Row="1" Margin="0,10,0,0" Orientation="Horizontal" HorizontalAlignment="Center">
<Button Content="OK" Width="90" Height="30">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="OK">
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="Cancel" Margin="10,0,0,0" Width="90" Height="30">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="Cancel">
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</Grid>
</Border>
</UserControl>

View File

@ -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
{
/// <summary>
/// ExchangeMoSelectDialogView.xaml 的交互逻辑
/// </summary>
public partial class ExchangeMoSelectDialogView : UserControl
{
public ExchangeMoSelectDialogView()
{
InitializeComponent();
}
}
public class ExchangeMoSelectDialogViewModel : DialogViewModel<string>
{
public ExchangeMoSelectDialogViewModel()
{
MoList = new List<string>() { "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<string> MoList { get; set; }
public string SelectedMO { get; set; }
}
}

View File

@ -125,7 +125,7 @@ namespace SicUI.Models.PMs
}
private List<string> _MFCGroup = new List<string>() { "MFC28", "MFC29", "MFC31","MFC40" };
private List<string> _MFCGroup = new List<string>() { "MFC27", "MFC28", "MFC29", "MFC31","MFC40" };
public List<string> MFCGroup
{
get { return _MFCGroup; }

View File

@ -647,11 +647,10 @@
Margin="5"
Orientation="Horizontal">
<Button
x:Name="ID_BTN_Exchange_TCS_Content"
Width="100"
Height="30"
Padding="0"
Content="{lex:Loc}"
Content="ExchangeMo"
FontFamily="微软雅黑"
FontSize="12"
FontStretch="Normal"
@ -661,7 +660,7 @@
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="PMOperation">
<cal:Parameter Value="ExchangeMOTCS" />
<cal:Parameter Value="MOExchange" />
</cal:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>

View File

@ -1514,23 +1514,28 @@ namespace SicUI.Models.PMs
InvokeClient.Instance.Service.DoOperation($"{Module}.{strPMOP}");
return;
}
if (strPMOP.Contains("MOExchange"))
{
var vm = new ExchangeMoSelectDialogViewModel();
var _windowmanager = new WindowManager();
_windowmanager.ShowDialog(vm);
if (!vm.IsCancel)
{
InvokeClient.Instance.Service.DoOperation($"{Module}.ExchangeMO", vm.DialogResult);
}
}
else
{
//去除strPMOP中To关键字
string strCleanTo = strPMOP.Replace("To", "");
var selection = DialogBox.ShowDialog(DialogButton.Yes | DialogButton.Cancel, DialogType.CONFIRM, $"Are you sure perform the operation {strCleanTo}");
if (selection == DialogButton.Yes)
{
if (strPMOP.Contains("ExchangeMO"))
{
string strMOType = strPMOP.Replace("ExchangeMO", "");
InvokeClient.Instance.Service.DoOperation($"{Module}.ExchangeMO", $"{strMOType}");
}
else
{
InvokeClient.Instance.Service.DoOperation($"{Module}.{strPMOP}");
}
}
}
}
}
}

View File

@ -340,6 +340,9 @@
<Compile Include="Models\PMs\ContinueSelectDialogView.xaml.cs">
<DependentUpon>ContinueSelectDialogView.xaml</DependentUpon>
</Compile>
<Compile Include="Models\PMs\ExchangeMoSelectDialogView.xaml.cs">
<DependentUpon>ExchangeMoSelectDialogView.xaml</DependentUpon>
</Compile>
<Compile Include="Models\PMs\PMAlarmView.xaml.cs">
<DependentUpon>PMAlarmView.xaml</DependentUpon>
</Compile>
@ -578,6 +581,10 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Models\PMs\ExchangeMoSelectDialogView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Models\PMs\PMAlarmView.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>