Update from svn

This commit is contained in:
THINKPAD 2022-08-03 08:41:53 +08:00
parent 4a5ac7a011
commit 0119222ab6
18 changed files with 209 additions and 208 deletions

View File

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

View File

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

View File

@ -236,12 +236,17 @@
diDryPump1Warning="DI_PM1DryPump1Warning"/>
</IoPumps>
<IoPTOffsets classType="SicPM.Devices.IoPTOffset" assembly="SicPM" >
<IoPTOffset id="PT1Offset" module="" display="PT1Offset" schematicId="" unit="" aioType="float" ao="AO_PT1Offset" />
<IoPTOffset id="PT2Offset" module="" display="PT2Offset" schematicId="" unit="" aioType="float" ao="AO_PT2Offset" />
</IoPTOffsets>
<DoSensors classType="SicPM.Devices.DoSensor" assembly="SicPM">
<DoSensor id="CleanRoutineSucceed" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" do="DO_CleanRoutineSucceed" infoText="" warningText="" alarmText=""/>
</DoSensors>
<IoSensors classType="SicPM.Devices.IoSensor" assembly="SicPM">
<IoSensor id="SensorChamBodyOTSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_ChamBodyOTSW" infoText ="Information9 ChamBodyOT.SW [DI-2]" warningText="" alarmText=""/>
<!--<IoSensor id="SensorChamBodyOTSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_ChamBodyOTSW" infoText ="Information9 ChamBodyOT.SW [DI-2]" warningText="" alarmText=""/>-->
<IoSensor id="SensorChamPressAboveATMSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="false" di="DI_ChamPressAboveATMSW" infoText="" warningText="" alarmText ="Alarm3 Chamber Press Above ATM [DI-4]"/>
<IoSensor id="SensorChamAtSafeProcessPressSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_ChamAtSafeProcessPressSW" infoText ="Information3 Chamber At Safe Process Press [DI-5]" warningText="" alarmText=""/>
<IoSensor id="SensorPMATMSW" module="" display="" schematicId="" unit="" aioType="" textOutTrigValue="true" di="DI_PMATMSW" infoText ="Information2 PM At ATM [DI-9]" warningText="" alarmText=""/>

View File

@ -2,8 +2,7 @@
<IO_DEFINE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<VersionID Name="V2.2.3.0" />
<Dig_In>
<DI_ITEM Index="0" Name="DI_ChamLidClosed" BufferOffset="0" Addr="0" Description="" />
<DI_ITEM Index="2" Name="DI_ChamBodyOTSW" BufferOffset="2" Addr="2" Description="" />
<DI_ITEM Index="0" Name="DI_ChamLidClosed" BufferOffset="0" Addr="0" Description="" />
<DI_ITEM Index="3" Name="DI_ChamCabDoorClosed" BufferOffset="3" Addr="3" Description="" />
<DI_ITEM Index="4" Name="DI_ChamPressAboveATMSW" BufferOffset="4" Addr="4" Description="" />
<DI_ITEM Index="5" Name="DI_ChamAtSafeProcessPressSW" BufferOffset="5" Addr="5" Description="" />

View File

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

View File

@ -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<double>($"PM.{Module}.Mfc28FlowSpecail");
_mfc29SpecialFlow = SC.GetValue<double>($"PM.{Module}.Mfc29FlowSpecail");
_mfc31SpecialFlow = SC.GetValue<double>($"PM.{Module}.Mfc31FlowSpecail");
_mfc40SpecialFlow = SC.GetValue<double>($"PM.{Module}.Mfc40FlowSpecail");
_pmPressureMaxDiff = SC.GetValue<double>($"PM.{Module}.ThrottlePressureMaxDiff");
_throttleTimeout = SC.GetValue<int>($"PM.{Module}.ThrottlePressureTimeout");
@ -217,9 +221,7 @@ namespace SicPM.Routines
_pressureMaxTimeout = SC.GetValue<int>($"PM.{Module}.Clean.VentTimeout");
_pmCleanTime = SC.GetValue<int>($"PM.{Module}.Clean.CleanTime");
//_EPV2OpenDelayTime = SC.GetValue<int>($"PM.{Module}.TimeDelayAlterEPV2Open");
_ventBasePressure = SC.GetValue<double>($"PM.{Module}.Clean.VentBasePressure");
_throttleFinalPressure = SC.GetValue<double>($"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<bool>("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)
{

View File

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

View File

@ -59,6 +59,7 @@
<Compile Include="Devices\IoInterLock.cs" />
<Compile Include="Devices\IoOmronTemp.cs" />
<Compile Include="Devices\DoSensor.cs" />
<Compile Include="Devices\IoPTOffset.cs" />
<Compile Include="Devices\IoUPS.cs" />
<Compile Include="Devices\IoSCR.cs" />
<Compile Include="Devices\IoTC.cs" />

View File

@ -192,8 +192,6 @@
<config default="0" name="SCRMiddleRatio" description="SCR Middle Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="0" name="SCRLowerRatio" description="SCR Lower Ratio" max="100" min="0" paramter="" tag="" unit="%" type="Double" />
<config default="250" name="RoutineTimeOut" description="Routine超时时间" max="10000" min="0" paramter="" tag="" unit="s" type="Integer" />
<!--<config default="1000" name="Pressure1" description="V72未打开时低于此压力值需要开启M28,M29,M31大流量值" max="1100" min="600" paramter="" tag="" unit="s" type="Integer" />
<config default="1020" name="Pressure2" description="V72未打开时等待腔体压力值大于此压力开启EPV2" max="1100" min="600" paramter="" tag="" unit="s" type="Integer" />-->
<config default="30" name="MFC1to16RampTime" description="Process Abort后MFC1到16Ramp到Default值的时间" max="100" min="0" paramter="" tag="" unit="s" type="Integer" />
<config default="30" name="MFC19to38RampTime" description="Process Abort后MFC19到38Ramp到Default值的时间" max="100" min="0" paramter="" tag="" unit="s" type="Integer" />
</configs>
@ -246,6 +244,7 @@
<config default="100" name="VentTimeout" description="Vent超时时间" max="1000" min="0" paramter="" tag="" unit="s" type="Integer" />
<config default="20" name="CleanTime" description="吹扫时间" max="1000" min="1" paramter="" tag="" unit="s" type="Integer" />
<config default="3000" name="RoutineTimeOut" description="Routine超时时间" max="10000" min="0" paramter="" tag="" unit="s" type="Integer" />
<config default="300" name="FinalPressure" description="最后保持的压力" max="1100" min="0" paramter="" tag="" unit="mbar" type="Double" />
</configs>
<configs name="MoExchange">
@ -1229,6 +1228,11 @@
<config default="5" name="CleanRunCount" description="每运行多少炉需要执行Clean Recipe" max="10000" min="0" paramter="" tag="" unit="s" type="Integer" visible="true"/>
<config default="0" name="CurrentRunCount" description="当前炉计数" max="10000" min="0" paramter="" tag="" unit="s" type="Integer" visible="false"/>
</configs>
<configs name="PT">
<config default="0" name="PT1Offset" description="PT1Offset" max="100" min="-100" paramter="" tag="" unit="" type="Double" />
<config default="0" name="PT2Offset" description="PT2Offset" max="100" min="-100" paramter="" tag="" unit="" type="Double" />
</configs>
</configs>
</configs>

View File

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

View File

@ -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())
{

View File

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

View File

@ -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<EventManager>.Instance.OnAlarmEvent += Instance_OnAlarmEvent;
@ -283,6 +285,8 @@ namespace SicRT.Equipments.Systems
//
_st = DEVICE.GetDevice<SicPM.Devices.IoSignalTower>("PM1.SignalTower");
_tc = DEVICE.GetDevice<SicPM.Devices.IoTC>("PM1.TC1");
_pt1 = DEVICE.GetDevice<SicPM.Devices.IoPTOffset>("PM1.PT1Offset");
_pt2 = DEVICE.GetDevice<SicPM.Devices.IoPTOffset>("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里面找

View File

@ -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")]

View File

@ -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.更新

View File

@ -1920,16 +1920,6 @@
x:Name="Devices"
Canvas.Left="0"
Canvas.Top="150">
<Line
Canvas.Left="12"
Canvas.Top="-82"
Stroke="Gray"
StrokeThickness="8"
X1="295"
X2="300"
Y1="415"
Y2="415" />
<Line
Canvas.Top="-25"
Stroke="Gray"
@ -2050,9 +2040,9 @@
Canvas.Top="463"
Content="V82" />
<Label
Canvas.Left="225"
Canvas.Top="300"
Content="PT4" />
Canvas.Left="127"
Canvas.Top="10"
Content="PS7" />
<Label
Canvas.Left="111"
Canvas.Top="384"
@ -2064,7 +2054,7 @@
<Label
Canvas.Left="225"
Canvas.Top="354"
Content="PS7" />
Content="PT4" />
<Label
Canvas.Left="125"
Canvas.Top="354"
@ -2132,11 +2122,11 @@
Visibility="{Binding IsLLInstalled, Converter={StaticResource BoolVisibilityConverter}}" />
<deviceControl:AITPressureMeter
Canvas.Left="220"
Canvas.Top="318"
Canvas.Left="122"
Canvas.Top="28"
Width="90"
Height="30"
DeviceData="{Binding TMPressure}" />
DeviceData="{Binding ForelinePressure}" />
<deviceControl:AITPressureMeter
Canvas.Left="105"
Canvas.Top="377"
@ -2154,7 +2144,7 @@
Canvas.Top="376"
Width="90"
Height="30"
DeviceData="{Binding ForelinePressure}" />
DeviceData="{Binding TMPressure}" />
<controlUI:AITPumpSIC
Canvas.Left="344"
@ -3722,7 +3712,10 @@
</Grid>
<Grid Width="420" Margin="0,50" HorizontalAlignment="Left">
<Grid
Width="420"
Margin="0,50"
HorizontalAlignment="Left">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80" />
<ColumnDefinition Width="*" />
@ -3784,8 +3777,7 @@
Height="25"
Margin="10,0"
Content="Home"
IsEnabled="{Binding IsEFEMEnableManualOperation}"
>
IsEnabled="{Binding IsEFEMEnableManualOperation}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="EFEMHomeRoutine">
@ -3809,8 +3801,7 @@
Height="25"
Margin="10,0"
Content="Abort"
IsEnabled="{Binding IsEFEMEnableManualOperation}"
>
IsEnabled="{Binding IsEFEMEnableManualOperation}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="EFEMAbortRoutine">
@ -3821,25 +3812,21 @@
</Button>
</StackPanel>
</Border>
<!-- Line2 -->
<!-- Line2 -->
<Border
Grid.Row="2"
Grid.Column="0"
Padding="5,1"
Background="{DynamicResource Table_BG_Title}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="1,0,1,1">
</Border>
BorderThickness="1,0,1,1" />
<Border
Grid.Row="2"
Grid.Column="1"
Grid.Column="1"
Padding="5,1"
Background="{DynamicResource Table_BG_Content}"
BorderBrush="{DynamicResource Table_BD}"
BorderThickness="0,0,0,1">
</Border>
BorderThickness="0,0,0,1" />
<Border
Grid.Row="2"
Grid.Column="2"
@ -3853,8 +3840,7 @@
Height="25"
Margin="10,0"
Content="Online"
IsEnabled="{Binding EFEMIsOffline}"
>
IsEnabled="{Binding EFEMIsOffline}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetModuleOnline">
@ -3878,8 +3864,7 @@
Height="25"
Margin="10,0"
Content="Offline"
IsEnabled="{Binding EFEMIsOnline}"
>
IsEnabled="{Binding EFEMIsOnline}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cal:ActionMessage MethodName="SetModuleOffline">
@ -3891,7 +3876,7 @@
</StackPanel>
</Border>
</Grid>
</StackPanel>
</Grid>

View File

@ -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<string> _HeaterModeGroup = new List<string>() { "Power", "TC", "Pyro" };
private List<string> _HeaterModeGroup = new List<string>() { "Power", "Pyro" };
public List<string> 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);
}

View File

@ -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")]