using Aitex.Core.Common;
using MECF.Framework.Common.Equipment;
using CyberX8_RT.Devices.EFEM;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Aitex.Core.RT.Log;
using Aitex.Core.RT.Routine;
using Aitex.Sorter.Common;
using MECF.Framework.Common.Schedulers;
using MECF.Framework.Common.SubstrateTrackings;
using System.Diagnostics;
using CyberX8_Core;
using Aitex.Core.RT.SCCore;
using System.Threading;
using Aitex.Core.Util;
using MECF.Framework.Common.Utilities;
namespace CyberX8_RT.Modules.EFEM
{
public class EfemMapDummyRoutine:ModuleRoutineBase, IRoutine
{
private enum MapDummyStep
{
MapDummy1,
CheckDummy1Map,
MapDummy2,
CheckDummy2Map,
End,
}
private EfemBase _efem;
private EfemRobotMapRoutine _robotMapRoutine;
bool _isDummy1Install = ModuleHelper.IsInstalled(ModuleName.Dummy1);
bool _isDummy2Install = ModuleHelper.IsInstalled(ModuleName.Dummy2);
///
/// 构造函数
///
///
public EfemMapDummyRoutine(EfemBase efem) : base(ModuleName.EfemRobot)
{
_efem = efem;
_robotMapRoutine=new EfemRobotMapRoutine(efem);
}
///
/// 启动
///
///
///
public RState Start(params object[] objs)
{
return Runner.Start(Module, "Map Dummy");
}
///
/// 监控
///
///
public RState Monitor()
{
Runner.RunIf(MapDummyStep.MapDummy1, CheckDummyAvaible(ModuleName.Dummy1, _isDummy1Install),
() => { return Map(ModuleName.Dummy1);},_delay_1ms)
.WaitWithStopConditionIf(MapDummyStep.CheckDummy1Map, CheckDummyAvaible(ModuleName.Dummy1, _isDummy1Install),
() => CommonFunction.CheckRoutineEndState(_robotMapRoutine), () => CommonFunction.CheckRoutineStopState(_robotMapRoutine))
.RunIf(MapDummyStep.MapDummy2, CheckDummyAvaible(ModuleName.Dummy2, _isDummy2Install),
() => { return Map(ModuleName.Dummy2); }, _delay_1ms)
.WaitWithStopConditionIf(MapDummyStep.CheckDummy2Map, CheckDummyAvaible(ModuleName.Dummy2, _isDummy2Install),
() => CommonFunction.CheckRoutineEndState(_robotMapRoutine), () => CommonFunction.CheckRoutineStopState(_robotMapRoutine))
.End(MapDummyStep.End, ActionDone, 0);
return Runner.Status;
}
private bool CheckDummyAvaible(ModuleName moduleName, bool install)
{
if (!install)
{
return false;
}
if (ModuleHelper.IsDummy(moduleName))
{
DummyDevice dummyDevice = Singleton.Instance.EFEM.GetDummyDevice(moduleName - ModuleName.Dummy1);
if (dummyDevice == null)
{
return false;
}
return dummyDevice.HasCassette;
}
return false;
}
///
/// Map功能
///
///
private bool Map(ModuleName moduleName)
{
return _robotMapRoutine.Start(moduleName) == RState.Running;
}
private bool ActionDone()
{
return true;
}
public void Abort()
{
}
}
}