修改routine
This commit is contained in:
parent
c446d8da61
commit
621c9f2939
@ -79,7 +79,7 @@
|
|||||||
<Catalog DisplayName="StepInfo">
|
<Catalog DisplayName="StepInfo">
|
||||||
|
|
||||||
<Group DisplayName="SH Flow->Source1->Source1 Total Flow">
|
<Group DisplayName="SH Flow->Source1->Source1 Total Flow">
|
||||||
<Step ModuleName="" DeviceType="" InputType="DoubleInput" DisplayName="22. Source1 Total Flow" UnitName="sccm" ControlName="SiSourTotalFlow" InputMode="" Min="0" Max="10000" Description=""/>
|
<Step ModuleName="" DeviceType="" InputType="DoubleInput" DisplayName="22. Source1 Total Flow" UnitName="sccm" ControlName="Source1TotalFlow" InputMode="" Min="0" Max="10000" Description=""/>
|
||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group DisplayName="SH Flow->Source1->Mo(CO)6 Flow">
|
<Group DisplayName="SH Flow->Source1->Mo(CO)6 Flow">
|
||||||
@ -116,7 +116,7 @@
|
|||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group DisplayName="SH Flow->Source1->Source1 Split">
|
<Group DisplayName="SH Flow->Source1->Source1 Split">
|
||||||
<Step ModuleName="" DeviceType="" InputType="Set3RatioInput" DisplayName="35. Source Split Ratio" UnitName="" ControlName="SourceSplitRatio"/>
|
<Step ModuleName="" DeviceType="" InputType="Set3RatioInput" DisplayName="35. Source Split Ratio" UnitName="" ControlName="Source1SplitRatio"/>
|
||||||
<Step ModuleName="" DeviceType="" InputType="DoubleInput" DisplayName="36. Source1 Push Pressure (PC5)" UnitName="mbar" ControlName="Pressure5.Ramp" InputMode="" Min="0" Max="3000" Description="PC5"/>
|
<Step ModuleName="" DeviceType="" InputType="DoubleInput" DisplayName="36. Source1 Push Pressure (PC5)" UnitName="mbar" ControlName="Pressure5.Ramp" InputMode="" Min="0" Max="3000" Description="PC5"/>
|
||||||
<Step ModuleName="" DeviceType="" InputType="DoubleInput" DisplayName="37. Source1 Inner Flow (M20)" UnitName="sccm" ControlName="Mfc20.Ramp" InputMode="" Min="0" Max="5000" IsColumnEditable="false" Description="M20"/>
|
<Step ModuleName="" DeviceType="" InputType="DoubleInput" DisplayName="37. Source1 Inner Flow (M20)" UnitName="sccm" ControlName="Mfc20.Ramp" InputMode="" Min="0" Max="5000" IsColumnEditable="false" Description="M20"/>
|
||||||
<Step ModuleName="" DeviceType="" InputType="DoubleInput" DisplayName="38. Source1 Middle Flow (M19)" UnitName="sccm" ControlName="Mfc19.Ramp" InputMode="" Min="0" Max="10000" IsColumnEditable="false" Description="M19"/>
|
<Step ModuleName="" DeviceType="" InputType="DoubleInput" DisplayName="38. Source1 Middle Flow (M19)" UnitName="sccm" ControlName="Mfc19.Ramp" InputMode="" Min="0" Max="10000" IsColumnEditable="false" Description="M19"/>
|
||||||
@ -128,7 +128,7 @@
|
|||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group DisplayName="SH Flow->Source2->CS2 Flow">
|
<Group DisplayName="SH Flow->Source2->CS2 Flow">
|
||||||
<Step ModuleName="" DeviceType="" InputType="FlowModeSelection" DisplayName="41. CS2 Flow Mode" UnitName="" ControlName="CS2.SetValve" Description="">
|
<Step ModuleName="" DeviceType="" InputType="FlowModeSelection" DisplayName="41. CS2 Flow Mode" UnitName="" ControlName="CS2Flow.SetValve" Description="">
|
||||||
<Item DisplayName="Purge" ControlName="Purge" />
|
<Item DisplayName="Purge" ControlName="Purge" />
|
||||||
<Item DisplayName="Vent" ControlName="Vent" />
|
<Item DisplayName="Vent" ControlName="Vent" />
|
||||||
<Item DisplayName="Run" ControlName="Run" />
|
<Item DisplayName="Run" ControlName="Run" />
|
||||||
@ -139,7 +139,7 @@
|
|||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group DisplayName="SH Flow->Source2->H2S Flow">
|
<Group DisplayName="SH Flow->Source2->H2S Flow">
|
||||||
<Step ModuleName="" DeviceType="" InputType="FlowModeSelection" DisplayName="45. H2S Flow Mode" UnitName="" ControlName="H2S.SetValve" Description="">
|
<Step ModuleName="" DeviceType="" InputType="FlowModeSelection" DisplayName="45. H2S Flow Mode" UnitName="" ControlName="H2SFlow.SetValve" Description="">
|
||||||
<Item DisplayName="Purge" ControlName="Purge" />
|
<Item DisplayName="Purge" ControlName="Purge" />
|
||||||
<Item DisplayName="Vent" ControlName="Vent" />
|
<Item DisplayName="Vent" ControlName="Vent" />
|
||||||
<Item DisplayName="Run" ControlName="Run" />
|
<Item DisplayName="Run" ControlName="Run" />
|
||||||
@ -148,7 +148,7 @@
|
|||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group DisplayName="SH Flow->Source2->H2Se Flow">
|
<Group DisplayName="SH Flow->Source2->H2Se Flow">
|
||||||
<Step ModuleName="" DeviceType="" InputType="FlowModeSelection" DisplayName="47. H2Se Flow Mode" UnitName="" ControlName="H2Se.SetValve" Description="">
|
<Step ModuleName="" DeviceType="" InputType="FlowModeSelection" DisplayName="47. H2Se Flow Mode" UnitName="" ControlName="H2SeFlow.SetValve" Description="">
|
||||||
<Item DisplayName="Purge" ControlName="Purge" />
|
<Item DisplayName="Purge" ControlName="Purge" />
|
||||||
<Item DisplayName="Vent" ControlName="Vent" />
|
<Item DisplayName="Vent" ControlName="Vent" />
|
||||||
<Item DisplayName="Run" ControlName="Run" />
|
<Item DisplayName="Run" ControlName="Run" />
|
||||||
@ -169,7 +169,7 @@
|
|||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group DisplayName="SH Flow->Source3->O2 Flow">
|
<Group DisplayName="SH Flow->Source3->O2 Flow">
|
||||||
<Step ModuleName="" DeviceType="" InputType="FlowModeSelection" DisplayName="55. O2 Flow Mode" UnitName="" ControlName="O2.SetValve" Description="">
|
<Step ModuleName="" DeviceType="" InputType="FlowModeSelection" DisplayName="55. O2 Flow Mode" UnitName="" ControlName="O2Flow.SetValve" Description="">
|
||||||
<Item DisplayName="Purge" ControlName="Purge" />
|
<Item DisplayName="Purge" ControlName="Purge" />
|
||||||
<Item DisplayName="Vent" ControlName="Vent" />
|
<Item DisplayName="Vent" ControlName="Vent" />
|
||||||
<Item DisplayName="Run" ControlName="Run" />
|
<Item DisplayName="Run" ControlName="Run" />
|
||||||
@ -182,7 +182,7 @@
|
|||||||
</Group>
|
</Group>
|
||||||
|
|
||||||
<Group DisplayName="SH Flow->Source3->SO2 Flow">
|
<Group DisplayName="SH Flow->Source3->SO2 Flow">
|
||||||
<Step ModuleName="" DeviceType="" InputType="FlowModeSelection" DisplayName="61. SO2 Flow Mode" UnitName="" ControlName="SO2.SetValve" Description="">
|
<Step ModuleName="" DeviceType="" InputType="FlowModeSelection" DisplayName="61. SO2 Flow Mode" UnitName="" ControlName="SO2Flow.SetValve" Description="">
|
||||||
<Item DisplayName="Purge" ControlName="Purge" />
|
<Item DisplayName="Purge" ControlName="Purge" />
|
||||||
<Item DisplayName="Vent" ControlName="Vent" />
|
<Item DisplayName="Vent" ControlName="Vent" />
|
||||||
<Item DisplayName="Run" ControlName="Run" />
|
<Item DisplayName="Run" ControlName="Run" />
|
||||||
|
|||||||
@ -227,24 +227,20 @@ namespace SicModules.PMs.RecipeExecutions
|
|||||||
//{
|
//{
|
||||||
// dic.Remove("Mfc30.Ramp");
|
// dic.Remove("Mfc30.Ramp");
|
||||||
//}
|
//}
|
||||||
dic.Remove("HCLSourSplitRatio");
|
|
||||||
dic.Remove("SHTotalFlow");
|
dic.Remove("SHTotalFlow");
|
||||||
dic.Remove("SHTotalFlowSplitRatio");
|
dic.Remove("SHTotalFlowSplitRatio");
|
||||||
//dic.Remove("SiSourTotalFlow");
|
dic.Remove("Source1TotalFlow");
|
||||||
dic.Remove("SiSourSplitRatio");
|
dic.Remove("Source1SplitRatio");
|
||||||
//dic.Remove("CSourTotalFlow");
|
dic.Remove("Source2TotalFlow");
|
||||||
dic.Remove("CSourSplitRatio");
|
dic.Remove("Source2SplitRatio");
|
||||||
//dic.Remove("DopeTotalFlow");
|
dic.Remove("Source3TotalFlow");
|
||||||
dic.Remove("N2ActualFlow");
|
dic.Remove("Source3SplitRatio");
|
||||||
dic.Remove("NH3_2ActualFlow");
|
|
||||||
dic.Remove("DopeSplitRatio");
|
|
||||||
|
|
||||||
dic.Remove("SHSuppTotalFlow");
|
dic.Remove("SHSuppTotalFlow");
|
||||||
dic.Remove("SHInnerFlow");
|
dic.Remove("SHInnerFlow");
|
||||||
dic.Remove("SHMidFlow");
|
dic.Remove("SHMidFlow");
|
||||||
dic.Remove("SHOutterFlow");
|
dic.Remove("SHOutterFlow");
|
||||||
//dic.Remove("GRPurgeHCI");
|
dic.Remove("TotalVentFlow");
|
||||||
//dic.Remove("TotalVentFlow");
|
|
||||||
|
|
||||||
if (dic.ContainsKey("Loop"))
|
if (dic.ContainsKey("Loop"))
|
||||||
dic.Remove("Loop");
|
dic.Remove("Loop");
|
||||||
|
|||||||
@ -103,7 +103,7 @@ namespace SicModules.PMs.Routines
|
|||||||
TimeDelay11,
|
TimeDelay11,
|
||||||
TimeDelay12,
|
TimeDelay12,
|
||||||
TimeDelay13,
|
TimeDelay13,
|
||||||
TimeDelay14,
|
TimeDelay14, SetM18to40, SetM18to40_1,
|
||||||
}
|
}
|
||||||
|
|
||||||
private PMModule _pm1Module;
|
private PMModule _pm1Module;
|
||||||
@ -172,9 +172,6 @@ namespace SicModules.PMs.Routines
|
|||||||
//关闭V72,打开V25
|
//关闭V72,打开V25
|
||||||
SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false, _IoValueOpenCloseTimeout);
|
||||||
SetIoValueByGroup((int)RoutineStep.SetGroupV25, IoGroupName.V25, true, _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
|
//打开V31,打开V32
|
||||||
SetIoValueByGroup((int)RoutineStep.SetV31, IoGroupName.V31, true, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetV31, IoGroupName.V31, true, _IoValueOpenCloseTimeout);
|
||||||
@ -195,51 +192,32 @@ namespace SicModules.PMs.Routines
|
|||||||
SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout);
|
||||||
SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout);
|
||||||
|
|
||||||
//设置MFC和PC的模式
|
//6、 M1-M17 设定为 default 值,所有 PC 设定为 default 值(PC1-PC9)
|
||||||
SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.All);
|
SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.All);
|
||||||
SetPcModeToNormal((int)RoutineStep.SetPCMode, _lstPcList);
|
|
||||||
|
|
||||||
//M1-M16设定为default值(M2、M9、M15除外)
|
|
||||||
SetMfcToDefaultByGroup((int)RoutineStep.SetM1toM17, MfcGroupName.M1toM17, 0);
|
SetMfcToDefaultByGroup((int)RoutineStep.SetM1toM17, MfcGroupName.M1toM17, 0);
|
||||||
|
SetPcModeToNormal((int)RoutineStep.SetPCMode, _lstPcList);
|
||||||
//M2、M9、M15、M19-M40 MFC 3s ramp 到 default值
|
|
||||||
SetMfcToDefaultByGroup((int)RoutineStep.SetM2to40_1, MfcGroupName.M2toM42, 3);
|
|
||||||
|
|
||||||
//设置所有PC到默认值
|
|
||||||
SetPcToDefault((int)RoutineStep.SetPC, _lstPcList);
|
SetPcToDefault((int)RoutineStep.SetPC, _lstPcList);
|
||||||
|
|
||||||
//打开V68
|
//7、 M18-M40(除 M30\M34\M39)) 3s ramp 到 default 值。。
|
||||||
SetIoValueByGroup((int)RoutineStep.OpenGasIn1, IoGroupName.GasIn1, true, _IoValueOpenCloseTimeout);
|
SetMfcToDefaultByGroup((int)RoutineStep.SetM18to40, MfcGroupName.M18toM40No303439, 3);
|
||||||
|
|
||||||
//打开J阀门
|
//9、 打开 A Valves,打开 J valve。
|
||||||
|
SetIoValueByGroup((int)RoutineStep.OpenGasIn1, IoGroupName.A, true, _IoValueOpenCloseTimeout);
|
||||||
SetIoValueByGroup((int)RoutineStep.SetGroupJ, IoGroupName.J, true, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetGroupJ, IoGroupName.J, true, _IoValueOpenCloseTimeout);
|
||||||
|
|
||||||
//打开V65
|
//10、 打开 EPV2,等待 3s, 打开 TV enable, 压力模式,伺服压力默认设定为 0mbar;
|
||||||
//SetIoValueByGroup((int)RoutineStep.SetV65, IoGroupName.V65, true, _IoValueOpenCloseTimeout);
|
|
||||||
|
|
||||||
//打开EPV2
|
|
||||||
SetIoValueByGroup((int)RoutineStep.SetEPV2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetEPV2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout);
|
||||||
TimeDelay((int)RoutineStep.TimeDelay5, 3);
|
TimeDelay((int)RoutineStep.TimeDelay5, 3);
|
||||||
|
|
||||||
//设置蝶阀Enable
|
|
||||||
SetThrottleEnableAndWait((int)RoutineStep.SetTVEnable, _IoThrottle, 5);
|
SetThrottleEnableAndWait((int)RoutineStep.SetTVEnable, _IoThrottle, 5);
|
||||||
|
|
||||||
//设置蝶阀为压力模式
|
|
||||||
SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode, _IoThrottle, 5);
|
SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode, _IoThrottle, 5);
|
||||||
|
|
||||||
//伺服压力设定值到0mbar
|
|
||||||
SetThrottleToTargetAndNoWait((int)RoutineStep.SetTv1, _IoThrottle, _pumpBasePressure);
|
SetThrottleToTargetAndNoWait((int)RoutineStep.SetTv1, _IoThrottle, _pumpBasePressure);
|
||||||
|
|
||||||
//M2、M9、M15、M19-M40 MFC 3s ramp到0
|
//11、当蝶阀设定值 ramp 到 0 后,将 M18-M40(除 M30\M34\M39)) MFC 5s ramp 到0; 关闭 V87、 V97。
|
||||||
SetMfcByGroup((int)RoutineStep.SetM2to40, MfcGroupName.M2toM42, 0, 3);
|
SetMfcByGroup((int)RoutineStep.SetM18to40_1, MfcGroupName.M18toM40No303439, 0, 3);
|
||||||
SetMfcByGroup((int)RoutineStep.SetM18, MfcGroupName.M18, 0, 3);
|
|
||||||
//关闭V87 V97
|
|
||||||
SetIoValueByGroup((int)RoutineStep.SetV87V97, IoGroupName.V87V97, false, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetV87V97, IoGroupName.V87V97, false, _IoValueOpenCloseTimeout);
|
||||||
|
|
||||||
//等待腔体压力Pump到设定值
|
//12、等待腔体压力到 Pump Base Pressure(可配置), 蝶阀改为位置模式,开度设定 100%
|
||||||
WaitChamberPressDownTo((int)RoutineStep.WaitTv1, _pumpBasePressure, _pumpTimeOut);
|
WaitChamberPressDownTo((int)RoutineStep.WaitTv1, _pumpBasePressure, _pumpTimeOut);
|
||||||
|
|
||||||
//蝶阀设置为位置模式,开度设置为最大
|
|
||||||
SetThrottleToPositionMode((int)RoutineStep.SetTVPositionMode, _IoThrottle, _throttleTimeout);
|
SetThrottleToPositionMode((int)RoutineStep.SetTVPositionMode, _IoThrottle, _throttleTimeout);
|
||||||
SetThrottleSetPosition((int)RoutineStep.SetTVPositionMax, _IoThrottle, 100, _throttleTimeout);
|
SetThrottleSetPosition((int)RoutineStep.SetTVPositionMax, _IoThrottle, 100, _throttleTimeout);
|
||||||
|
|
||||||
|
|||||||
@ -34,8 +34,8 @@ namespace SicModules.PMs.Routines
|
|||||||
SetPC,
|
SetPC,
|
||||||
SetGroupI, //V87-96
|
SetGroupI, //V87-96
|
||||||
SetM18,
|
SetM18,
|
||||||
SetM2to40,
|
SetM18to40_1,
|
||||||
SetM2to40_1,
|
SetM18to40,
|
||||||
MfcAll,
|
MfcAll,
|
||||||
|
|
||||||
SetGasOut,
|
SetGasOut,
|
||||||
@ -173,9 +173,6 @@ namespace SicModules.PMs.Routines
|
|||||||
//关闭V72,打开V25
|
//关闭V72,打开V25
|
||||||
SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false, _IoValueOpenCloseTimeout);
|
||||||
SetIoValueByGroup((int)RoutineStep.SetGroupV25, IoGroupName.V25, true, _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
|
//打开V31,打开V32
|
||||||
SetIoValueByGroup((int)RoutineStep.SetV31, IoGroupName.V31, true, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetV31, IoGroupName.V31, true, _IoValueOpenCloseTimeout);
|
||||||
@ -196,51 +193,32 @@ namespace SicModules.PMs.Routines
|
|||||||
SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout);
|
||||||
SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout);
|
||||||
|
|
||||||
//设置MFC和PC的模式
|
//6、 M1-M17 设定为 default 值,所有 PC 设定为 default 值(PC1-PC9)
|
||||||
SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.All);
|
SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.All);
|
||||||
SetPcModeToNormal((int)RoutineStep.SetPCMode, _lstPcList);
|
|
||||||
|
|
||||||
//M1-M16设定为default值(M2、M9、M15除外)
|
|
||||||
SetMfcToDefaultByGroup((int)RoutineStep.SetM1toM17, MfcGroupName.M1toM17, 0);
|
SetMfcToDefaultByGroup((int)RoutineStep.SetM1toM17, MfcGroupName.M1toM17, 0);
|
||||||
|
SetPcModeToNormal((int)RoutineStep.SetPCMode, _lstPcList);
|
||||||
//M2、M9、M15、M19-M40 MFC 3s ramp 到 default值
|
|
||||||
SetMfcToDefaultByGroup((int)RoutineStep.SetM2to40_1, MfcGroupName.M2toM42, 3);
|
|
||||||
|
|
||||||
//设置所有PC到默认值
|
|
||||||
SetPcToDefault((int)RoutineStep.SetPC, _lstPcList);
|
SetPcToDefault((int)RoutineStep.SetPC, _lstPcList);
|
||||||
|
|
||||||
//打开V68
|
//7、 M18-M40(除 M30\M34\M39)) 3s ramp 到 default 值。。
|
||||||
SetIoValueByGroup((int)RoutineStep.OpenGasIn1, IoGroupName.GasIn1, true, _IoValueOpenCloseTimeout);
|
SetMfcToDefaultByGroup((int)RoutineStep.SetM18to40, MfcGroupName.M18toM40No303439, 3);
|
||||||
|
|
||||||
//打开J阀门
|
//9、 打开 A Valves,打开 J valve。
|
||||||
|
SetIoValueByGroup((int)RoutineStep.OpenGasIn1, IoGroupName.A, true, _IoValueOpenCloseTimeout);
|
||||||
SetIoValueByGroup((int)RoutineStep.SetGroupJ, IoGroupName.J, true, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetGroupJ, IoGroupName.J, true, _IoValueOpenCloseTimeout);
|
||||||
|
|
||||||
//打开V65
|
//10、 打开 EPV2,等待 3s, 打开 TV enable, 压力模式,伺服压力默认设定为 0mbar;
|
||||||
//SetIoValueByGroup((int)RoutineStep.SetV65, IoGroupName.V65, true, _IoValueOpenCloseTimeout);
|
|
||||||
|
|
||||||
//打开EPV2
|
|
||||||
SetIoValueByGroup((int)RoutineStep.SetEPV2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetEPV2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout);
|
||||||
TimeDelay((int)RoutineStep.TimeDelay5, 3);
|
TimeDelay((int)RoutineStep.TimeDelay5, 3);
|
||||||
|
|
||||||
//设置蝶阀Enable
|
|
||||||
SetThrottleEnableAndWait((int)RoutineStep.SetTVEnable, _IoThrottle, 5);
|
SetThrottleEnableAndWait((int)RoutineStep.SetTVEnable, _IoThrottle, 5);
|
||||||
|
|
||||||
//设置蝶阀为压力模式
|
|
||||||
SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode, _IoThrottle, 5);
|
SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode, _IoThrottle, 5);
|
||||||
|
|
||||||
//伺服压力设定值到0mbar
|
|
||||||
SetThrottleToTargetAndNoWait((int)RoutineStep.SetTv1, _IoThrottle, _vacPumpBasePressure);
|
SetThrottleToTargetAndNoWait((int)RoutineStep.SetTv1, _IoThrottle, _vacPumpBasePressure);
|
||||||
|
|
||||||
//M2、M9、M15、M19-M40 MFC 3s ramp到0
|
//11、当蝶阀设定值 ramp 到 0 后,将 M18-M40(除 M30\M34\M39)) MFC 5s ramp 到0; 关闭 V87、 V97。
|
||||||
SetMfcByGroup((int)RoutineStep.SetM2to40, MfcGroupName.M2toM42, 0, 3);
|
SetMfcByGroup((int)RoutineStep.SetM18to40_1, MfcGroupName.M18toM40No303439, 0, 3);
|
||||||
SetMfcByGroup((int)RoutineStep.SetM18, MfcGroupName.M18, 0, 3);
|
|
||||||
//关闭V87 V97
|
|
||||||
SetIoValueByGroup((int)RoutineStep.SetV87V97, IoGroupName.V87V97, false, _IoValueOpenCloseTimeout);
|
SetIoValueByGroup((int)RoutineStep.SetV87V97, IoGroupName.V87V97, false, _IoValueOpenCloseTimeout);
|
||||||
|
|
||||||
//等待腔体压力Pump到设定值
|
//12、等待腔体压力到 Pump Base Pressure(可配置), 蝶阀改为位置模式,开度设定 100%
|
||||||
WaitChamberPressDownTo((int)RoutineStep.WaitTv1, _vacPumpBasePressure, _pumpTimeOut);
|
WaitChamberPressDownTo((int)RoutineStep.WaitTv1, _vacPumpBasePressure, _pumpTimeOut);
|
||||||
|
|
||||||
//蝶阀设置为位置模式,开度设置为最大
|
|
||||||
SetThrottleToPositionMode((int)RoutineStep.SetTVPositionMode, _IoThrottle, _throttleTimeout);
|
SetThrottleToPositionMode((int)RoutineStep.SetTVPositionMode, _IoThrottle, _throttleTimeout);
|
||||||
SetThrottleSetPosition((int)RoutineStep.SetTVPositionMax, _IoThrottle, 100, _throttleTimeout);
|
SetThrottleSetPosition((int)RoutineStep.SetTVPositionMax, _IoThrottle, 100, _throttleTimeout);
|
||||||
|
|
||||||
|
|||||||
@ -51,7 +51,7 @@ using System.Windows;
|
|||||||
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
|
// 可以指定所有值,也可以使用以下所示的 "*" 预置版本号和修订号
|
||||||
// 方法是按如下所示使用“*”: :
|
// 方法是按如下所示使用“*”: :
|
||||||
|
|
||||||
[assembly: AssemblyVersion("1.1.0.60819")]
|
[assembly: AssemblyVersion("1.1.0.60822")]
|
||||||
[assembly: AssemblyInformationalVersion("MoS2(无EFEM)")]
|
[assembly: AssemblyInformationalVersion("MoS2(无EFEM)")]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -511,18 +511,18 @@ namespace SicSimulator.Instances
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//else
|
else
|
||||||
//{
|
{
|
||||||
// //判断是否有进气(V89到V97是否有开阀)
|
//判断是否有进气(V89到V97是否有开阀)
|
||||||
// if (IO.DI[$"{pm}.DO_FinalInnerGas(V89)"].Value || IO.DI[$"{pm}.DI_MiddleGasFinalFB(V90)"].Value || IO.DI[$"{pm}.DI_OpticPurgeFinalFB(V91)"].Value || IO.DI[$"{pm}.DI_GasRingPurgeFinalFB(V92)"].Value
|
if (IO.DI[$"{pm}.DI_FinalInnerGasFB(V89)"].Value || IO.DI[$"{pm}.DI_FinalMiddleGasFB(V90)"].Value || IO.DI[$"{pm}.DI_FinalOpticPurgeFB(V91)"].Value || IO.DI[$"{pm}.DI_FinalGasRingFB(V92)"].Value
|
||||||
// || IO.DI[$"{pm}.DI_ChamberPurgeFinalFB(V93)"].Value || IO.DI[$"{pm}.DI_RotationUpPurgeFinalFB(V94)"].Value || IO.DI[$"{pm}.DI_ConfinementRingFinalFB(V95)"].Value || IO.DI[$"{pm}.DI_HeaterWFFinalFB(V96)"].Value)
|
|| IO.DI[$"{pm}.DI_FinalChamberPurgeFB(V93)"].Value || IO.DI[$"{pm}.DI_FinalRotationPurgeFB(V94)"].Value || IO.DI[$"{pm}.DI_FinalShutterPurgeFB(V95)"].Value || IO.DI[$"{pm}.DI_FinalHeaterWFPurgeFB(V96)"].Value)
|
||||||
// {
|
{
|
||||||
// if (IO.AI[$"{pm}.AI_ActualPressure"].Value < 1200)
|
if (IO.AI[$"{pm}.AI_ActualPressure"].Value < 1200)
|
||||||
// {
|
{
|
||||||
// IO.AI[$"{pm}.AI_ActualPressure"].Value += 10;
|
IO.AI[$"{pm}.AI_ActualPressure"].Value += 10;
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
//}
|
}
|
||||||
|
|
||||||
//蝶阀Ramp有Bug,设置AO值可以化解
|
//蝶阀Ramp有Bug,设置AO值可以化解
|
||||||
if (IO.AI[$"{pm}.AI_ActualPressure"].Value >= 1100)
|
if (IO.AI[$"{pm}.AI_ActualPressure"].Value >= 1100)
|
||||||
|
|||||||
@ -1516,6 +1516,10 @@ namespace SicUI.Models.PMs
|
|||||||
}
|
}
|
||||||
if (strPMOP.Contains("MOExchange"))
|
if (strPMOP.Contains("MOExchange"))
|
||||||
{
|
{
|
||||||
|
if (!ShowChoosenDialog("1.Make sure the CS2 has turned off \r\n2.Make sure the confinement in up position!\r\n3.Press OK to continue! "))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
var vm = new ExchangeMoSelectDialogViewModel();
|
var vm = new ExchangeMoSelectDialogViewModel();
|
||||||
var _windowmanager = new WindowManager();
|
var _windowmanager = new WindowManager();
|
||||||
_windowmanager.ShowDialog(vm);
|
_windowmanager.ShowDialog(vm);
|
||||||
|
|||||||
@ -55,6 +55,6 @@ using System.Windows;
|
|||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
|
|
||||||
|
|
||||||
[assembly: AssemblyVersion("1.1.0.60819")]
|
[assembly: AssemblyVersion("1.1.0.60822")]
|
||||||
[assembly: AssemblyInformationalVersion("MoS2(无EFEM)")]
|
[assembly: AssemblyInformationalVersion("MoS2(无EFEM)")]
|
||||||
|
|
||||||
|
|||||||
@ -3,6 +3,7 @@ using MECF.Framework.UI.Client.RecipeEditorLib.RecipeModel.Params;
|
|||||||
using System;
|
using System;
|
||||||
using MECF.Framework.Common.Equipment;
|
using MECF.Framework.Common.Equipment;
|
||||||
using MECF.Framework.Common.MECF.Framework.Common.Utilities;
|
using MECF.Framework.Common.MECF.Framework.Common.Utilities;
|
||||||
|
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
|
||||||
|
|
||||||
namespace MECF.Framework.UI.Client.RecipeEditorLib.RecipeModel
|
namespace MECF.Framework.UI.Client.RecipeEditorLib.RecipeModel
|
||||||
{
|
{
|
||||||
@ -15,258 +16,6 @@ namespace MECF.Framework.UI.Client.RecipeEditorLib.RecipeModel
|
|||||||
public class RecipeGasFlowCalculatorBase : IRecipeGasFlowCalculator
|
public class RecipeGasFlowCalculatorBase : IRecipeGasFlowCalculator
|
||||||
{
|
{
|
||||||
|
|
||||||
#region Properties
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc11.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameTcsBubbleLowFlow => "Mfc11.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc10.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameTcsBubbleHighFlow => "Mfc10.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc12.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameTcsPushFlow => "Mfc12.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// TCS.SetValve, 控制阀门模式
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameTcsFlowMode => "TCS.SetValve";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc7.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameTmaBubbleFlow => "Mfc7.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc8.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameTmaPushFlow => "Mfc8.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// TMA.SetValve, 控制阀门模式
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameTmaFlowMode => "TMA.SetValve";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SiSourSplitRatio, 源分流比
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameSiSourceSplitRatio => "SiSourSplitRatio";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SiSourTotalFlow, 源总流量
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameSiSourceTotalFlow => "SiSourTotalFlow";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc23.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameSiSourceInnerFlow => "Mfc23.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc22.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameSiSourceMiddleFlow => "Mfc22.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc9.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameSiSourceOuterFlow => "Mfc9.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc16.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameCxHxFlow => "Mfc16.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// C2H4.SetValve, 控制阀门模式
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameCxHxFlowMode => "C2H4.SetValve";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CSourSplitRatio, 源分流比
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameCSourceSplitRatio => "CSourSplitRatio";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// CSourTotalFlow, 源总流量
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameCSourceTotalFlow => "CSourTotalFlow";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc15.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameCSourcePushFlow => "Mfc15.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc26.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameCSourceInnerFlow => "Mfc26.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc25.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameCSourceMiddleFlow => "Mfc25.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc15.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameCSourceOuterFlow => "Mfc15.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// DopeTotalFlow, 涂料总流量
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameDopeTotalFlow => "DopeTotalFlow";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// DopeSplitRatio, 涂料分流比
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameDopeSplitRatio => "DopeSplitRatio";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc20.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameDopeInnerFlow => "Mfc20.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc19.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameDopeMiddleFlow => "Mfc19.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc2.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameDopeOuterFlow => "Mfc2.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// N2ActualFlow, 氮气实际流量
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameN2ActualFlow => "N2ActualFlow";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc4.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameN2LowFlow => "Mfc4.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc3.Ramp, 稀释流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameDilutionFlowForN2 => "Mfc3.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc6.Ramp, 稀释后的氮气流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameDilutedN2Flow => "Mfc6.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SHTotalFlow, 总流量
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameShTotalFlow => "SHTotalFlow";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SHTotalFlowSplitRatio, 总流量分流比
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameShTotalFlowSplitRatio => "SHTotalFlowSplitRatio";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SHSuppTotalFlow, 支持流量
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameShPushTotalFlow => "SHSuppTotalFlow";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SHInnerFlow, 内部流量
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameShInnerFlow => "SHInnerFlow";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SHMidFlow, 中间流量
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameShMiddleFlow => "SHMidFlow";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SHOutterFlow, 外部流量
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameShOuterFlow => "SHOutterFlow";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc29.Ramp, 内部推送流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameInnerPushFlow => "Mfc29.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc30.Ramp, 流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string Mfc30Flow => "Mfc30.Ramp";
|
|
||||||
|
|
||||||
public virtual string V47Value => "V47Value.SetValve";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc31.Ramp, 中间推送流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameMiddlePushFlow => "Mfc31.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc28.Ramp, 外部推送流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameOuterPushFlow => "Mfc28.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc40.Ramp, 输送气体流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameCarryGasFlow => "Mfc40.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc14.Ramp, SiH4流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameSiH4Flow => "Mfc14.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// SiH4.SetValve, 控制SiH4阀门模式
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameSiH4FlowMode => "SiH4.SetValve";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc1.Ramp, 排气推送流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameVentPushFlow => "Mfc1.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// TotalVentFlow, 总排气流量
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameTotalVentFlow => "TotalVentFlow";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc13.Ramp, HCl流量控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameHclFlow => "Mfc13.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// HCl.SetValve, 控制HCl阀门模式
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameHclFlowMode => "HCl.SetValve";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Mfc5.Ramp, 高流量氮气控制
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameN2HighFlow => "Mfc5.Ramp";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// N2Dilution.SetValve, 控制氮气稀释阀门模式
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameN2FlowMode => "N2Dilution.SetValve";
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// N2HighDoping.SetValve, 控制高流量氮气掺杂阀门模式
|
|
||||||
/// </summary>
|
|
||||||
public virtual string NameN2HighFlowMode => "N2HighDoping.SetValve";
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 计算指定工艺步骤的气体流量。
|
/// 计算指定工艺步骤的气体流量。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -283,294 +32,226 @@ namespace MECF.Framework.UI.Client.RecipeEditorLib.RecipeModel
|
|||||||
/// </param>
|
/// </param>
|
||||||
public void Calculate(RecipeStep step, string chamberName)
|
public void Calculate(RecipeStep step, string chamberName)
|
||||||
{
|
{
|
||||||
CalSiSourceFlow(step);
|
CalSourceFlow(step, NameSource1Flow, NameSource1SplitRatio, NameSource1InnerFlow, NameSource1MiddleFlow, NameSource1OuterFlow);
|
||||||
CalCSourceFlow(step);
|
CalSourceFlow(step, NameSource2Flow, NameSource2SplitRatio, NameSource2InnerFlow, NameSource2MiddleFlow, NameSource2OuterFlow);
|
||||||
CalDopeFlow(step);
|
CalSourceFlow(step, NameSource3Flow, NameSource3SplitRatio, NameSource3InnerFlow, NameSource3MiddleFlow, NameSource3OuterFlow);
|
||||||
CalShSupplementFlow(step);
|
CalShSupplementFlow(step);
|
||||||
CalVentFlow(step, chamberName);
|
CalVentFlow(step, chamberName);
|
||||||
CheckM3M4M6(step);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#region Gas Flow Calculation
|
#region Gas Flow Calculation
|
||||||
|
|
||||||
protected virtual void CheckM3M4M6(RecipeStep step)
|
|
||||||
{
|
|
||||||
var mfc3 = ((DoubleParam)step.FindParamByControlName(NameDilutionFlowForN2)).Value;
|
|
||||||
var mfc4 = ((DoubleParam)step.FindParamByControlName(NameN2LowFlow)).Value;
|
|
||||||
var mfc6 = ((DoubleParam)step.FindParamByControlName(NameDilutedN2Flow)).Value;
|
|
||||||
|
|
||||||
if (mfc3 + mfc4 > mfc6)
|
public virtual string NameShTotalFlowSplitRatio => "SHTotalFlowSplitRatio";
|
||||||
{
|
|
||||||
step.FindParamByControlName(NameDilutionFlowForN2).ResetCalculatorError();
|
public virtual string NameShPushTotalFlow => "SHSuppTotalFlow";
|
||||||
step.FindParamByControlName(NameN2LowFlow).ResetCalculatorError();
|
|
||||||
step.FindParamByControlName(NameDilutedN2Flow).ResetCalculatorError();
|
public virtual string NameShInnerFlow => "SHInnerFlow";
|
||||||
}
|
|
||||||
else
|
public virtual string NameShMiddleFlow => "SHMiddleFlow";
|
||||||
{
|
|
||||||
step.FindParamByControlName(NameDilutionFlowForN2).SetCalculatorError();
|
public virtual string NameShOuterFlow => "SHOutterFlow";
|
||||||
step.FindParamByControlName(NameN2LowFlow).SetCalculatorError();
|
|
||||||
step.FindParamByControlName(NameDilutedN2Flow).SetCalculatorError();
|
public virtual string NameSHTotalFlow => "SHTotalFlow";
|
||||||
}
|
|
||||||
|
public virtual string NameCarryGasFlow => "Mfc40.Ramp";
|
||||||
|
|
||||||
|
public virtual string NameO2ActualFlow => "O2ActualFlow";
|
||||||
|
|
||||||
|
public virtual string NameO2Flow => "Mfc4.Ramp";
|
||||||
|
|
||||||
|
public virtual string NameDilutedO2Flow => "Mfc6.Ramp";
|
||||||
|
|
||||||
|
public virtual string NameDilutFlow => "Mfc3.Ramp";
|
||||||
|
|
||||||
|
protected virtual void CalO2Flow(RecipeStep currentStep)
|
||||||
|
{
|
||||||
|
var p56 = ((DoubleParam)currentStep.FindParamByControlName(NameO2ActualFlow)).Value;
|
||||||
|
var p57 = ((DoubleParam)currentStep.FindParamByControlName(NameO2Flow)).Value;
|
||||||
|
var p58 = ((DoubleParam)currentStep.FindParamByControlName(NameDilutFlow)).Value;
|
||||||
|
var p59 = (p57 + p58) * p56 / p57;
|
||||||
|
|
||||||
|
((DoubleParam)currentStep.FindParamByControlName(NameDilutedO2Flow)).Value = Math.Round(p59, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual double GetTcsFlow(RecipeStep step, string chamberName)
|
public virtual string NameSource1Flow => "Source1TotalFlow";
|
||||||
|
|
||||||
|
public virtual string NameSource2Flow => "Source2TotalFlow";
|
||||||
|
|
||||||
|
public virtual string NameSource3Flow => "Source3TotalFlow";
|
||||||
|
|
||||||
|
public virtual string NameSource1SplitRatio => "Source1SplitRatio";
|
||||||
|
|
||||||
|
public virtual string NameSource2SplitRatio => "Source2SplitRatio";
|
||||||
|
|
||||||
|
public virtual string NameSource3SplitRatio => "Source3SplitRatio";
|
||||||
|
|
||||||
|
public virtual string NameSource1InnerFlow => "Mfc20.Ramp";
|
||||||
|
|
||||||
|
public virtual string NameSource1MiddleFlow => "Mfc19.Ramp";
|
||||||
|
|
||||||
|
public virtual string NameSource1OuterFlow => "Mfc18.Ramp";
|
||||||
|
|
||||||
|
public virtual string NameSource2InnerFlow => "Mfc23.Ramp";
|
||||||
|
|
||||||
|
public virtual string NameSource2MiddleFlow => "Mfc22.Ramp";
|
||||||
|
|
||||||
|
public virtual string NameSource2OuterFlow => "Mfc21.Ramp";
|
||||||
|
|
||||||
|
public virtual string NameSource3InnerFlow => "Mfc25.Ramp";
|
||||||
|
|
||||||
|
public virtual string NameSource3MiddleFlow => "Mfc24.Ramp";
|
||||||
|
|
||||||
|
public virtual string NameSource3OuterFlow => "Mfc23.Ramp";
|
||||||
|
|
||||||
|
protected virtual void CalSourceFlow(RecipeStep currentStep,string nametotal,string nameratio,string nameinnflow, string namemidflow, string nameoutflow)
|
||||||
{
|
{
|
||||||
var currentTcsBubbleLowFlow = ((DoubleParam)step.FindParamByControlName(NameTcsBubbleLowFlow)).Value;
|
var totalFlow = ((DoubleParam)currentStep.FindParamByControlName(nametotal)).Value;
|
||||||
var currentTcsBubbleHighFlow = ((DoubleParam)step.FindParamByControlName(NameTcsBubbleHighFlow)).Value;
|
var currentRatio = new double[3]; //63
|
||||||
var currentTcsPushFlow = ((DoubleParam)step.FindParamByControlName(NameTcsPushFlow)).Value;
|
if (currentStep.FindParamByControlName(nameratio) is Sets3RatioParam dopRatio)
|
||||||
var currentTcsFlowMode = ((ComboxParam)step.FindParamByControlName(NameTcsFlowMode)).Value;
|
currentRatio = dopRatio.Ratio;
|
||||||
|
|
||||||
var tcsFlow = 0d;
|
double currentInnerFlow = 0;
|
||||||
|
double currentMidFlow = 0;
|
||||||
|
double currentOuterFlow = 0;
|
||||||
|
|
||||||
var tcsEff =
|
if (currentRatio.Length == 3)
|
||||||
(double)QueryDataClient.Instance.Service.GetConfig($"PM.{chamberName}.Efficiency.TCS-Eff");
|
|
||||||
if (currentTcsFlowMode.Equals(FlowModeParam.FlowModeEnum.Run)
|
|
||||||
|| currentTcsFlowMode.Equals(FlowModeParam.FlowModeEnum.Vent))
|
|
||||||
{
|
{
|
||||||
tcsFlow = (currentTcsBubbleHighFlow + currentTcsBubbleLowFlow) * tcsEff + currentTcsPushFlow;
|
var ratioSum = currentRatio[0] + currentRatio[1] + currentRatio[2];
|
||||||
}
|
|
||||||
else if (currentTcsFlowMode.Equals(FlowModeParam.FlowModeEnum.Purge))
|
currentInnerFlow = currentRatio[0]/ ratioSum * totalFlow;
|
||||||
{
|
currentMidFlow = currentRatio[1] / ratioSum * totalFlow;
|
||||||
tcsFlow = currentTcsBubbleHighFlow + currentTcsBubbleLowFlow + currentTcsPushFlow;
|
currentOuterFlow = currentRatio[2] / ratioSum * totalFlow;
|
||||||
}
|
}
|
||||||
|
|
||||||
return tcsFlow;
|
((DoubleParam)currentStep.FindParamByControlName(nameinnflow)).Value = Math.Round(currentInnerFlow, 1);
|
||||||
|
((DoubleParam)currentStep.FindParamByControlName(namemidflow)).Value = Math.Round(currentMidFlow, 1);
|
||||||
|
((DoubleParam)currentStep.FindParamByControlName(nameoutflow)).Value = Math.Round(currentOuterFlow, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual double GetTmaFlow(RecipeStep step, string chamberName)
|
public virtual string NameInnerPushFlow => "Mfc29.Ramp";
|
||||||
{
|
public virtual string NameMiddlePushFlow => "Mfc31.Ramp";
|
||||||
var currentTmaBubbleFlow = ((DoubleParam)step.FindParamByControlName(NameTmaBubbleFlow)).Value;
|
public virtual string NameOuterPushFlow => "Mfc28.Ramp";
|
||||||
var currentTmaPushFlow = ((DoubleParam)step.FindParamByControlName(NameTmaPushFlow)).Value;
|
|
||||||
var currentTmaFlowMode = ((ComboxParam)step.FindParamByControlName(NameTmaFlowMode)).Value;
|
|
||||||
|
|
||||||
var tmaFlow = 0d;
|
|
||||||
var tmaEff =
|
|
||||||
(double)QueryDataClient.Instance.Service.GetConfig($"PM.{chamberName}.Efficiency.TMA-Eff");
|
|
||||||
|
|
||||||
if (currentTmaFlowMode.Equals(FlowModeParam.FlowModeEnum.Run)
|
|
||||||
|| currentTmaFlowMode.Equals(FlowModeParam.FlowModeEnum.Vent))
|
|
||||||
tmaFlow = currentTmaBubbleFlow * tmaEff + currentTmaPushFlow;
|
|
||||||
else if (currentTmaFlowMode.Equals(FlowModeParam.FlowModeEnum.Purge))
|
|
||||||
tmaFlow = currentTmaBubbleFlow + currentTmaPushFlow;
|
|
||||||
|
|
||||||
return tmaFlow;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void CalSiSourceFlow(RecipeStep step)
|
|
||||||
{
|
|
||||||
var currentSiSourSplitRatio = new double[3];
|
|
||||||
if (step.FindParamByControlName(NameSiSourceSplitRatio) is Sets3RatioParam siSourceRatio)
|
|
||||||
currentSiSourSplitRatio = siSourceRatio.Ratio;
|
|
||||||
|
|
||||||
var currentSiSourTotalFlow = ((DoubleParam)step.FindParamByControlName(NameSiSourceTotalFlow)).Value;
|
|
||||||
|
|
||||||
//double currentSiSourPushFlow = currentSiSourTotalFlow - (currentSiH4FlowMode == FlowMode.Run.ToString() ? currentSiH4Flow : 0)
|
|
||||||
// - (currentTCSFlowMode == FlowMode.Run.ToString() ? TCSFlow : 0) - (currentHClFlowMode == FlowMode.Run.ToString() ? currentHClFlow : 0);
|
|
||||||
|
|
||||||
//(currentStep[(int)RecipColNo.SiSourceOuterFlow] as DoubleParam).Value = currentSiSourPushFlow.ToString("F1");
|
|
||||||
|
|
||||||
double currentSiSourInnerFlow = 0;
|
|
||||||
double currentSiSourMidFlow = 0;
|
|
||||||
double currentSiSourOutFlow = 0;
|
|
||||||
|
|
||||||
if (currentSiSourSplitRatio.Length == 3)
|
|
||||||
{
|
|
||||||
var rationSum = currentSiSourSplitRatio[0] + currentSiSourSplitRatio[1] + currentSiSourSplitRatio[2];
|
|
||||||
|
|
||||||
currentSiSourInnerFlow = currentSiSourTotalFlow / rationSum * currentSiSourSplitRatio[0];
|
|
||||||
currentSiSourMidFlow = currentSiSourTotalFlow / rationSum * currentSiSourSplitRatio[1];
|
|
||||||
currentSiSourOutFlow = currentSiSourTotalFlow / rationSum * currentSiSourSplitRatio[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
((DoubleParam)step.FindParamByControlName(NameSiSourceInnerFlow)).Value = Math.Round(currentSiSourInnerFlow, 1);
|
|
||||||
((DoubleParam)step.FindParamByControlName(NameSiSourceMiddleFlow)).Value = Math.Round(currentSiSourMidFlow, 1);
|
|
||||||
((DoubleParam)step.FindParamByControlName(NameSiSourceOuterFlow)).Value = Math.Round(currentSiSourOutFlow, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void CalCSourceFlow(RecipeStep currentStep)
|
|
||||||
{
|
|
||||||
var currentC2H4Flow = ((DoubleParam)currentStep.FindParamByControlName(NameCxHxFlow)).Value;
|
|
||||||
var currentCSourSplitRatio = new double[3];
|
|
||||||
if (currentStep.FindParamByControlName(NameCSourceSplitRatio) is Sets3RatioParam cSourceRatio)
|
|
||||||
currentCSourSplitRatio = cSourceRatio.Ratio;
|
|
||||||
|
|
||||||
var currentCSourTotalFlow = ((DoubleParam)currentStep.FindParamByControlName(NameCSourceTotalFlow)).Value;
|
|
||||||
|
|
||||||
var currentC2H4FlowMode = (currentStep.FindParamByControlName(NameCxHxFlowMode) as ComboxParam)?.Value;
|
|
||||||
var currentCSourPushFlow =
|
|
||||||
currentCSourTotalFlow - (currentC2H4FlowMode != null &&
|
|
||||||
currentC2H4FlowMode.Equals(FlowModeParam.FlowModeEnum.Run)
|
|
||||||
? currentC2H4Flow
|
|
||||||
: 0d);
|
|
||||||
|
|
||||||
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameCSourcePushFlow)).Value = currentCSourPushFlow.Round(1);
|
|
||||||
|
|
||||||
double currentCSourInnerFlow = 0;
|
|
||||||
double currentCSourMidFlow = 0;
|
|
||||||
double currentCSourOuterFlow = 0;
|
|
||||||
|
|
||||||
if (currentCSourSplitRatio.Length == 3)
|
|
||||||
{
|
|
||||||
var ratioSum = currentCSourSplitRatio[0] + currentCSourSplitRatio[1] + currentCSourSplitRatio[2];
|
|
||||||
|
|
||||||
currentCSourInnerFlow = currentCSourTotalFlow / ratioSum * currentCSourSplitRatio[0];
|
|
||||||
currentCSourMidFlow = currentCSourTotalFlow / ratioSum * currentCSourSplitRatio[1];
|
|
||||||
currentCSourOuterFlow = currentCSourTotalFlow / ratioSum * currentCSourSplitRatio[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameCSourceInnerFlow)).Value = currentCSourInnerFlow.Round(1);
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameCSourceMiddleFlow)).Value = currentCSourMidFlow.Round(1);
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameCSourceOuterFlow)).Value = currentCSourOuterFlow.Round(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void CalDopeFlow(RecipeStep currentStep)
|
|
||||||
{
|
|
||||||
var currentDopeTotalFlow = ((DoubleParam)currentStep.FindParamByControlName(NameDopeTotalFlow)).Value;
|
|
||||||
var currentN2ActualFlow = ((DoubleParam)currentStep.FindParamByControlName(NameN2ActualFlow)).Value;
|
|
||||||
var currentN2LowFlow = ((DoubleParam)currentStep.FindParamByControlName(NameN2LowFlow)).Value;
|
|
||||||
var currentDiluFlowForN2 = ((DoubleParam)currentStep.FindParamByControlName(NameDilutionFlowForN2)).Value;
|
|
||||||
|
|
||||||
|
|
||||||
var currentDilutedN2Flow =
|
|
||||||
(currentN2LowFlow + currentDiluFlowForN2) * currentN2ActualFlow / currentN2LowFlow;
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameDilutedN2Flow)).Value = Math.Round(currentDilutedN2Flow, 1);
|
|
||||||
|
|
||||||
|
|
||||||
var currentDopeSplitRatio = new double[3];
|
|
||||||
if (currentStep.FindParamByControlName(NameDopeSplitRatio) is Sets3RatioParam dopRatio)
|
|
||||||
currentDopeSplitRatio = dopRatio.Ratio;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//double currentDopePushFlow = currentDopeTotalFlow
|
|
||||||
// - (currentN2FlowMode == FlowMode.Run.ToString() ? currentDilutedN2Flow : 0)
|
|
||||||
// - (currentN2HighFlowMode == FlowMode.Run.ToString() ? currentN2HighFlow : 0)
|
|
||||||
// - (currentTMAFlowMode == FlowMode.Run.ToString() ? TMAFlow : 0);
|
|
||||||
|
|
||||||
//(currentStep[(int)RecipColNo.DopeOuterFlow] as DoubleParam).Value = currentDopePushFlow.ToString("F1");
|
|
||||||
|
|
||||||
double currentDopeInnerFlow = 0;
|
|
||||||
double currentDopeMidFlow = 0;
|
|
||||||
double currentDopeOuterFlow = 0;
|
|
||||||
|
|
||||||
if (currentDopeSplitRatio.Length == 3)
|
|
||||||
{
|
|
||||||
var ratioSum = currentDopeSplitRatio[0] + currentDopeSplitRatio[1] + currentDopeSplitRatio[2];
|
|
||||||
|
|
||||||
currentDopeInnerFlow = currentDopeTotalFlow / ratioSum * currentDopeSplitRatio[0];
|
|
||||||
currentDopeMidFlow = currentDopeTotalFlow / ratioSum * currentDopeSplitRatio[1];
|
|
||||||
currentDopeOuterFlow = currentDopeTotalFlow / ratioSum * currentDopeSplitRatio[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameDopeInnerFlow)).Value = Math.Round(currentDopeInnerFlow, 1);
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameDopeMiddleFlow)).Value = Math.Round(currentDopeMidFlow, 1);
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameDopeOuterFlow)).Value = Math.Round(currentDopeOuterFlow, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual void CalShSupplementFlow(RecipeStep currentStep)
|
protected virtual void CalShSupplementFlow(RecipeStep currentStep)
|
||||||
{
|
{
|
||||||
var currentSiSourTotalFlow = ((DoubleParam)currentStep.FindParamByControlName(NameSiSourceTotalFlow)).Value;
|
var p2 = ((DoubleParam)currentStep.FindParamByControlName(NameSHTotalFlow)).Value;
|
||||||
var currentCSourTotalFlow = ((DoubleParam)currentStep.FindParamByControlName(NameCSourceTotalFlow)).Value;
|
var p3 = ((DoubleParam)currentStep.FindParamByControlName(NameCarryGasFlow)).Value;
|
||||||
var currentDopeTotalFlow = ((DoubleParam)currentStep.FindParamByControlName(NameDopeTotalFlow)).Value;
|
var p22 = ((DoubleParam)currentStep.FindParamByControlName(NameSource1Flow)).Value;
|
||||||
|
var p40 = ((DoubleParam)currentStep.FindParamByControlName(NameSource2Flow)).Value;
|
||||||
var currentShTotalFlow = ((DoubleParam)currentStep.FindParamByControlName(NameShTotalFlow)).Value;
|
var p54 = ((DoubleParam)currentStep.FindParamByControlName(NameSource3Flow)).Value;
|
||||||
var currentSurroundingFlow = ((DoubleParam)currentStep.FindParamByControlName(NameCarryGasFlow)).Value;
|
var p68 = p2 - p3 - p22 - p40 - p54;
|
||||||
|
((DoubleParam)currentStep.FindParamByControlName(NameShPushTotalFlow)).Value = Math.Round(p68, 1);
|
||||||
|
|
||||||
var currentSiSourInnerFlow = ((DoubleParam)currentStep.FindParamByControlName(NameSiSourceInnerFlow)).Value;
|
|
||||||
var currentSiSourMidFlow = ((DoubleParam)currentStep.FindParamByControlName(NameSiSourceMiddleFlow)).Value;
|
|
||||||
|
|
||||||
var currentCSourInnerFlow = ((DoubleParam)currentStep.FindParamByControlName(NameCSourceInnerFlow)).Value;
|
|
||||||
var currentCSourMidFlow = ((DoubleParam)currentStep.FindParamByControlName(NameCSourceMiddleFlow)).Value;
|
|
||||||
|
|
||||||
var currentDopeInnerFlow = ((DoubleParam)currentStep.FindParamByControlName(NameDopeInnerFlow)).Value;
|
|
||||||
var currentDopeMidFlow = ((DoubleParam)currentStep.FindParamByControlName(NameDopeMiddleFlow)).Value;
|
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
var totalFlow = p2 - p3;
|
||||||
var currentShTotalFlowSplitRatio = new double[3];
|
var currentShTotalFlowSplitRatio = new double[3];
|
||||||
if (currentStep.FindParamByControlName(NameShTotalFlowSplitRatio) is Sets3RatioParam shTotalRatio)
|
if (currentStep.FindParamByControlName(NameShTotalFlowSplitRatio) is Sets3RatioParam shTotalRatio)
|
||||||
currentShTotalFlowSplitRatio = shTotalRatio.Ratio;
|
currentShTotalFlowSplitRatio = shTotalRatio.Ratio;
|
||||||
|
|
||||||
|
|
||||||
var currentShSuppTotalFlow = currentShTotalFlow - currentSurroundingFlow - currentSiSourTotalFlow -
|
|
||||||
currentCSourTotalFlow - currentDopeTotalFlow;
|
|
||||||
var sumShTotalFlowSplitRatio = currentShTotalFlowSplitRatio[0] + currentShTotalFlowSplitRatio[1] +
|
var sumShTotalFlowSplitRatio = currentShTotalFlowSplitRatio[0] + currentShTotalFlowSplitRatio[1] +
|
||||||
currentShTotalFlowSplitRatio[2];
|
currentShTotalFlowSplitRatio[2];
|
||||||
var currentShInnerFlow = (currentShTotalFlow - currentSurroundingFlow) / sumShTotalFlowSplitRatio *
|
var currentShInnerFlow = currentShTotalFlowSplitRatio[0] / sumShTotalFlowSplitRatio * totalFlow;
|
||||||
currentShTotalFlowSplitRatio[0];
|
var currentShMidFlow = currentShTotalFlowSplitRatio[1] / sumShTotalFlowSplitRatio * totalFlow;
|
||||||
var currentShMidFlow = (currentShTotalFlow - currentSurroundingFlow) / sumShTotalFlowSplitRatio *
|
var currentShOutterFlow = currentShTotalFlowSplitRatio[2] / sumShTotalFlowSplitRatio * totalFlow;
|
||||||
currentShTotalFlowSplitRatio[1];
|
|
||||||
var currentShOutterFlow = (currentShTotalFlow - currentSurroundingFlow) / sumShTotalFlowSplitRatio *
|
|
||||||
currentShTotalFlowSplitRatio[2];
|
|
||||||
var currentInnerSuppFlow = currentShInnerFlow - currentSiSourInnerFlow - currentCSourInnerFlow -
|
|
||||||
currentDopeInnerFlow;
|
|
||||||
var currentMidSuppFlow = currentShMidFlow - currentSiSourMidFlow - currentCSourMidFlow - currentDopeMidFlow;
|
|
||||||
var currentOutterSuppFlow = currentShSuppTotalFlow - currentInnerSuppFlow - currentMidSuppFlow;
|
|
||||||
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameShPushTotalFlow)).Value = Math.Round(currentShSuppTotalFlow, 1);
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameShInnerFlow)).Value = Math.Round(currentShInnerFlow, 1);
|
((DoubleParam)currentStep.FindParamByControlName(NameShInnerFlow)).Value = Math.Round(currentShInnerFlow, 1);
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameShMiddleFlow)).Value = Math.Round(currentShMidFlow, 1);
|
((DoubleParam)currentStep.FindParamByControlName(NameShMiddleFlow)).Value = Math.Round(currentShMidFlow, 1);
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameShOuterFlow)).Value = Math.Round(currentShOutterFlow, 1);
|
((DoubleParam)currentStep.FindParamByControlName(NameShOuterFlow)).Value = Math.Round(currentShOutterFlow, 1);
|
||||||
|
|
||||||
|
//-------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
var p37 = ((DoubleParam)currentStep.FindParamByControlName(NameSource1InnerFlow)).Value;
|
||||||
|
var p51 = ((DoubleParam)currentStep.FindParamByControlName(NameSource2InnerFlow)).Value;
|
||||||
|
var p65 = ((DoubleParam)currentStep.FindParamByControlName(NameSource3InnerFlow)).Value;
|
||||||
|
|
||||||
|
var p38 = ((DoubleParam)currentStep.FindParamByControlName(NameSource1MiddleFlow)).Value;
|
||||||
|
var p52 = ((DoubleParam)currentStep.FindParamByControlName(NameSource2MiddleFlow)).Value;
|
||||||
|
var p66 = ((DoubleParam)currentStep.FindParamByControlName(NameSource3MiddleFlow)).Value;
|
||||||
|
|
||||||
|
var currentInnerSuppFlow = currentShInnerFlow - p37 - p51 -p65;
|
||||||
|
var currentMidSuppFlow = currentShMidFlow - p38 - p52 - p66;
|
||||||
|
var currentOutterSuppFlow = p68 - currentInnerSuppFlow - currentMidSuppFlow;
|
||||||
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameInnerPushFlow)).Value = Math.Round(currentInnerSuppFlow, 1);
|
((DoubleParam)currentStep.FindParamByControlName(NameInnerPushFlow)).Value = Math.Round(currentInnerSuppFlow, 1);
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameMiddlePushFlow)).Value = Math.Round(currentMidSuppFlow, 1);
|
((DoubleParam)currentStep.FindParamByControlName(NameMiddlePushFlow)).Value = Math.Round(currentMidSuppFlow, 1);
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameOuterPushFlow)).Value = Math.Round(currentOutterSuppFlow, 1);
|
((DoubleParam)currentStep.FindParamByControlName(NameOuterPushFlow)).Value = Math.Round(currentOutterSuppFlow, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public const string NameMoCO6FlowMode = "MoCO6Flow";
|
||||||
|
public const string NameMoFlowMode = "MoFlow";
|
||||||
|
public const string NameWCO6FlowMode = "WCO6Flow";
|
||||||
|
public const string NameCS2FlowMode = "CS2Flow";
|
||||||
|
public const string NameH2SFlowMode = "H2SFlow";
|
||||||
|
public const string NameH2SEFlowMode = "H2SEFlow";
|
||||||
|
public const string NameO2FlowMode = "O2Flow";
|
||||||
|
public const string NameSO2FlowMode = "SO2Flow";
|
||||||
|
|
||||||
|
public const string NameMoCO6CarrierFlow = "Mfc9.Ramp";
|
||||||
|
public const string NameMoCO6PushFlow = "Mfc10.Ramp";
|
||||||
|
public const string NameMoCarrierFlow = "Mfc16.Ramp";
|
||||||
|
public const string NameMoPushFlow = "Mfc17.Ramp";
|
||||||
|
public const string NameWCO6CarrierFlow = "Mfc7.Ramp";
|
||||||
|
public const string NameWCO6PushFlow = "Mfc8.Ramp";
|
||||||
|
public const string NameCS2CarrierFlow = "Mfc11.Ramp";
|
||||||
|
public const string NameCS2PushFlow = "Mfc12.Ramp";
|
||||||
|
public const string NameH2SFlow = "Mfc13.Ramp";
|
||||||
|
public const string NameH2SeFlow = "Mfc14.Ramp";
|
||||||
|
//public const string NameO2Flow = "Mfc4.Ramp";
|
||||||
|
public const string NameSO2Flow = "Mfc15.Ramp";
|
||||||
|
|
||||||
|
public const string NameTotalVentFlow = "TotalVentFlow";
|
||||||
|
public const string NameVentPushFlow = "Mfc1.Ramp";
|
||||||
protected virtual void CalVentFlow(RecipeStep currentStep, string chamberName)
|
protected virtual void CalVentFlow(RecipeStep currentStep, string chamberName)
|
||||||
{
|
{
|
||||||
var currentSiH4Flow = ((DoubleParam)currentStep.FindParamByControlName(NameSiH4Flow)).Value;
|
var p82 = ((DoubleParam)currentStep.FindParamByControlName(NameTotalVentFlow)).Value;
|
||||||
var currentTotalVentFlow = ((DoubleParam)currentStep.FindParamByControlName(NameTotalVentFlow)).Value;
|
var bool23 = ((ComboxParam)currentStep.FindParamByControlName(NameMoCO6FlowMode)).Value;
|
||||||
var currentHClFlow = ((DoubleParam)currentStep.FindParamByControlName(NameHclFlow)).Value;
|
var bool27 = ((ComboxParam)currentStep.FindParamByControlName(NameMoFlowMode)).Value;
|
||||||
var currentN2HighFlow = ((DoubleParam)currentStep.FindParamByControlName(NameN2HighFlow)).Value;
|
var bool31 = ((ComboxParam)currentStep.FindParamByControlName(NameWCO6FlowMode)).Value;
|
||||||
var currentC2H4Flow = ((DoubleParam)currentStep.FindParamByControlName(NameCxHxFlow)).Value;
|
var bool41 = ((ComboxParam)currentStep.FindParamByControlName(NameCS2FlowMode)).Value;
|
||||||
var currentDilutedN2Flow = ((DoubleParam)currentStep.FindParamByControlName(NameDilutedN2Flow)).Value;
|
var bool45 = ((ComboxParam)currentStep.FindParamByControlName(NameH2SFlowMode)).Value;
|
||||||
|
var bool47 = ((ComboxParam)currentStep.FindParamByControlName(NameH2SEFlowMode)).Value;
|
||||||
|
var bool55 = ((ComboxParam)currentStep.FindParamByControlName(NameO2FlowMode)).Value;
|
||||||
|
var bool61 = ((ComboxParam)currentStep.FindParamByControlName(NameSO2FlowMode)).Value;
|
||||||
|
double x = 0;
|
||||||
|
|
||||||
var currentN2FlowMode = ((ComboxParam)currentStep.FindParamByControlName(NameN2FlowMode)).Value;
|
if (bool23 != null && bool23.Equals(FlowModeParam.FlowModeEnum.Run) == false)
|
||||||
var currentN2HighFlowMode = ((ComboxParam)currentStep.FindParamByControlName(NameN2HighFlowMode)).Value;
|
{
|
||||||
var currentSiH4FlowMode = (currentStep.FindParamByControlName(NameSiH4FlowMode) as ComboxParam)?.Value;
|
x += ((DoubleParam)currentStep.FindParamByControlName(NameMoCO6CarrierFlow)).Value + ((DoubleParam)currentStep.FindParamByControlName(NameMoCO6PushFlow)).Value;
|
||||||
var currentTcsFlowMode = (currentStep.FindParamByControlName(NameTcsFlowMode) as ComboxParam)?.Value;
|
}
|
||||||
var currentHClFlowMode = (currentStep.FindParamByControlName(NameHclFlowMode) as ComboxParam)?.Value;
|
if (bool27 != null && bool27.Equals(FlowModeParam.FlowModeEnum.Run) == false)
|
||||||
var currentC2H4FlowMode = (currentStep.FindParamByControlName(NameCxHxFlowMode) as ComboxParam)?.Value;
|
{
|
||||||
var currentTmaFlowMode = ((ComboxParam)currentStep.FindParamByControlName(NameTmaFlowMode)).Value;
|
x += ((DoubleParam)currentStep.FindParamByControlName(NameMoCarrierFlow)).Value + ((DoubleParam)currentStep.FindParamByControlName(NameMoPushFlow)).Value;
|
||||||
|
}
|
||||||
|
if (bool31 != null && bool31.Equals(FlowModeParam.FlowModeEnum.Run) == false)
|
||||||
|
{
|
||||||
|
x += ((DoubleParam)currentStep.FindParamByControlName(NameWCO6CarrierFlow)).Value + ((DoubleParam)currentStep.FindParamByControlName(NameWCO6PushFlow)).Value;
|
||||||
|
}
|
||||||
|
if (bool41 != null && bool41.Equals(FlowModeParam.FlowModeEnum.Run) == false)
|
||||||
|
{
|
||||||
|
x += ((DoubleParam)currentStep.FindParamByControlName(NameCS2CarrierFlow)).Value + ((DoubleParam)currentStep.FindParamByControlName(NameCS2PushFlow)).Value;
|
||||||
|
}
|
||||||
|
if (bool45 != null && bool45.Equals(FlowModeParam.FlowModeEnum.Run) == false)
|
||||||
|
{
|
||||||
|
x += ((DoubleParam)currentStep.FindParamByControlName(NameH2SFlow)).Value;
|
||||||
|
}
|
||||||
|
if (bool47 != null && bool47.Equals(FlowModeParam.FlowModeEnum.Run) == false)
|
||||||
|
{
|
||||||
|
x += ((DoubleParam)currentStep.FindParamByControlName(NameH2SeFlow)).Value;
|
||||||
|
}
|
||||||
|
if (bool55 != null && bool55.Equals(FlowModeParam.FlowModeEnum.Run) == false)
|
||||||
|
{
|
||||||
|
x += ((DoubleParam)currentStep.FindParamByControlName(NameO2Flow)).Value;
|
||||||
|
}
|
||||||
|
if (bool61 != null && bool61.Equals(FlowModeParam.FlowModeEnum.Run) == false)
|
||||||
|
{
|
||||||
|
x += ((DoubleParam)currentStep.FindParamByControlName(NameSO2Flow)).Value;
|
||||||
|
}
|
||||||
|
|
||||||
var tcsFlow = GetTcsFlow(currentStep, chamberName);
|
((DoubleParam)currentStep.FindParamByControlName(NameVentPushFlow)).Value = Math.Round(p82 - x, 1);
|
||||||
var tmaFlow = GetTmaFlow(currentStep, chamberName);
|
|
||||||
|
|
||||||
var currentSiSourTotalFlowForPurge =
|
|
||||||
(currentSiH4FlowMode != null && currentSiH4FlowMode.Equals(FlowModeParam.FlowModeEnum.Run) == false
|
|
||||||
? currentSiH4Flow
|
|
||||||
: 0d)
|
|
||||||
+ (currentTcsFlowMode != null && currentTcsFlowMode.Equals(FlowModeParam.FlowModeEnum.Run) == false
|
|
||||||
? tcsFlow
|
|
||||||
: 0d) +
|
|
||||||
(currentHClFlowMode != null && currentHClFlowMode.Equals(FlowModeParam.FlowModeEnum.Run) == false
|
|
||||||
? currentHClFlow
|
|
||||||
: 0d);
|
|
||||||
|
|
||||||
var currentCSourTotalFlowForPurge =
|
|
||||||
currentC2H4FlowMode != null && currentC2H4FlowMode.Equals(FlowModeParam.FlowModeEnum.Run) == false
|
|
||||||
? currentC2H4Flow
|
|
||||||
: 0d;
|
|
||||||
|
|
||||||
|
|
||||||
var n2Flow = (currentN2FlowMode.Equals(FlowModeParam.FlowModeEnum.Run) == false
|
|
||||||
? currentDilutedN2Flow
|
|
||||||
: 0d) +
|
|
||||||
(currentN2HighFlowMode.Equals(FlowModeParam.FlowModeEnum.Run) == false
|
|
||||||
? currentN2HighFlow
|
|
||||||
: 0d);
|
|
||||||
|
|
||||||
var currentDopeTotalFlowForPurge = n2Flow +
|
|
||||||
(currentTmaFlowMode.Equals(FlowModeParam.FlowModeEnum.Run) == false
|
|
||||||
? tmaFlow
|
|
||||||
: 0d);
|
|
||||||
|
|
||||||
var currentVentPushFlow = currentTotalVentFlow - currentSiSourTotalFlowForPurge -
|
|
||||||
currentCSourTotalFlowForPurge - currentDopeTotalFlowForPurge;
|
|
||||||
|
|
||||||
((DoubleParam)currentStep.FindParamByControlName(NameVentPushFlow)).Value = Math.Round(currentVentPushFlow, 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user