自动传盘流程添加
This commit is contained in:
parent
b4362b2345
commit
e1b62ee617
|
@ -560,7 +560,7 @@
|
|||
<SicMultipleServos classType="Aitex.Core.RT.Device.Devices.SicMultipleServo" assembly="MECF.Framework.RT.EquipmentLibrary">
|
||||
<SicMultipleServo id="PMServo" module="" display="PMServo" schematicId="PMServo" unit="" aioType="float"
|
||||
aiActualSpeed="AI_SpindleActualSpeed" aiActualCurrent="AI_ActualCurrent" aiAccSpeed="AI_ActualspeedACC" aiDecSpeed="AI_ActualspeedDEC" aiServoCurrentPosition="AI_SpindleCurrentPosition"
|
||||
aoAccSpeedSetPoint="AO_SpindleAcc" aoDecSpeedSetPoint="AO_SpindleDec"
|
||||
aoAccSpeedSetPoint="AO_SpindleAcc" aoDecSpeedSetPoint="AO_SpindleDec" aoSpindleJogSpeed="AO_SpindleJogSpeed"
|
||||
aoSpindleSpeedSet="AO_SpindleSpeedSet" aoSpindleLoadAngle="AO_SpindleLoadAngle" aoSpindleUnloadAngle="AO_SpindleUnloadAngle"
|
||||
diServoReady="DI_SpindleHome" diServoEnable="DI_SpindleEnable" diServoHome="DI_SpindleHome" diServoPositionComplete="DI_SpindlePositionComplete" diServoError="DI_ServoDriverFaultSW" diSpindleMoveComplete="DI_SpindleMoveComplete"
|
||||
diSpindleJogAcc="DI_SpindleJogAcc" diSpindleJogDec="DI_SpindleJogDec"
|
||||
|
|
|
@ -29,12 +29,12 @@
|
|||
<DI_ITEM Index="26" Name="DI_PSUFlow" BufferOffset="26" Addr="26" Description=""/>
|
||||
<DI_ITEM Index="27" Name="DI_InletTotalFlowLowSW" BufferOffset="27" Addr="27" Description="" />
|
||||
<DI_ITEM Index="28" Name="DI_InletTotalFlowHighSW" BufferOffset="28" Addr="28" Description="" />
|
||||
<DI_ITEM Index="29" Name="DI_InletTotalTempHighSW" BufferOffset="29" Addr="29" Description="????????????????????????????????????????????" />
|
||||
<DI_ITEM Index="29" Name="DI_InletTotalTempHighSW" BufferOffset="29" Addr="29" Description="" />
|
||||
<DI_ITEM Index="30" Name="DI_PMH2DetectorSW" BufferOffset="30" Addr="30" Description="" />
|
||||
<DI_ITEM Index="31" Name="DI_GBHCLDetectorSW" BufferOffset="31" Addr="31" Description="" />
|
||||
<DI_ITEM Index="32" Name="DI_GBExhaustDPSW" BufferOffset="32" Addr="32" Description="" />
|
||||
<DI_ITEM Index="33" Name="DI_GBDoorClosed" BufferOffset="33" Addr="33" Description="" />
|
||||
<DI_ITEM Index="34" Name="DI_H2Pressure2SW" BufferOffset="34" Addr="34" Description="" />
|
||||
|
||||
<DI_ITEM Index="35" Name="DI_GasPipeTempCtrlAlarm" BufferOffset="35" Addr="35" Description="" />
|
||||
<DI_ITEM Index="36" Name="DI_DryPump1Alarm" BufferOffset="36" Addr="36" Description="" />
|
||||
<DI_ITEM Index="37" Name="DI_DryPump2Alarm" BufferOffset="37" Addr="37" Description="" />
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
<DI_ITEM Index="31" Name="DI_GBHCLDetectorSW" BufferOffset="31" Addr="31" Description="" />
|
||||
<DI_ITEM Index="32" Name="DI_GBExhaustDPSW" BufferOffset="32" Addr="32" Description="" />
|
||||
<DI_ITEM Index="33" Name="DI_GBDoorClosed" BufferOffset="33" Addr="33" Description="" />
|
||||
<DI_ITEM Index="34" Name="DI_H2Pressure2SW" BufferOffset="34" Addr="34" Description="" />
|
||||
|
||||
<DI_ITEM Index="35" Name="DI_GasPipeTempCtrlAlarm" BufferOffset="35" Addr="35" Description="" />
|
||||
<DI_ITEM Index="36" Name="DI_DryPump1Alarm" BufferOffset="36" Addr="36" Description="" />
|
||||
<DI_ITEM Index="37" Name="DI_DryPump2Alarm" BufferOffset="37" Addr="37" Description="" />
|
||||
|
|
|
@ -24,7 +24,7 @@ namespace SicModules.EFEMs.Routines
|
|||
* 8.关门
|
||||
*/
|
||||
|
||||
private LoadRotationHomeOffsetRoutine _loadRotationHomeRoutine = new LoadRotationHomeOffsetRoutine();
|
||||
private LoadRotationHomeRoutine _loadRotationHomeRoutine = new LoadRotationHomeRoutine();
|
||||
private EfemSlitValveRoutine _efemSlitValveOpenRoutine = new EfemSlitValveRoutine();
|
||||
private EfemSlitValveRoutine _efemSlitValveCloseRoutine = new EfemSlitValveRoutine();
|
||||
private LoadLockLiftRoutine _loadLockLiftDown = new LoadLockLiftRoutine();
|
||||
|
|
|
@ -27,7 +27,7 @@ namespace SicModules.EFEMs.Routines
|
|||
private LoadLockClawRoutine _loadLockClaw = new LoadLockClawRoutine();
|
||||
private LoadLockClawRoutine _loadLockClawOpen= new LoadLockClawRoutine();
|
||||
|
||||
private LoadRotationHomeOffsetRoutine _loadRotationHomeRoutine = new LoadRotationHomeOffsetRoutine();
|
||||
private LoadRotationHomeRoutine _loadRotationHomeRoutine = new LoadRotationHomeRoutine();
|
||||
|
||||
//private AlignerAlignRoutine _alignRoutine = new AlignerAlignRoutine();
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ namespace SicModules.LLs
|
|||
Cooling,
|
||||
Separating,
|
||||
Grouping,
|
||||
RotationHomeOffset,
|
||||
RotationHome,
|
||||
}
|
||||
|
||||
public enum MSG
|
||||
|
@ -62,7 +62,7 @@ namespace SicModules.LLs
|
|||
ToInit,
|
||||
Separate,
|
||||
Group,
|
||||
RelativeHomeOffset,
|
||||
RelativeHome,
|
||||
}
|
||||
|
||||
|
||||
|
@ -152,7 +152,7 @@ namespace SicModules.LLs
|
|||
private LoadLockGroupRoutine _loadLockGroupRoutine;
|
||||
private LoadSeparateRoutine _loadSeparateRoutine;
|
||||
|
||||
private LoadRotationHomeOffsetRoutine _loadRotationHomeOffsetRoutine;
|
||||
private LoadRotationHomeRoutine _loadRotationHomeRoutine;
|
||||
|
||||
|
||||
public LoadLockModule(ModuleName module) : base(1)
|
||||
|
@ -202,7 +202,7 @@ namespace SicModules.LLs
|
|||
_prepareTransferRoutine = new LoadLockPrepareTransferRoutine(module);
|
||||
_loadLockGroupRoutine = new LoadLockGroupRoutine(module);
|
||||
_loadSeparateRoutine = new LoadSeparateRoutine(module);
|
||||
_loadRotationHomeOffsetRoutine = new LoadRotationHomeOffsetRoutine();
|
||||
_loadRotationHomeRoutine = new LoadRotationHomeRoutine();
|
||||
}
|
||||
|
||||
private void InitDevice()
|
||||
|
@ -271,9 +271,9 @@ namespace SicModules.LLs
|
|||
Transition(STATE.Grouping, MSG.Abort, FsmAbortTask, STATE.Idle);
|
||||
|
||||
//LoadRotationHome
|
||||
Transition(STATE.Idle, MSG.RelativeHomeOffset, FsmStartRelativeHomeOffset, STATE.RotationHomeOffset);
|
||||
Transition(STATE.RotationHomeOffset, FSM_MSG.TIMER, FsmMonitorTask, STATE.Idle);
|
||||
Transition(STATE.RotationHomeOffset, MSG.Abort, FsmAbortTask, STATE.Idle);
|
||||
Transition(STATE.Idle, MSG.RelativeHome, FsmStartRelativeHome, STATE.RotationHome);
|
||||
Transition(STATE.RotationHome, FSM_MSG.TIMER, FsmMonitorTask, STATE.Idle);
|
||||
Transition(STATE.RotationHome, MSG.Abort, FsmAbortTask, STATE.Idle);
|
||||
}
|
||||
|
||||
private void InitOp()
|
||||
|
@ -283,6 +283,11 @@ namespace SicModules.LLs
|
|||
return CheckToPostMessage((int)MSG.Home);
|
||||
});
|
||||
|
||||
OP.Subscribe($"{Name}.Rotation.Home", (string cmd, object[] args) =>
|
||||
{
|
||||
return CheckToPostMessage((int)MSG.RelativeHome);
|
||||
});
|
||||
|
||||
OP.Subscribe($"{Name}.Pump", (string cmd, object[] args) =>
|
||||
{
|
||||
return CheckToPostMessage((int)MSG.Pump);
|
||||
|
@ -333,7 +338,7 @@ namespace SicModules.LLs
|
|||
|
||||
OP.Subscribe($"{Name}.RotationRelativeHomeOffset", (string cmd, object[] args) =>
|
||||
{
|
||||
return CheckToPostMessage((int)MSG.RelativeHomeOffset);
|
||||
return CheckToPostMessage((int)MSG.RelativeHome);
|
||||
});
|
||||
|
||||
OP.Subscribe($"{Name}.Abort", (string cmd, object[] args) =>
|
||||
|
@ -567,9 +572,9 @@ namespace SicModules.LLs
|
|||
// return false;
|
||||
// return ret == Result.RUN;
|
||||
//}
|
||||
private bool FsmStartRelativeHomeOffset(object[] param)
|
||||
private bool FsmStartRelativeHome(object[] param)
|
||||
{
|
||||
Result ret = StartRoutine(_loadRotationHomeOffsetRoutine);
|
||||
Result ret = StartRoutine(_loadRotationHomeRoutine);
|
||||
if (ret == Result.FAIL || ret == Result.DONE)
|
||||
return false;
|
||||
return ret == Result.RUN;
|
||||
|
@ -623,6 +628,14 @@ namespace SicModules.LLs
|
|||
return (int)FSM_MSG.NONE;
|
||||
}
|
||||
|
||||
public override int InvokeRotationHome()
|
||||
{
|
||||
if (CheckToPostMessage((int)MSG.RelativeHome))
|
||||
return (int)MSG.RelativeHome;
|
||||
|
||||
return (int)FSM_MSG.NONE;
|
||||
}
|
||||
|
||||
public override int InvokePurge(params object[] objs)
|
||||
{
|
||||
if (CheckToPostMessage((int)MSG.Purge,objs))
|
||||
|
|
|
@ -51,7 +51,7 @@ namespace SicModules.LLs
|
|||
public abstract bool CheckWaferPlaced();
|
||||
public abstract bool CheckTrayPlaced();
|
||||
|
||||
|
||||
public abstract int InvokeRotationHome();
|
||||
public abstract int InvokeCooling(int time);
|
||||
public abstract int InvokeVent();
|
||||
public abstract int InvokePump();
|
||||
|
|
|
@ -14,11 +14,13 @@ namespace SicModules.LLs.Routines
|
|||
CloseV79,
|
||||
CloseV83,
|
||||
CloseV84,
|
||||
ServoOnRotation
|
||||
RotationHome
|
||||
}
|
||||
|
||||
private int _homeTimeout;
|
||||
|
||||
private LoadRotationHomeRoutine _loadRotationHomeOffsetRoutine=new();
|
||||
|
||||
public LoadHomeRoutine(ModuleName module)
|
||||
{
|
||||
Module = module.ToString();
|
||||
|
@ -43,8 +45,7 @@ namespace SicModules.LLs.Routines
|
|||
CloseLoadVent((int)RoutineStep.CloseV79);
|
||||
CloseFastPump((int)RoutineStep.CloseV83);
|
||||
CloseSlowPump((int)RoutineStep.CloseV84);
|
||||
ServoOnRotation((int)RoutineStep.ServoOnRotation);
|
||||
|
||||
ExecuteRoutine((int)RoutineStep.RotationHome, _loadRotationHomeOffsetRoutine);
|
||||
LoadLockDevice.AutoCreatWafer();
|
||||
}
|
||||
catch (RoutineBreakException)
|
||||
|
|
|
@ -50,7 +50,7 @@ namespace SicModules.LLs.Routines
|
|||
private bool _isSimulator = false;
|
||||
private bool _enableCCDCheck = false;
|
||||
private bool _enableDistanceSensorCheck = false;
|
||||
private LoadRotationHomeOffsetRoutine _loadRotationHomeRoutine = new LoadRotationHomeOffsetRoutine();
|
||||
private LoadRotationHomeRoutine _loadRotationHomeRoutine = new LoadRotationHomeRoutine();
|
||||
|
||||
Result MoveOneCircleResult;
|
||||
Result CCDCheckResult;
|
||||
|
|
|
@ -5,7 +5,7 @@ using SicModules.LLs.Routines.Base;
|
|||
|
||||
namespace SicModules.LLs.Routines
|
||||
{
|
||||
public class LoadRotationHomeOffsetRoutine : LoadLockBaseRoutine
|
||||
public class LoadRotationHomeRoutine : LoadLockBaseRoutine
|
||||
{
|
||||
enum RoutineStep
|
||||
{
|
||||
|
@ -25,7 +25,7 @@ namespace SicModules.LLs.Routines
|
|||
private LoadLockTrayClawRoutine _trayClamp = new LoadLockTrayClawRoutine();
|
||||
private LoadLockTrayClawRoutine _trayUnClamp = new LoadLockTrayClawRoutine();
|
||||
|
||||
public LoadRotationHomeOffsetRoutine()
|
||||
public LoadRotationHomeRoutine()
|
||||
{
|
||||
Name = "Home";
|
||||
}
|
||||
|
@ -63,8 +63,8 @@ namespace SicModules.LLs.Routines
|
|||
RotationServoOn((int)RoutineStep.RotationServoOn, 3);
|
||||
|
||||
MoveRelativeHome((int)RoutineStep.MoveRelativeHome, 10);
|
||||
TimeDelay((int)RoutineStep.TimeDelay2, 3);
|
||||
WaitLoadRotationDone((int)RoutineStep.WaitMoveDone, 60);
|
||||
//TimeDelay((int)RoutineStep.TimeDelay2, 3);
|
||||
//WaitLoadRotationDone((int)RoutineStep.WaitMoveDone, 60);
|
||||
|
||||
//取消Offset
|
||||
//MoveLoadRotationHomeOffset((int)RoutineStep.MoveHomeOffset, _homeOffset, 10);
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.props" Condition="Exists('$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<Import Project="$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.props" Condition="Exists('$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
|
@ -124,7 +124,7 @@
|
|||
<Compile Include="LLs\Routines\LoadLockTrayAlignerRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockTrayClawRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadLockVentRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadRotationHomeOffsetRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadRotationHomeRoutine.cs" />
|
||||
<Compile Include="LLs\Routines\LoadSeparateRoutine.cs" />
|
||||
<Compile Include="LLs\SicLoadLock.cs" />
|
||||
<Compile Include="PMs\PM1.cs" />
|
||||
|
@ -296,12 +296,12 @@
|
|||
<PostBuildEvent>
|
||||
</PostBuildEvent>
|
||||
</PropertyGroup>
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.props')" Text="$([System.String]::Format('$(ErrorText)', 'Properties\GitVersion.MsBuild.props'))" />
|
||||
<Error Condition="!Exists('$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.targets')" Text="$([System.String]::Format('$(ErrorText)', 'Properties\GitVersion.MsBuild.targets'))" />
|
||||
</Target>
|
||||
<Import Project="$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.targets" Condition="Exists('$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.targets')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.props')" Text="$([System.String]::Format('$(ErrorText)', 'Properties\GitVersion.MsBuild.props'))" />
|
||||
<Error Condition="!Exists('$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.targets')" Text="$([System.String]::Format('$(ErrorText)', 'Properties\GitVersion.MsBuild.targets'))" />
|
||||
</Target>
|
||||
<Import Project="$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.targets" Condition="Exists('$(SolutionDir)BuildTools\GitVersion\GitVersion.MsBuild.targets')" />
|
||||
</Project>
|
|
@ -61,6 +61,8 @@ namespace SicModules.TMs.Routines.Base
|
|||
private IoLift4 _loadLift;
|
||||
private IoLift4 _unLoadLift;
|
||||
|
||||
protected SicMultipleServo _sicServo;
|
||||
|
||||
public TMBaseRoutine() : base(ModuleName.TM.ToString())
|
||||
{
|
||||
_robot = DEVICE.GetDevice<SicTMRobot>($"{ModuleName.TMRobot}.{ModuleName.TMRobot}");
|
||||
|
@ -1399,6 +1401,40 @@ namespace SicModules.TMs.Routines.Base
|
|||
throw (new RoutineBreakException());
|
||||
}
|
||||
}
|
||||
|
||||
protected void RobotGotoAndWait(int id, RobotBaseDevice robot, ModuleName source, int slot, RobotArmEnum hand, int timeout,bool re,bool down)
|
||||
{
|
||||
Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
|
||||
{
|
||||
Notify($"Goto {source} {slot + 1} use {(hand == RobotArmEnum.Blade1 ? "Blade1" : "Blade2")}");
|
||||
List<object> para = new List<object>() { "GoTo", hand, source, slot, true, true };
|
||||
if (!robot.GoTo(para.ToArray()))
|
||||
{
|
||||
robot.IsBusy = false;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
() => !robot.IsBusy,
|
||||
|
||||
timeout * 1000);
|
||||
|
||||
if (ret.Item1)
|
||||
{
|
||||
if (ret.Item2 == Result.FAIL)
|
||||
{
|
||||
Stop($"Goto failed, error {robot.ErrorCode}");
|
||||
throw (new RoutineFaildException());
|
||||
}
|
||||
else if (ret.Item2 == Result.TIMEOUT) //timeout
|
||||
{
|
||||
Stop(string.Format("timeout, can not complete in {0} seconds", timeout));
|
||||
throw (new RoutineFaildException());
|
||||
}
|
||||
else
|
||||
throw (new RoutineBreakException());
|
||||
}
|
||||
}
|
||||
protected void CheckRobotReady(int id, RobotBaseDevice robot, int timeout)
|
||||
{
|
||||
Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
|
||||
|
@ -1854,5 +1890,69 @@ namespace SicModules.TMs.Routines.Base
|
|||
throw (new RoutineBreakException());
|
||||
}
|
||||
}
|
||||
|
||||
protected void WaitSicServoLoadAngleRun(int id, float speed, int timeout)
|
||||
{
|
||||
Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
|
||||
{
|
||||
if (_sicServo != null)
|
||||
{
|
||||
_sicServo.LoadAngleRun(speed);
|
||||
}
|
||||
|
||||
return true;
|
||||
}, () =>
|
||||
{
|
||||
return _sicServo.SpindleMoveComplete;
|
||||
},
|
||||
timeout * 1000);
|
||||
|
||||
if (ret.Item1)
|
||||
{
|
||||
if (ret.Item2 == Result.FAIL)
|
||||
{
|
||||
throw (new RoutineFaildException());
|
||||
}
|
||||
else if (ret.Item2 == Result.TIMEOUT)
|
||||
{
|
||||
Stop($"{Module} sic servo load angle run timeout, over {timeout} seconds");
|
||||
throw (new RoutineFaildException());
|
||||
}
|
||||
else
|
||||
throw (new RoutineBreakException());
|
||||
}
|
||||
}
|
||||
|
||||
protected void WaitSicServoUnloadAngleRun(int id, float speed, int timeout)
|
||||
{
|
||||
Tuple<bool, Result> ret = ExecuteAndWait(id, () =>
|
||||
{
|
||||
if (_sicServo != null)
|
||||
{
|
||||
_sicServo.UnloadAngleRun(speed);
|
||||
}
|
||||
|
||||
return true;
|
||||
}, () =>
|
||||
{
|
||||
return _sicServo.SpindleMoveComplete;
|
||||
},
|
||||
timeout * 1000);
|
||||
|
||||
if (ret.Item1)
|
||||
{
|
||||
if (ret.Item2 == Result.FAIL)
|
||||
{
|
||||
throw (new RoutineFaildException());
|
||||
}
|
||||
else if (ret.Item2 == Result.TIMEOUT)
|
||||
{
|
||||
Stop($"{Module} sic servo unload angle run timeout, over {timeout} seconds");
|
||||
throw (new RoutineFaildException());
|
||||
}
|
||||
else
|
||||
throw (new RoutineBreakException());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ using Aitex.Core.RT.SCCore;
|
|||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
|
||||
using SicModules.LLs.Routines;
|
||||
using SicModules.TMs.Routines.Base;
|
||||
|
||||
namespace SicModules.TMs.Routines
|
||||
|
@ -24,7 +25,7 @@ namespace SicModules.TMs.Routines
|
|||
|
||||
Pick,
|
||||
QueryOffset,
|
||||
|
||||
TrayUnClamp1,
|
||||
Extend,
|
||||
Handoff,
|
||||
HandoffDelay,
|
||||
|
@ -53,11 +54,15 @@ namespace SicModules.TMs.Routines
|
|||
Delay2,
|
||||
VceMoveToSlot,
|
||||
RobotGotoNotWait,
|
||||
RobotGotoPmLowAndWait,
|
||||
RobotGotoPmHighAndWait,
|
||||
SicServoUnloadAngleRun,
|
||||
CheckRobotReady,
|
||||
CheckTransferPrepared,
|
||||
SetConfinementRingUp,
|
||||
TimeDelay1,
|
||||
TimeDelay2,
|
||||
TimeDelay3,
|
||||
TimeDelay20,
|
||||
TimeDelay50,
|
||||
}
|
||||
|
@ -67,13 +72,15 @@ namespace SicModules.TMs.Routines
|
|||
private RobotArmEnum _blade;
|
||||
private int _pickTimeout;
|
||||
private bool _autoHand;
|
||||
|
||||
private float _sicServoUnloadAngle;
|
||||
private bool _requestAWCData;
|
||||
private SicTM _tm;
|
||||
|
||||
private TMSlitValveRoutine _openSlitValveRoutine = new TMSlitValveRoutine();
|
||||
private TMSlitValveRoutine _closeSlitValveRoutine = new TMSlitValveRoutine();
|
||||
|
||||
private LoadLockTrayClawRoutine _trayUnClamp = new LoadLockTrayClawRoutine();
|
||||
|
||||
private bool _pmPostTrasferEnableHeat = true;
|
||||
|
||||
public TMRobotPickRoutine()
|
||||
|
@ -104,7 +111,7 @@ namespace SicModules.TMs.Routines
|
|||
_target = source;
|
||||
_targetSlot = sourceSlot;
|
||||
_blade = blade;
|
||||
|
||||
_trayUnClamp.Init(false);
|
||||
_openSlitValveRoutine.Init(source.ToString(), true, _pmPostTrasferEnableHeat);
|
||||
_closeSlitValveRoutine.Init(source.ToString(), false, _pmPostTrasferEnableHeat);
|
||||
}
|
||||
|
@ -263,9 +270,20 @@ namespace SicModules.TMs.Routines
|
|||
SetRobotExtendToDO((int)RoutineStep.SetRobortExtendToDo, _target, 2);
|
||||
CheckRobotReady((int)RoutineStep.CheckRobotReady, RobotDevice, _pickTimeout);
|
||||
|
||||
if (_target == ModuleName.Load || _target == ModuleName.LoadLock)//放Load前打开夹爪
|
||||
{
|
||||
ExecuteRoutine((int)RoutineStep.TrayUnClamp1, _trayUnClamp); //夹爪打开
|
||||
}
|
||||
|
||||
if (ModuleHelper.IsPm(_target))//机械手去腔体更改机械手逻辑
|
||||
{
|
||||
Pick((int)RoutineStep.Pick, RobotDevice, _target, _targetSlot, _blade, _pickTimeout);
|
||||
RobotGotoAndWait((int)RoutineStep.RobotGotoPmLowAndWait, RobotDevice, _target, _targetSlot, _blade, 60, false, true);//先到低位
|
||||
RobotGotoAndWait((int)RoutineStep.RobotGotoPmHighAndWait, RobotDevice, _target, _targetSlot, _blade, 60, false, false);//再到低位
|
||||
TimeDelay((int)RoutineStep.TimeDelay3, 3);
|
||||
|
||||
//等磁流体开始旋转,释放Tray盘
|
||||
WaitSicServoUnloadAngleRun((int)RoutineStep.SicServoUnloadAngleRun, _sicServoUnloadAngle, 20);//机械手到达高位开始旋转,释放Tray盘
|
||||
|
||||
}
|
||||
else//别的模块保持机械手逻辑不变
|
||||
{
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
using Aitex.Core.RT.Device;
|
||||
using Aitex.Core.RT.Device.Devices;
|
||||
using Aitex.Core.RT.Event;
|
||||
using Aitex.Core.RT.Log;
|
||||
using Aitex.Core.RT.Routine;
|
||||
using Aitex.Core.RT.SCCore;
|
||||
using MECF.Framework.Common.Equipment;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.PMs;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots;
|
||||
using SicModules.LLs.Routines;
|
||||
using SicModules.TMs.Routines.Base;
|
||||
|
@ -49,15 +51,20 @@ namespace SicModules.TMs.Routines
|
|||
Delay2,
|
||||
VceMoveToSlot,
|
||||
RobotGotoNotWait,
|
||||
RobotGotoPmLowAndWait,
|
||||
RobotGotoPmHighAndWait,
|
||||
WaitSicServoLoadAngleRun,
|
||||
PrepareTransferNotWait,
|
||||
CheckRobotReady,
|
||||
CheckTransferPrepared,
|
||||
LoadRatation,
|
||||
TrayClamp,
|
||||
TrayUnClamp,
|
||||
TrayUnClamp1,
|
||||
TrayUnClamp2,
|
||||
TimeDelay1,
|
||||
TimeDelay2,
|
||||
TimeDelay3,
|
||||
TimeDelay4,
|
||||
SuspectorCheck
|
||||
}
|
||||
|
||||
|
@ -67,6 +74,8 @@ namespace SicModules.TMs.Routines
|
|||
private int _placeTimeout;
|
||||
private bool _requestAWCData;
|
||||
|
||||
private float _sicServoLoadAngleRun;
|
||||
|
||||
private bool _autoHand;
|
||||
private TMSlitValveRoutine _openSlitValveRoutine = new TMSlitValveRoutine();
|
||||
private TMSlitValveRoutine _closeSlitValveRoutine = new TMSlitValveRoutine();
|
||||
|
@ -151,6 +160,11 @@ namespace SicModules.TMs.Routines
|
|||
return Result.FAIL;
|
||||
}
|
||||
|
||||
if (ModuleHelper.IsPm(_target))
|
||||
{
|
||||
_sicServo = DEVICE.GetDevice<SicMultipleServo>($"{_target}.PMServo");
|
||||
}
|
||||
|
||||
//顶针必须在低位
|
||||
//if (_target == ModuleName.LoadLock || _target == ModuleName.Load)
|
||||
//{
|
||||
|
@ -246,9 +260,20 @@ namespace SicModules.TMs.Routines
|
|||
SetRobotExtendToDO((int)RoutineStep.SetRobortExtendToDo, _target, 2);
|
||||
|
||||
CheckRobotReady((int)RoutineStep.CheckRobotReady, RobotDevice, _placeTimeout);
|
||||
|
||||
if (_target == ModuleName.Load || _target == ModuleName.LoadLock)//放Load前打开夹爪
|
||||
{
|
||||
ExecuteRoutine((int)RoutineStep.TrayUnClamp1, _trayUnClamp); //夹爪打开
|
||||
}
|
||||
|
||||
if (ModuleHelper.IsPm(_target))//机械手去腔体更改机械手逻辑
|
||||
{
|
||||
Place((int)RoutineStep.Place, RobotDevice, _target, _targetSlot, _blade, _placeTimeout);
|
||||
RobotGotoAndWait((int)RoutineStep.RobotGotoPmLowAndWait, RobotDevice, _target, _targetSlot, _blade, _placeTimeout,false,true);//先到低位
|
||||
RobotGotoAndWait((int)RoutineStep.RobotGotoPmHighAndWait, RobotDevice, _target, _targetSlot, _blade, _placeTimeout, false, false);//到高位等待伺服旋转
|
||||
TimeDelay((int)RoutineStep.TimeDelay4, 3);
|
||||
WaitSicServoLoadAngleRun((int)RoutineStep.WaitSicServoLoadAngleRun, _sicServoLoadAngleRun,50);//机械手到高位,磁流体旋转锁紧Tray盘
|
||||
//等磁流体开始旋转,固定Tray盘
|
||||
|
||||
}
|
||||
else//别的模块保持机械手逻辑不变
|
||||
{
|
||||
|
@ -272,9 +297,11 @@ namespace SicModules.TMs.Routines
|
|||
if (_target == ModuleName.Load || _target == ModuleName.LoadLock)
|
||||
{
|
||||
//对中
|
||||
|
||||
ExecuteRoutine((int)RoutineStep.TrayClamp, _trayClamp); //夹爪关闭
|
||||
TimeDelay((int)RoutineStep.TimeDelay3, 1);//延迟1s
|
||||
ExecuteRoutine((int)RoutineStep.TrayUnClamp, _trayUnClamp); //夹爪打开
|
||||
ExecuteRoutine((int)RoutineStep.TrayUnClamp2, _trayUnClamp); //夹爪打开
|
||||
|
||||
//ExecuteRoutine((int)RoutineStep.LoadRatation, loadRotationHomeRoutine);
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ namespace SicModules.TMs.Routines
|
|||
private IoValve PMToTm_V70;
|
||||
private IoPressure _pmPT1;
|
||||
private IoConfinementRing _confinementRing;
|
||||
private SicMultipleServo _sicServo;
|
||||
|
||||
private IoInterLock _pmIoInterLock;
|
||||
private IoTC _tc1;
|
||||
|
||||
|
@ -97,6 +97,8 @@ namespace SicModules.TMs.Routines
|
|||
private int _tmV77DelayTime = 5;
|
||||
private double _tmMfcFlow = 10;
|
||||
|
||||
|
||||
|
||||
private bool _pmPostTrasferNeedEnableHeat = true;
|
||||
private bool _preTransferPSUEnable = false;
|
||||
private bool _preTransferSCREnable = false;
|
||||
|
@ -330,7 +332,6 @@ namespace SicModules.TMs.Routines
|
|||
if (_paramIsOpen)//开腔体闸板阀时候的相关操作
|
||||
{
|
||||
SetPreTransfer((int)RoutineStep.SetPmPreTrasfer, _rotationStopTimeout);//旋转停止,加热停止
|
||||
|
||||
WaitPVTempratureBelowSet((int)RoutineStep.WaitPVTempBelowSet, 600);
|
||||
|
||||
ExecuteRoutine((int)RoutineStep.ChamberBalance, _balanceRoutine);
|
||||
|
@ -879,7 +880,7 @@ namespace SicModules.TMs.Routines
|
|||
throw (new RoutineBreakException());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void WaitTempratureBelow900(int id, int timeout)
|
||||
{
|
||||
|
|
|
@ -15,6 +15,7 @@ using MECF.Framework.Common.Equipment;
|
|||
using MECF.Framework.Common.Jobs;
|
||||
using MECF.Framework.Common.Schedulers;
|
||||
using MECF.Framework.Common.SubstrateTrackings;
|
||||
using MECF.Framework.RT.EquipmentLibrary.HardwareUnits.UnLoad;
|
||||
using SicRT.Equipments.Schedulers;
|
||||
using SicRT.Modules.Schedulers;
|
||||
|
||||
|
@ -1541,7 +1542,9 @@ namespace SicRT.Modules
|
|||
{
|
||||
if (_load.CheckWaferNeedProcess(0))
|
||||
{
|
||||
//添加夹爪动作
|
||||
//添加夹爪动作和边缘对位
|
||||
|
||||
_load.RotationHome();
|
||||
|
||||
_load.Purge(_load.GetWaferPurgeCount(0), _load.GetWaferPumpDelayTime(0));
|
||||
|
||||
|
|
|
@ -151,9 +151,21 @@ namespace SicRT.Scheduler
|
|||
|
||||
}
|
||||
|
||||
public void Cl()
|
||||
/// <summary>
|
||||
/// 夹爪动作,然后寻边
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool RotationHome()
|
||||
{
|
||||
|
||||
_entityTaskToken = _ll.InvokeRotationHome();
|
||||
if (_entityTaskToken != (int)FSM_MSG.NONE)
|
||||
{
|
||||
_task = TaskType.Purge;
|
||||
_purged = true;
|
||||
LogTaskStart(_task, $"{Module} purge for new job");
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool Purge(params object[] objs)
|
||||
|
|
|
@ -32,12 +32,12 @@
|
|||
<DI_ITEM Index="26" Name="DI_PSUFlow" BufferOffset="26" Addr="26" Description=""/>
|
||||
<DI_ITEM Index="27" Name="DI_InletTotalFlowLowSW" BufferOffset="27" Addr="27" Description="" />
|
||||
<DI_ITEM Index="28" Name="DI_InletTotalFlowHighSW" BufferOffset="28" Addr="28" Description="" />
|
||||
<DI_ITEM Index="29" Name="DI_InletTotalTempHighSW" BufferOffset="29" Addr="29" Description="????????????????????????????????????????????" />
|
||||
<DI_ITEM Index="29" Name="DI_InletTotalTempHighSW" BufferOffset="29" Addr="29" Description="" />
|
||||
<DI_ITEM Index="30" Name="DI_PMH2DetectorSW" BufferOffset="30" Addr="30" Description="" />
|
||||
<DI_ITEM Index="31" Name="DI_GBHCLDetectorSW" BufferOffset="31" Addr="31" Description="" />
|
||||
<DI_ITEM Index="32" Name="DI_GBExhaustDPSW" BufferOffset="32" Addr="32" Description="" />
|
||||
<DI_ITEM Index="33" Name="DI_GBDoorClosed" BufferOffset="33" Addr="33" Description="" />
|
||||
<DI_ITEM Index="34" Name="DI_H2Pressure2SW" BufferOffset="34" Addr="34" Description="" />
|
||||
|
||||
<DI_ITEM Index="35" Name="DI_GasPipeTempCtrlAlarm" BufferOffset="35" Addr="35" Description="" />
|
||||
<DI_ITEM Index="36" Name="DI_DryPump1Alarm" BufferOffset="36" Addr="36" Description="" />
|
||||
<DI_ITEM Index="37" Name="DI_DryPump2Alarm" BufferOffset="37" Addr="37" Description="" />
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
d:Background="#91b0cd"
|
||||
d:DesignHeight="800"
|
||||
d:DesignWidth="1920"
|
||||
lex:LocalizeDictionary.DesignCulture="."
|
||||
lex:LocalizeDictionary.DesignCulture="en"
|
||||
lex:ResxLocalizationProvider.DefaultAssembly="Sicentury.Localization"
|
||||
lex:ResxLocalizationProvider.DefaultDictionary="lang_common"
|
||||
mc:Ignorable="d">
|
||||
|
@ -871,7 +871,7 @@
|
|||
<RowDefinition Height="32" />
|
||||
<RowDefinition Height="32" />
|
||||
<RowDefinition Height="32" />
|
||||
|
||||
<RowDefinition Height="32" />
|
||||
</Grid.RowDefinitions>
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="90" />
|
||||
|
@ -1322,6 +1322,63 @@
|
|||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Padding="5,1,0,1"
|
||||
Background="{DynamicResource Table_BG_Title}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="1,0,1,1">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
lex:ResxLocalizationProvider.DefaultDictionary="lang_tmview"
|
||||
FontFamily="Arial"
|
||||
FontSize="12"
|
||||
Foreground="{DynamicResource FG_Black}"
|
||||
Text="Rotation"
|
||||
TextWrapping="Wrap" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Grid.Column="1"
|
||||
Padding="5,1,0,1"
|
||||
Background="{DynamicResource Table_BG_Content}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="0,0,0,1">
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
FontFamily="Arial"
|
||||
FontSize="12"
|
||||
Foreground="{DynamicResource FG_Black}"
|
||||
Text="{Binding LLPressureDisplay, StringFormat=\{0:F1\}}"
|
||||
TextAlignment="Center"
|
||||
TextWrapping="Wrap" />
|
||||
</Border>
|
||||
|
||||
<Border
|
||||
Grid.Row="6"
|
||||
Grid.Column="2"
|
||||
Padding="5,1,0,1"
|
||||
Background="{DynamicResource Table_BG_Content}"
|
||||
BorderBrush="{DynamicResource Table_BD}"
|
||||
BorderThickness="0,0,0,1">
|
||||
<Button
|
||||
Width="120"
|
||||
Height="25"
|
||||
Margin="10,0"
|
||||
HorizontalAlignment="Left"
|
||||
Content="RotationHome"
|
||||
IsEnabled="{Binding IsLLEnableManualOperation}">
|
||||
<i:Interaction.Triggers>
|
||||
<i:EventTrigger EventName="Click">
|
||||
<cal:ActionMessage MethodName="Home">
|
||||
<cal:Parameter Value="LoadLock.Rotation" />
|
||||
</cal:ActionMessage>
|
||||
</i:EventTrigger>
|
||||
</i:Interaction.Triggers>
|
||||
</Button>
|
||||
</Border>
|
||||
|
||||
</Grid>
|
||||
|
||||
<Grid Margin="10,10" Visibility="{Binding IsUnLoadInstalled, Converter={StaticResource BoolVisibilityConverter}}">
|
||||
|
|
|
@ -939,6 +939,7 @@ namespace SicUI.Client.Models.Platform.TM
|
|||
TMProvider.Instance.Home(module);
|
||||
}
|
||||
}
|
||||
|
||||
public void Pump(string module)
|
||||
{
|
||||
TMProvider.Instance.Pump(module);
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue