SicMultiplate/Modules/Mainframe/LLs/Routines/LoadHomeRoutine.cs

176 lines
4.3 KiB
C#
Raw Normal View History

2023-04-13 15:35:13 +08:00
using System;
using Aitex.Core.RT.Log;
2023-03-03 15:42:13 +08:00
using Aitex.Core.RT.Routine;
using Aitex.Core.RT.SCCore;
using MECF.Framework.Common.Equipment;
2023-04-13 15:35:13 +08:00
using SicModules.LLs.Routines.Base;
2023-03-03 15:42:13 +08:00
2023-04-13 15:35:13 +08:00
namespace SicModules.LLs.Routines
2023-03-03 15:42:13 +08:00
{
public class LoadHomeRoutine : LoadLockBaseRoutine
{
enum RoutineStep
{
CloseV79,
CloseV83,
2024-03-29 15:52:44 +08:00
CloseV84,
ServoOnRotation
2023-03-03 15:42:13 +08:00
}
private int _homeTimeout;
public LoadHomeRoutine(ModuleName module)
{
Module = module.ToString();
Name = "Home";
}
public override Result Start(params object[] objs)
{
Reset();
_homeTimeout = SC.GetValue<int>("LoadLock.HomeTimeout");
Notify("Start");
return Result.RUN;
}
public override Result Monitor()
{
try
{
CloseLoadVent((int)RoutineStep.CloseV79);
CloseFastPump((int)RoutineStep.CloseV83);
CloseSlowPump((int)RoutineStep.CloseV84);
2024-03-29 15:52:44 +08:00
ServoOnRotation((int)RoutineStep.ServoOnRotation);
2023-03-03 15:42:13 +08:00
LoadLockDevice.AutoCreatWafer();
}
catch (RoutineBreakException)
{
return Result.RUN;
}
catch (RoutineFaildException ex)
{
LOG.Error(ex.ToString());
return Result.FAIL;
}
Notify("Finished");
return Result.DONE;
}
public void CloseLoadVent(int id)
{
Tuple<bool, Result> ret = Execute(id, () =>
{
Notify($"Close Load vent valve");
if (!LoadLockDevice.SetFastVentValve(false, out string reason))
{
Stop(reason);
return false;
}
return true;
});
if (ret.Item1)
{
if (ret.Item2 == Result.FAIL)
{
throw (new RoutineFaildException());
}
else
throw (new RoutineBreakException());
}
}
public void CloseFastPump(int id)
{
Tuple<bool, Result> ret = Execute(id, () =>
{
Notify($"Close Load fast pump valve");
if (!LoadLockDevice.SetFastPumpValve(false, out string reason))
{
Stop(reason);
return false;
}
return true;
});
if (ret.Item1)
{
if (ret.Item2 == Result.FAIL)
{
throw (new RoutineFaildException());
}
else
throw (new RoutineBreakException());
}
}
public void CloseSlowPump(int id)
{
Tuple<bool, Result> ret = Execute(id, () =>
{
Notify($"Close slow pump valve");
if (!LoadLockDevice.SetSlowPumpValve(false, out string reason))
{
Stop(reason);
return false;
}
return true;
});
if (ret.Item1)
{
if (ret.Item2 == Result.FAIL)
{
throw (new RoutineFaildException());
}
else
throw (new RoutineBreakException());
}
}
2024-03-29 15:52:44 +08:00
public void ServoOnRotation(int id)
{
Tuple<bool, Result> ret = Execute(id, () =>
{
Notify($"ServoOn Rotation");
if (!LoadLockDevice.ServoOnRotation(true, out string reason))
{
Stop(reason);
return false;
}
return true;
});
if (ret.Item1)
{
if (ret.Item2 == Result.FAIL)
{
throw (new RoutineFaildException());
}
else
throw (new RoutineBreakException());
}
}
2023-03-03 15:42:13 +08:00
public override void Abort()
{
base.Abort();
}
}
}