diff --git a/FrameworkLocal/UIClient/CenterViews/Configs/SystemConfig/SystemConfigViewModel.cs b/FrameworkLocal/UIClient/CenterViews/Configs/SystemConfig/SystemConfigViewModel.cs
index 5e76767..4c4e47a 100644
--- a/FrameworkLocal/UIClient/CenterViews/Configs/SystemConfig/SystemConfigViewModel.cs
+++ b/FrameworkLocal/UIClient/CenterViews/Configs/SystemConfig/SystemConfigViewModel.cs
@@ -266,6 +266,28 @@ namespace MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig
item.TextSaved = true;
Reload();
+ //
+ if(key == "PM.PM1.PT.PT1Offset"
+ || key == "PM.PM1.PT.PT2Offset"
+ )
+ {
+ SetPTOffset(key,value);
+ }
+ }
+
+
+
+ private void SetPTOffset(string sKey, string sValue)
+ {
+ if (sKey == "PM.PM1.PT.PT1Offset")
+ {
+ InvokeClient.Instance.Service.DoOperation($"PM1.PT1Offset.SetSCPTOffset", new object[] { "PT1Offset", sValue});
+ }
+ else if(sKey == "PM.PM1.PT.PT2Offset")
+ {
+ InvokeClient.Instance.Service.DoOperation($"PM1.PT2Offset.SetSCPTOffset", new object[] { "PT2Offset", sValue });
+ }
+
}
public void Reload()
diff --git a/Modules/Mainframe/LLs/LoadLockModule.cs b/Modules/Mainframe/LLs/LoadLockModule.cs
index 2783d42..b4169f8 100644
--- a/Modules/Mainframe/LLs/LoadLockModule.cs
+++ b/Modules/Mainframe/LLs/LoadLockModule.cs
@@ -478,7 +478,7 @@ namespace Mainframe.LLs
QueueRoutine.Clear();
ModuleName mod = (ModuleName)param[0];
- if (mod == ModuleName.TrayRobot)
+ if (mod == ModuleName.TrayRobot || mod == ModuleName.WaferRobot)
{
//if ((EnumTransferType)param[2] == EnumTransferType.Place)
{
diff --git a/Modules/SicPM/Config/DeviceModelPM.xml b/Modules/SicPM/Config/DeviceModelPM.xml
index 7958799..ed62462 100644
--- a/Modules/SicPM/Config/DeviceModelPM.xml
+++ b/Modules/SicPM/Config/DeviceModelPM.xml
@@ -236,12 +236,17 @@
diDryPump1Warning="DI_PM1DryPump1Warning"/>
+
+
+
+
+
-
+
diff --git a/Modules/SicPM/Config/_ioDefinePM.xml b/Modules/SicPM/Config/_ioDefinePM.xml
index 24ddf26..b49465e 100644
--- a/Modules/SicPM/Config/_ioDefinePM.xml
+++ b/Modules/SicPM/Config/_ioDefinePM.xml
@@ -2,8 +2,7 @@
-
-
+
diff --git a/Modules/SicPM/Devices/IoTC.cs b/Modules/SicPM/Devices/IoTC.cs
index ac4d010..6983ed9 100644
--- a/Modules/SicPM/Devices/IoTC.cs
+++ b/Modules/SicPM/Devices/IoTC.cs
@@ -587,19 +587,7 @@ namespace SicPM.Devices
L3TargetSPSetPoint = 600;
}
break;
- case 1:
- strHeaterMode = "TC";
- L1LoopModeSetPoint = 1;
- if (L2LoopModeSetPoint == 1)
- {
- _rampTimerL2.Stop();
- L2TargetSPSetPoint = L2InputTempSetPoint;
- }
- L2LoopModeSetPoint = 0;
- L3LoopModeSetPoint = 1;
- TCPyroModeSetPoint = 0;
- break;
- case 2:
+ case 1:
strHeaterMode = "Pyro";
if (L1LoopModeSetPoint == 1)
{
@@ -649,17 +637,7 @@ namespace SicPM.Devices
TCPyroModeSetPoint = 0;
break;
case 1:
- strHeaterMode = "TC";
- L1LoopModeSetPoint = 1;
- L2LoopModeSetPoint = 1;
- if (L3LoopModeSetPoint != 0)
- {
- L3TargetSPSetPoint = L3PVFeedBack;
- }
- L3LoopModeSetPoint = 0;
- TCPyroModeSetPoint = 0;
- break;
- case 2:
+
strHeaterMode = "Pyro";
L1LoopModeSetPoint = 1;
L2LoopModeSetPoint = 1;
diff --git a/Modules/SicPM/Routines/PMCleanRoutine.cs b/Modules/SicPM/Routines/PMCleanRoutine.cs
index a47cefd..b9445e0 100644
--- a/Modules/SicPM/Routines/PMCleanRoutine.cs
+++ b/Modules/SicPM/Routines/PMCleanRoutine.cs
@@ -20,6 +20,7 @@ namespace SicPM.Routines
RotationEnable,
HeatEnable,
VentPumpClose,
+ VentPumpOpen,
ArSupply,
SetGroupB,
@@ -34,6 +35,7 @@ namespace SicPM.Routines
SetM1to16,
SetPC,
SetGroupJ,
+ SetGroupJ_1,
SetM291519to38,
SetGasOut,
@@ -64,8 +66,8 @@ namespace SicPM.Routines
PressureTo1050,
SetPressureUp,
+ SetPressureUp1,
SetPressureDown,
- VentPumpOpen,
PressureToMax,
PressureToMin,
@@ -84,8 +86,7 @@ namespace SicPM.Routines
SetV76,
SetV75,
- SetV751,
- SetV761,
+ SetTVto300,
CheckPM1000,
SetMfc28to40Special,
@@ -107,12 +108,28 @@ namespace SicPM.Routines
SetPressureDown1,
SetMfc28to31Default1,
CheckFinal1Open,
- SetGroupV25,
+ SetGroupV25,
+ CloseGroupV25,
SetM39,
CheckEPV1Open1,
CheckEPV2Open1,
CheckTVOpen1,
CheckEPV1Open2,
+ SetTVEnable,
+ SetTVPressMode,
+ SetTv1,
+ SetM2toM40,
+ SetV31,
+ SetV32,
+ SetV35V36,
+ WaitTv1,
+ SetTVPositionMode,
+ SetTVPositionMax,
+ SetTVPressMode1,
+ SetM2TOM40Default,
+ SetM2toM40_1,
+ SetMfc27to40Default,
+
SetV92V93V95,
SetV94,
@@ -170,20 +187,11 @@ namespace SicPM.Routines
private int _IoValueOpenCloseTimeout = 10; //开关阀门超时时间
private double _pmPressureMaxDiff; //蝶阀与目标压力的差值范围(认为调整到位了)
private int _throttleTimeout; //蝶阀调整到指定压力的超时时间
- private int _EPV2OpenTimeDelay =10; //EPV2
- private int _waitChamberTo1000TimeOut = 180; //等待腔体压力上升到1000的超时时间
- private double _mfc28SpecialFlow = 15000;
- private double _mfc29SpecialFlow = 5000;
- private double _mfc31SpecialFlow = 10000;
- private double _mfc40SpecialFlow = 10000;
- private double _ventBasePressure = 1000;
-
- //private int _EPV2OpenDelayTime = 9;
+ private double _throttleFinalPressure = 300;//蝶阀最终调整对的压力
private int _pmCleanTime = 20;
- //private int _routineTimeOut;
private Stopwatch _swTimer = new Stopwatch();
@@ -201,10 +209,6 @@ namespace SicPM.Routines
{
Reset();
- _mfc28SpecialFlow = SC.GetValue($"PM.{Module}.Mfc28FlowSpecail");
- _mfc29SpecialFlow = SC.GetValue($"PM.{Module}.Mfc29FlowSpecail");
- _mfc31SpecialFlow = SC.GetValue($"PM.{Module}.Mfc31FlowSpecail");
- _mfc40SpecialFlow = SC.GetValue($"PM.{Module}.Mfc40FlowSpecail");
_pmPressureMaxDiff = SC.GetValue($"PM.{Module}.ThrottlePressureMaxDiff");
_throttleTimeout = SC.GetValue($"PM.{Module}.ThrottlePressureTimeout");
@@ -217,9 +221,7 @@ namespace SicPM.Routines
_pressureMaxTimeout = SC.GetValue($"PM.{Module}.Clean.VentTimeout");
_pmCleanTime = SC.GetValue($"PM.{Module}.Clean.CleanTime");
- //_EPV2OpenDelayTime = SC.GetValue($"PM.{Module}.TimeDelayAlterEPV2Open");
-
- _ventBasePressure = SC.GetValue($"PM.{Module}.Clean.VentBasePressure");
+ _throttleFinalPressure = SC.GetValue($"PM.{Module}.Clean.FinalPressure");
//Purge Succeed 清掉
_pmIoInterLock.DoLidOpenRoutineSucceed = false;
@@ -241,150 +243,143 @@ namespace SicPM.Routines
return Result.RUN;
}
- //PM Clean
public override Result Monitor()
{
try
{
+ //CheckRoutineTimeOut();
- if (SC.GetValue("System.IsATMMode"))
- {
- return Result.DONE;
- }
+ //关闭V76,打开V75
+ SetIoValueByGroup((int)RoutineStep.SetV76, IoGroupName.V76, false, _IoValueOpenCloseTimeout);
+ SetIoValueByGroup((int)RoutineStep.SetV75, IoGroupName.V75, true, _IoValueOpenCloseTimeout);
+
+ //旋转停止,加热停止
SetHeatEnable((int)RoutineStep.HeatEnable, false, _heatTimeOut);
- SetRotationValve((int)RoutineStep.RotationEnable, _rotationCheckSpeed,false, _rotationCloseTimeout);
+ SetRotationValve((int)RoutineStep.RotationEnable, _rotationCheckSpeed, false, _rotationCloseTimeout);
+ //关闭V72,打开V25
SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, false, _IoValueOpenCloseTimeout);
- SetIoValueByGroup((int)RoutineStep.ArSupply, IoGroupName.ArSupply, true, _IoValueOpenCloseTimeout);
+ SetIoValueByGroup((int)RoutineStep.SetGroupV25, IoGroupName.V25, true, _IoValueOpenCloseTimeout);
+ //打开V31,打开V32
+ SetIoValueByGroup((int)RoutineStep.SetV31, IoGroupName.V31, true, _IoValueOpenCloseTimeout);
+ SetIoValueByGroup((int)RoutineStep.SetV32, IoGroupName.V32, true, _IoValueOpenCloseTimeout);
+
+ //打开V35,打开V36
+ SetIoValueByGroup((int)RoutineStep.SetV35V36, IoGroupName.V35V36, true, _IoValueOpenCloseTimeout);
+
+ //关闭B/C/E/F/H/K 阀门
SetIoValueByGroup((int)RoutineStep.SetGroupB, IoGroupName.B, false, _IoValueOpenCloseTimeout);
SetIoValueByGroup((int)RoutineStep.SetGroupC, IoGroupName.C, false, _IoValueOpenCloseTimeout);
SetIoValueByGroup((int)RoutineStep.SetGroupE, IoGroupName.E, false, _IoValueOpenCloseTimeout);
SetIoValueByGroup((int)RoutineStep.SetGroupF, IoGroupName.F, false, _IoValueOpenCloseTimeout);
SetIoValueByGroup((int)RoutineStep.SetGroupH, IoGroupName.H, false, _IoValueOpenCloseTimeout);
SetIoValueByGroup((int)RoutineStep.SetGroupK, IoGroupName.K, false, _IoValueOpenCloseTimeout);
- SetIoValueByGroup((int)RoutineStep.SetGroupV25, IoGroupName.V25, true, _IoValueOpenCloseTimeout);
+ //打开D/G 阀门
SetIoValueByGroup((int)RoutineStep.SetGroupD, IoGroupName.D, true, _IoValueOpenCloseTimeout);
SetIoValueByGroup((int)RoutineStep.SetGroupG, IoGroupName.G, true, _IoValueOpenCloseTimeout);
- SetIoValueByGroup((int)RoutineStep.SetV76, IoGroupName.V76, false, _IoValueOpenCloseTimeout);
- SetIoValueByGroup((int)RoutineStep.SetV75, IoGroupName.V75, true, _IoValueOpenCloseTimeout);
-
+ //设置MFC和PC的模式
SetMfcModeToNormalByGroup((int)RoutineStep.SetMFCMode, MfcGroupName.All);
SetPcModeToNormal((int)RoutineStep.SetPCMode, _lstPcList);
+ //打开J阀门
+ SetIoValueByGroup((int)RoutineStep.SetGroupJ, IoGroupName.J, true, _IoValueOpenCloseTimeout);
+ //M1-M16设定为default值(M2、M9、M15除外)
SetMfcToDefaultByGroup((int)RoutineStep.SetM1to16, MfcGroupName.M1to16, 0);
+
+ //设置所有PC到默认值
SetPcToDefault((int)RoutineStep.SetPC, _lstPcList);
- CheckFinalIoStatue((int)RoutineStep.CheckFinal1Open);
- if (!_finalOpen)
- {
- SetMfcByGroup((int)RoutineStep.SetM291519to38, MfcGroupName.M2toM40, 0, 5);
- TimeDelay((int)RoutineStep.TimeDelay1, 5);
- }
+ //设置M2,M9,M15,M19-M26 3s ramp 到default 值
+ SetMfcToDefaultByGroup((int)RoutineStep.SetM291519to26, MfcGroupName.M2toM26, 3);
- GetPressureConditionPT2((int)RoutineStep.CheckPMPt21000, 1000);
- if (!_checkPMPt2Over1000)
- {
- SetThrottleToCloseMode((int)RoutineStep.SetTVCloseMode, _IoThrottle, 8);
- SetThrottleDisable((int)RoutineStep.SetTvPositionToZero, _IoThrottle, 8);
- TimeDelay((int)RoutineStep.TimeDelay18, 1);
- }
+ //打开EPV2
+ SetIoValueByGroup((int)RoutineStep.SetEPV2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout);
+ TimeDelay((int)RoutineStep.TimeDelay1, 3);
+
+ //设置蝶阀Enable
+ SetThrottleEnableAndWait((int)RoutineStep.SetTVEnable, _IoThrottle, 5);
+
+ //设置蝶阀为压力模式
+ SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode, _IoThrottle, 5);
+
+ //伺服压力设定值到0mbar
+ SetThrottlePressureAndWaitSetPoint((int)RoutineStep.SetTv1, _IoThrottle, _pressureMin, _pmPressureMaxDiff, _throttleTimeout);
+
+ //M2、M9、M15、M19-M40 MFC 3s ramp到0
+ SetMfcByGroup((int)RoutineStep.SetM2toM40, MfcGroupName.M2toM40, 0, 3);
+
+ //等待腔体压力Pump到设定值
+ WaitChamberPressDownTo((int)RoutineStep.WaitTv1, _pressureMin, _pmPressureMaxDiff, _throttleTimeout);
+
+ //蝶阀设置为位置模式,开度设置为最大
+ SetThrottleToPositionMode((int)RoutineStep.SetTVPositionMode, _IoThrottle, _throttleTimeout);
+ SetThrottleSetPosition((int)RoutineStep.SetTVPositionMax, _IoThrottle, 100, _throttleTimeout);
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//打开Final valves 和对应的MFC值
SetIoValueByGroup((int)RoutineStep.OpenFinal2, IoGroupName.Final2, true, _IoValueOpenCloseTimeout);
SetMfcToDefaultByGroup((int)RoutineStep.SetMfcFinal2, MfcGroupName.Final2, 3);
- TimeDelay((int)RoutineStep.TimeDelay3, 3);
- //SetIoValueByGroup((int)RoutineStep.OpenFinal1, IoGroupName.Final1, true, _IoValueOpenCloseTimeout);
- //SetMfcToDefaultByGroup((int)RoutineStep.SetMfcFinal1, MfcGroupName.Final1, 3);
+ TimeDelay((int)RoutineStep.TimeDelay2, 3);
- //修改打开Final1的MFC和阀的开关流程
- //1.打开V92,V93和V95,再打开V94,在打开V96,在打开V68
+ //打开V92,V93和V95,再打开V94,在打开V96,在打开V68
SetIoValueByGroup((int)RoutineStep.SetV92V93V95, IoGroupName.V92V93V95, true, _IoValueOpenCloseTimeout);
- TimeDelay((int)RoutineStep.TimeDelay20, 3);
+ TimeDelay((int)RoutineStep.TimeDelay3, 3);
SetIoValueByGroup((int)RoutineStep.SetV94, IoGroupName.V94, true, _IoValueOpenCloseTimeout);
- TimeDelay((int)RoutineStep.TimeDelay21, 3);
+ TimeDelay((int)RoutineStep.TimeDelay4, 3);
SetIoValueByGroup((int)RoutineStep.SetV96, IoGroupName.V96, true, _IoValueOpenCloseTimeout);
- TimeDelay((int)RoutineStep.TimeDelay22, 3);
+ TimeDelay((int)RoutineStep.TimeDelay5, 3);
SetIoValueByGroup((int)RoutineStep.SetV68, IoGroupName.GasIn1, true, _IoValueOpenCloseTimeout);
- //2.设置M32,M35,M37到默认值,再设置M36,延时2s,再设置M38,不用Ramp
+ //设置M32,M35,M37到默认值,再设置M36,延时2s,再设置M38,不用Ramp
SetMfcToDefaultByGroup((int)RoutineStep.SetM32M35M37, MfcGroupName.M32M35M37, 5);
SetMfcToDefaultByGroup((int)RoutineStep.SetM36, MfcGroupName.M36, 5);
- TimeDelay((int)RoutineStep.TimeDelay10, 2);
+ TimeDelay((int)RoutineStep.TimeDelay6, 2);
SetMfcToDefaultByGroup((int)RoutineStep.SetM38, MfcGroupName.M38, 5);
- TimeDelay((int)RoutineStep.TimeDelay4, 3);
- //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ TimeDelay((int)RoutineStep.TimeDelay7, 3);
+ //设置蝶阀为压力模式
+ SetThrottleToPressModeAndWait((int)RoutineStep.SetTVPressMode1, _IoThrottle, 5);
- //4.打开J Valves
- SetIoValueByGroup((int)RoutineStep.SetGroupJOpen, IoGroupName.J, true, _IoValueOpenCloseTimeout);
- SetMfcToDefaultByGroup((int)RoutineStep.SetM291519to26, MfcGroupName.M2toM26, 3);
-
-
- if (!_checkPMPt2Over1000)
- {
- //判断反应腔压力是否超过1000mbar
- GetPressureCondition((int)RoutineStep.CheckPM1000, _ventBasePressure);
- if (!_checkPMPressureOver1000)
- {
- //设置M28,M29,M31,M40 为特定值
- SetMfc28to40Special((int)RoutineStep.SetMfc28to40Special, _mfc28SpecialFlow, _mfc29SpecialFlow, _mfc31SpecialFlow, _mfc40SpecialFlow, 1);
- }
-
- //等待反应腔压力到达1000
- NotifyInfo((int)RoutineStep.Notify1, $"Wait PM Pressure over {_ventBasePressure} mbar");
- WaitChamberPressUpTo((int)RoutineStep.WaitPressUpTo1000, _ventBasePressure, _waitChamberTo1000TimeOut);
- SetMfcToDefaultByGroup((int)RoutineStep.SetMfc28to40Default, MfcGroupName.M27toM40, 0);
- }
-
-
- NotifyInfo((int)RoutineStep.Notify2, "Wait V27 open!");
- WaitV27Open((int)RoutineStep.WaitV27Open,60);
- TimeDelay((int)RoutineStep.TimeDelay5, _pmCleanTime);
-
- if (_checkPMPt2Over1000)
- {
- //1.打开EPV1,等待10s
- SetThrottleToCloseMode((int)RoutineStep.SetTVCloseMode, _IoThrottle, 8);
- SetThrottleDisable((int)RoutineStep.SetTvPositionToZero, _IoThrottle, 8);
- }
-
- //打开EPV2,等待9秒,打开蝶阀
- //打开EPV2,等待9秒,打开蝶阀
- CheckEPV2Open((int)RoutineStep.CheckEPV2Open1);
- if (!_isEPV2Open)
- {
- SetIoValueByGroup((int)RoutineStep.OpenEPV2, IoGroupName.EPV2, true, _IoValueOpenCloseTimeout);
- TimeDelay((int)RoutineStep.TimeDelay6, 2);
- }
- CheckTvOpen((int)RoutineStep.CheckTVOpen1);
- if (!_isTvOpen)
- {
- SetThrottleEnableAndWait((int)RoutineStep.SetTvOpen, _IoThrottle, 10);
- SetThrottleToPressModeAndWait((int)RoutineStep.SetTvModeToPress, _IoThrottle, 10);
- }
- SetThrottleToTargetAndNoWait((int)RoutineStep.SetTvTo1150, _IoThrottle, 1150);
-
- //打开V72
- //SetIoValueByGroup((int)RoutineStep.VentPumpOpen, IoGroupName.VentPump, true, _IoValueOpenCloseTimeout);
-
+ //循环开始
Loop((int)RoutineStep.StartLoop, _pressureLoopCount);
- SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown1, PressureUpOrDown.Dowing);
- SetThrottleToTargetAndNoWait((int)RoutineStep.SetPressureDown, _IoThrottle, _pressureMin);
- WaitThrottleToPressureAndSetMfcSpecialForLidOpen((int)RoutineStep.WaitPressureDown, _IoThrottle, _pressureMin, _pmPressureMaxDiff, _pressureMinTimeout);
- TimeDelay((int)RoutineStep.TimeDelay8, _pressureMinDelay);
-
- SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown2, PressureUpOrDown.Uping);
+
+ //M2、M9、M15、M19-M40 MFC 3s ramp 到 default 值
+ SetMfcToDefaultByGroup((int)RoutineStep.SetM2TOM40Default, MfcGroupName.M2toM40, 3);
+
+ //使用动态流量伺服到300mbar
+ SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown1, PressureUpOrDown.Uping);
SetThrottleToTargetAndNoWait((int)RoutineStep.SetPressureUp, _IoThrottle, _pressureMax);
- WaitThrottleToPressureAndSetMfcSpecialForLidOpen((int)RoutineStep.WaitPressureUp, _IoThrottle, _pressureMax, _pmPressureMaxDiff, _pressureMaxTimeout);
- TimeDelay((int)RoutineStep.TimeDelay9, _pressureMaxDelay);
+ WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.WaitPressureUp, _IoThrottle, _pressureMax, _pmPressureMaxDiff, _pressureMaxTimeout);
+ TimeDelay((int)RoutineStep.TimeDelay8, _pressureMaxDelay);
+
+ //M2、M9、M15、M19-M40 MFC 3s ramp 0
+ SetMfcByGroup((int)RoutineStep.SetM2toM40_1, MfcGroupName.M2toM40, 0, 3);
+
+ //使用动态流量伺服到0mbar
+ SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown2, PressureUpOrDown.Dowing);
+ SetThrottleToTargetAndNoWait((int)RoutineStep.SetPressureDown, _IoThrottle, _pressureMin);
+ WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.WaitPressureDown, _IoThrottle, _pressureMin, _pmPressureMaxDiff, _pressureMinTimeout);
+ TimeDelay((int)RoutineStep.TimeDelay9, _pressureMinDelay);
+
EndLoop((int)RoutineStep.EndLoop);
+ //M27-M40 MFC 3s ramp 到 default 值
+ SetMfcToDefaultByGroup((int)RoutineStep.SetMfc27to40Default, MfcGroupName.M27toM40, 3);
+ //打开J阀门
+ SetIoValueByGroup((int)RoutineStep.SetGroupJ_1, IoGroupName.J, true, _IoValueOpenCloseTimeout);
+
+ //打开V72,关闭V25
+ SetIoValueByGroup((int)RoutineStep.VentPumpClose, IoGroupName.VentPump, true, _IoValueOpenCloseTimeout);
+ SetIoValueByGroup((int)RoutineStep.CloseGroupV25, IoGroupName.V25, false, _IoValueOpenCloseTimeout);
+
+ //压力伺服到300mbar
+ SetPressureUpOrDown((int)RoutineStep.SetPressUpOrDown1, PressureUpOrDown.Uping);
+ SetThrottleToTargetAndNoWait((int)RoutineStep.SetPressureUp1, _IoThrottle, _throttleFinalPressure);
+ WaitThrottleToPressureAndSetMfcSpecial((int)RoutineStep.SetTVto300, _IoThrottle, _throttleFinalPressure, _pmPressureMaxDiff, _throttleTimeout);
}
catch (RoutineBreakException)
{
diff --git a/Modules/SicPM/Routines/PMPurgeRoutine.cs b/Modules/SicPM/Routines/PMPurgeRoutine.cs
index aa6daf6..5c1d118 100644
--- a/Modules/SicPM/Routines/PMPurgeRoutine.cs
+++ b/Modules/SicPM/Routines/PMPurgeRoutine.cs
@@ -398,7 +398,6 @@ namespace SicPM.Routines
//等待反应腔压力到达1020
NotifyInfo((int)RoutineStep.Notify1, "Wait pm pressure to 1020 mbar!");
WaitChamberPressUpTo((int)RoutineStep.WaitPressUpTo1000, 1020, _waitChamberTo1000TimeOut);
-
}
catch (RoutineBreakException)
{
diff --git a/Modules/SicPM/SicPM.csproj b/Modules/SicPM/SicPM.csproj
index 6f7ec93..c29a011 100644
--- a/Modules/SicPM/SicPM.csproj
+++ b/Modules/SicPM/SicPM.csproj
@@ -59,6 +59,7 @@
+
diff --git a/SicRT/Config/System.sccfg b/SicRT/Config/System.sccfg
index c5dc2a0..35e4dde 100644
--- a/SicRT/Config/System.sccfg
+++ b/SicRT/Config/System.sccfg
@@ -192,8 +192,6 @@
-
@@ -246,6 +244,7 @@
+
@@ -1229,6 +1228,11 @@
+
+
+
+
+
diff --git a/SicRT/Equipments/AutoTransfer.cs b/SicRT/Equipments/AutoTransfer.cs
index c9fe981..406e606 100644
--- a/SicRT/Equipments/AutoTransfer.cs
+++ b/SicRT/Equipments/AutoTransfer.cs
@@ -2004,7 +2004,7 @@ namespace SicRT.Modules
return;
//pick from pm
- if (_tmRobot.NoWafer(0))
+ if (_tmRobot.NoWafer(0)&&_tmRobot.NoTray(0))
{
Hand pickBlade = Hand.Blade1;
diff --git a/SicRT/Equipments/Schedulers/SchedulerLoadLock.cs b/SicRT/Equipments/Schedulers/SchedulerLoadLock.cs
index 781a519..17420cb 100644
--- a/SicRT/Equipments/Schedulers/SchedulerLoadLock.cs
+++ b/SicRT/Equipments/Schedulers/SchedulerLoadLock.cs
@@ -51,7 +51,7 @@ namespace SicRT.Scheduler
private ModuleName _taskRobot;
private int _taskSlot;
private int _entityTaskToken = (int)FSM_MSG.NONE;
- public bool IsInPumping { get => _task == TaskType.Pump || _task == TaskType.Purge || (_task == TaskType.PrepareTransfer && _taskRobot == ModuleName.TMRobot); }
+ public bool IsInPumping { get => _task == TaskType.Pump || _task == TaskType.Purge || _task == TaskType.PrepareTransfer ; }
public SchedulerLoadLock(ModuleName module) : base(module.ToString())
{
diff --git a/SicRT/Equipments/Schedulers/SchedulerUnLoad.cs b/SicRT/Equipments/Schedulers/SchedulerUnLoad.cs
index 79b0fcb..dd9040f 100644
--- a/SicRT/Equipments/Schedulers/SchedulerUnLoad.cs
+++ b/SicRT/Equipments/Schedulers/SchedulerUnLoad.cs
@@ -208,7 +208,7 @@ namespace SicRT.Scheduler
if (wafer.NextSequenceStep >= wafer.ProcessJob.Sequence.Steps.Count)
return null;
- if (!wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep].StepModules.Any(m => m == ModuleName.LoadLock || m == ModuleName.Load))
+ if (!wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep].StepModules.Contains(Module))
return null;
if (!wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep].StepParameter.ContainsKey("PurgeCount"))
@@ -235,7 +235,7 @@ namespace SicRT.Scheduler
if (wafer.NextSequenceStep >= wafer.ProcessJob.Sequence.Steps.Count)
return null;
- if (!wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep].StepModules.Any(m => m == ModuleName.LoadLock || m == ModuleName.Load))
+ if (!wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep].StepModules.Contains(Module))
return null;
if (!wafer.ProcessJob.Sequence.Steps[wafer.NextSequenceStep].StepParameter.ContainsKey("PumpDelayTime"))
diff --git a/SicRT/Equipments/Systems/EquipmentManager.cs b/SicRT/Equipments/Systems/EquipmentManager.cs
index 811040b..3f677c9 100644
--- a/SicRT/Equipments/Systems/EquipmentManager.cs
+++ b/SicRT/Equipments/Systems/EquipmentManager.cs
@@ -164,6 +164,7 @@ namespace SicRT.Equipments.Systems
private SicPM.Devices.IoSignalTower _st = null;
//
private SicPM.Devices.IoTC _tc = null;
+ private SicPM.Devices.IoPTOffset _pt1 = null, _pt2 = null;
public EquipmentManager()
{
@@ -196,6 +197,7 @@ namespace SicRT.Equipments.Systems
SubscribeOperation();
InitSetPSUY();
+ InitPTOffset();
Singleton.Instance.OnAlarmEvent += Instance_OnAlarmEvent;
@@ -283,6 +285,8 @@ namespace SicRT.Equipments.Systems
//
_st = DEVICE.GetDevice("PM1.SignalTower");
_tc = DEVICE.GetDevice("PM1.TC1");
+ _pt1 = DEVICE.GetDevice("PM1.PT1Offset");
+ _pt2 = DEVICE.GetDevice("PM1.PT2Offset");
//
_thread = new PeriodicJob(200, OnTimer, "PmSlitDoor", false, true);
Task.Delay(15000).ContinueWith((a) => _thread.Start());
@@ -498,6 +502,11 @@ namespace SicRT.Equipments.Systems
_tc.SetPCPSUY();
}
+ void InitPTOffset()
+ {
+ _pt1.GetSCPTOffset("PT1Offset");
+ _pt2.GetSCPTOffset("PT2Offset");
+ }
//EventManager触发OnAlarmEvent事件,即EV.PostAlarmLog触发
//具体值到 EventManager里面找
diff --git a/SicRT/Properties/AssemblyInfo.cs b/SicRT/Properties/AssemblyInfo.cs
index aefd422..4590390 100644
--- a/SicRT/Properties/AssemblyInfo.cs
+++ b/SicRT/Properties/AssemblyInfo.cs
@@ -52,6 +52,6 @@ using System.Windows;
// 方法是按如下所示使用“*”: :
// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.1.0.1")]
-[assembly: AssemblyFileVersion("1.1.0.1")]
+[assembly: AssemblyVersion("1.1.0.3")]
+[assembly: AssemblyFileVersion("1.1.0.3")]
diff --git a/SicRT/ReleaseNotes.txt b/SicRT/ReleaseNotes.txt
index 1ad7afb..3f8bc83 100644
--- a/SicRT/ReleaseNotes.txt
+++ b/SicRT/ReleaseNotes.txt
@@ -9,6 +9,14 @@
Sic 系统更新历史记录
---------------------------------------------------------------------------------
+Sic03 2022-08-02 Version 1.1.0.3
+1、PM Heater界面 heater mode 中去掉TC模式;
+2、PM DI-2 ;
+3、解决PM PT1和PT2 offset 值掉电丢失的问题;
+
+Sic03 2022-08-02 Version 1.1.0.2
+1.PM Clean Routine重新整理
+
Sic03 2022-08-02 Version 1.1.0.1
1.更新
diff --git a/SicUI/Models/Maintenances/TM/TMView.xaml b/SicUI/Models/Maintenances/TM/TMView.xaml
index ae9a605..83dff9b 100644
--- a/SicUI/Models/Maintenances/TM/TMView.xaml
+++ b/SicUI/Models/Maintenances/TM/TMView.xaml
@@ -1920,16 +1920,6 @@
x:Name="Devices"
Canvas.Left="0"
Canvas.Top="150">
-
-
+ Canvas.Left="127"
+ Canvas.Top="10"
+ Content="PS7" />
+ Content="PT4" />
+ DeviceData="{Binding ForelinePressure}" />
+ DeviceData="{Binding TMPressure}" />
-
+
@@ -3784,8 +3777,7 @@
Height="25"
Margin="10,0"
Content="Home"
- IsEnabled="{Binding IsEFEMEnableManualOperation}"
- >
+ IsEnabled="{Binding IsEFEMEnableManualOperation}">
@@ -3809,8 +3801,7 @@
Height="25"
Margin="10,0"
Content="Abort"
- IsEnabled="{Binding IsEFEMEnableManualOperation}"
- >
+ IsEnabled="{Binding IsEFEMEnableManualOperation}">
@@ -3821,25 +3812,21 @@
-
+
-
-
+ BorderThickness="1,0,1,1" />
-
-
+ BorderThickness="0,0,0,1" />
+ IsEnabled="{Binding EFEMIsOffline}">
@@ -3878,8 +3864,7 @@
Height="25"
Margin="10,0"
Content="Offline"
- IsEnabled="{Binding EFEMIsOnline}"
- >
+ IsEnabled="{Binding EFEMIsOnline}">
@@ -3891,7 +3876,7 @@
-
+
diff --git a/SicUI/Models/PMs/PMHeaterViewModel.cs b/SicUI/Models/PMs/PMHeaterViewModel.cs
index e6d1c8f..0bf18ac 100644
--- a/SicUI/Models/PMs/PMHeaterViewModel.cs
+++ b/SicUI/Models/PMs/PMHeaterViewModel.cs
@@ -198,7 +198,7 @@ namespace SicUI.Models.PMs
public string strTCPyroMode
{
- get { return TCPyroMode == 0 ? "TC" : "Pyro"; }
+ get { return TCPyroMode == 0 ? "Power" : "Pyro"; }
}
[Subscription("TC1.TCPyroModeSetPoint")]
public float TCPyroMode { get; set; }
@@ -221,7 +221,7 @@ namespace SicUI.Models.PMs
[Subscription("TC1.L3TempLowLimitSetPoint")]
public float L3TempLowLimit { get; set; }
- private List _HeaterModeGroup = new List() { "Power", "TC", "Pyro" };
+ private List _HeaterModeGroup = new List() { "Power", "Pyro" };
public List HeaterModeGroup
{
get { return _HeaterModeGroup; }
@@ -234,9 +234,8 @@ namespace SicUI.Models.PMs
{
switch (HeaterMode)
{
- case 0: return "Power";
- case 1: return "TC";
- case 2: return "Pyro";
+ case 0: return "Power";
+ case 1: return "Pyro";
}
return "Power";
@@ -409,7 +408,7 @@ namespace SicUI.Models.PMs
public string strTCPyroMode2
{
- get { return TCPyroMode2 == 0 ? "TC" : "Pyro"; }
+ get { return TCPyroMode2 == 0 ? "Power" : "Pyro"; }
}
[Subscription("TC2.TCPyroModeSetPoint")]
public float TCPyroMode2 { get; set; }
@@ -445,9 +444,8 @@ namespace SicUI.Models.PMs
{
switch (HeaterMode2)
{
- case 0: return "Power";
- case 1: return "TC";
- case 2: return "Pyro";
+ case 0: return "Power";
+ case 1: return "Pyro";
}
return "Power";
@@ -618,9 +616,8 @@ namespace SicUI.Models.PMs
float ControlMode = 0;
switch (SelectedHeaterMode)
{
- case "Power": ControlMode = 0; break;
- case "TC": ControlMode = 1; break;
- case "Pyro": ControlMode = 2; break;
+ case "Power": ControlMode = 0; break;
+ case "Pyro": ControlMode = 1; break;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.{TCname}.SetHeaterMode", ControlMode);
}
@@ -630,9 +627,8 @@ namespace SicUI.Models.PMs
float ControlMode = 0;
switch (SelectedHeaterMode2)
{
- case "Power": ControlMode = 0; break;
- case "TC": ControlMode = 1; break;
- case "Pyro": ControlMode = 2; break;
+ case "Power": ControlMode = 0; break;
+ case "Pyro": ControlMode = 1; break;
}
InvokeClient.Instance.Service.DoOperation($"{SystemName}.{TCname}.SetHeaterMode2", ControlMode);
}
diff --git a/SicUI/Properties/AssemblyInfo.cs b/SicUI/Properties/AssemblyInfo.cs
index f928f5a..658ad05 100644
--- a/SicUI/Properties/AssemblyInfo.cs
+++ b/SicUI/Properties/AssemblyInfo.cs
@@ -54,6 +54,6 @@ using System.Windows;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.1.0.1")]
-[assembly: AssemblyFileVersion("1.1.0.1")]
+[assembly: AssemblyVersion("1.1.0.3")]
+[assembly: AssemblyFileVersion("1.1.0.3")]