using Aitex.Core.RT.Fsm;
using Aitex.Core.RT.Routine;
using Aitex.Core.Util;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.Routine;
using CyberX8_Core;
using CyberX8_RT.Modules.Loader;
using CyberX8_RT.Modules.PUF;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CyberX8_RT.Modules.Transporter;
namespace CyberX8_RT.Modules
{
public class ModuleHomeAllRoutine : RoutineBase, IRoutine
{
private enum HomeStep
{
DualPufHome,
DualPufHomeWait,
LoaderHome,
LoaderHomeWait,
LoaderTransporterHome,
LoaderTransporterHomeWait,
ProcessTransporterHome,
ProcessTransporterHomeWait,
End
}
#region 内部变量
private PUFEntity _puf1Entity;
private PUFEntity _puf2Entity;
private LoaderEntity _loaderEntity;
private TransporterEntity _loaderTransporterEntity;
private TransporterEntity _processTransporterEntity;
#endregion
///
/// 构造函数
///
///
public ModuleHomeAllRoutine(string module) : base(module)
{
}
///
/// 中止
///
public void Abort()
{
Runner.Stop("Manual Stop");
}
///
/// 监控
///
///
public RState Monitor()
{
Runner.Run(HomeStep.DualPufHome, HomeDualPuf, _delay_1ms)
.WaitWithStopCondition(HomeStep.DualPufHomeWait, CheckHomeDualPufStatus, CheckHomeDualPufStopStatus)
.Run(HomeStep.LoaderHome, HomeLoaderEntity, _delay_1ms)
.WaitWithStopCondition(HomeStep.LoaderHomeWait, CheckHomeLoaderStatus, CheckHomeLoaderStopStatus)
.Run(HomeStep.LoaderTransporterHome, HomeLoaderTransporterEntity, _delay_1ms)
.WaitWithStopCondition(HomeStep.LoaderTransporterHomeWait, CheckHomeLoaderTransporterStatus, CheckHomeLoaderTransporterStopStatus)
.Run(HomeStep.ProcessTransporterHome, HomeProcessTransporterEntity, _delay_1ms)
.WaitWithStopCondition(HomeStep.ProcessTransporterHomeWait, CheckHomeProcessTransporterStatus, CheckHomeProcessTransporterStopStatus)
.End(HomeStep.End, NullFun, _delay_1ms);
return Runner.Status;
}
///
/// Home Dual Puf
///
///
private bool HomeDualPuf()
{
if(ModuleHelper.IsInstalled(ModuleName.PUF1))
{
if(_puf1Entity.Invoke("HomeAll")==(int)FSM_MSG.ALARM)
{
return false;
}
}
if(ModuleHelper.IsInstalled(ModuleName.PUF2))
{
if(_puf2Entity.Invoke("HomeAll")==(int)FSM_MSG.ALARM)
{
return false;
}
}
return true;
}
///
/// 检验dual puf home情况
///
///
private bool CheckHomeDualPufStatus()
{
bool puf1Result = true;
if(ModuleHelper.IsInstalled(ModuleName.PUF1))
{
puf1Result= _puf1Entity.IsIdle;
}
bool puf2Result = true;
if(ModuleHelper.IsInstalled(ModuleName.PUF2))
{
puf2Result= _puf2Entity.IsIdle;
}
return puf1Result && puf2Result;
}
///
/// 检验dual puf home失败情况
///
///
private bool CheckHomeDualPufStopStatus()
{
bool puf1Result = false;
if (ModuleHelper.IsInstalled(ModuleName.PUF1))
{
puf1Result = _puf1Entity.State == (int)PUFSTATE.Error;
}
bool puf2Result = false;
if (ModuleHelper.IsInstalled(ModuleName.PUF2))
{
puf2Result = _puf2Entity.State == (int)PUFSTATE.Error;
}
return puf1Result && puf2Result;
}
///
/// Home Loader
///
///
private bool HomeLoaderEntity()
{
if (ModuleHelper.IsInstalled(ModuleName.Loader1))
{
if (_loaderEntity.Invoke("HomeAll") == (int)FSM_MSG.ALARM)
{
return false;
}
}
return true;
}
///
/// 检验Loader home情况
///
///
private bool CheckHomeLoaderStatus()
{
bool result = true;
if (ModuleHelper.IsInstalled(ModuleName.Loader1))
{
result = _loaderEntity.IsIdle;
}
return result;
}
///
/// 检验Loader home失败情况
///
///
private bool CheckHomeLoaderStopStatus()
{
bool result = false;
if (ModuleHelper.IsInstalled(ModuleName.Loader1))
{
result = _loaderEntity.State == (int)LOADERSTATE.Error;
}
return result;
}
///
/// Home LoaderTransporter
///
///
private bool HomeLoaderTransporterEntity()
{
if (ModuleHelper.IsInstalled(ModuleName.Transporter2))
{
if (_loaderTransporterEntity.Invoke("HomeAll") == (int)FSM_MSG.ALARM)
{
return false;
}
}
return true;
}
///
/// 检验LoaderTransporter home情况
///
///
private bool CheckHomeLoaderTransporterStatus()
{
bool result = true;
if (ModuleHelper.IsInstalled(ModuleName.Transporter2))
{
result = _loaderTransporterEntity.IsIdle;
}
return result;
}
///
/// 检验Loader home失败情况
///
///
private bool CheckHomeLoaderTransporterStopStatus()
{
bool result = false;
if (ModuleHelper.IsInstalled(ModuleName.Transporter2))
{
result = _loaderTransporterEntity.State == (int)TransporterState.Error;
}
return result;
}
///
/// Home ProcessTransporter
///
///
private bool HomeProcessTransporterEntity()
{
if (ModuleHelper.IsInstalled(ModuleName.Transporter1))
{
if (_processTransporterEntity.Invoke("HomeAll") == (int)FSM_MSG.ALARM)
{
return false;
}
}
return true;
}
///
/// 检验LoaderTransporter home情况
///
///
private bool CheckHomeProcessTransporterStatus()
{
bool result = true;
if (ModuleHelper.IsInstalled(ModuleName.Transporter1))
{
result = _processTransporterEntity.IsIdle;
}
return result;
}
///
/// 检验Loader home失败情况
///
///
private bool CheckHomeProcessTransporterStopStatus()
{
bool result = false;
if (ModuleHelper.IsInstalled(ModuleName.Transporter1))
{
result = _processTransporterEntity.State == (int)TransporterState.Error;
}
return result;
}
public RState Start(params object[] objs)
{
_puf1Entity = Singleton.Instance.GetModule(ModuleName.PUF1.ToString());
_puf2Entity = Singleton.Instance.GetModule(ModuleName.PUF2.ToString());
_loaderEntity = Singleton.Instance.GetModule(ModuleName.Loader1.ToString());
_loaderTransporterEntity = Singleton.Instance.GetModule(ModuleName.Transporter2.ToString());
_processTransporterEntity = Singleton.Instance.GetModule(ModuleName.Transporter1.ToString());
return Runner.Start("System","System Home All");
}
}
}