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 /// <summary> /// 构造函数 /// </summary> /// <param name="module"></param> public ModuleHomeAllRoutine(string module) : base(module) { } /// <summary> /// 中止 /// </summary> public void Abort() { Runner.Stop("Manual Stop"); } /// <summary> /// 监控 /// </summary> /// <returns></returns> 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; } /// <summary> /// Home Dual Puf /// </summary> /// <returns></returns> 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; } /// <summary> /// 检验dual puf home情况 /// </summary> /// <returns></returns> 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; } /// <summary> /// 检验dual puf home失败情况 /// </summary> /// <returns></returns> 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; } /// <summary> /// Home Loader /// </summary> /// <returns></returns> private bool HomeLoaderEntity() { if (ModuleHelper.IsInstalled(ModuleName.Loader1)) { if (_loaderEntity.Invoke("HomeAll") == (int)FSM_MSG.ALARM) { return false; } } return true; } /// <summary> /// 检验Loader home情况 /// </summary> /// <returns></returns> private bool CheckHomeLoaderStatus() { bool result = true; if (ModuleHelper.IsInstalled(ModuleName.Loader1)) { result = _loaderEntity.IsIdle; } return result; } /// <summary> /// 检验Loader home失败情况 /// </summary> /// <returns></returns> private bool CheckHomeLoaderStopStatus() { bool result = false; if (ModuleHelper.IsInstalled(ModuleName.Loader1)) { result = _loaderEntity.State == (int)LOADERSTATE.Error; } return result; } /// <summary> /// Home LoaderTransporter /// </summary> /// <returns></returns> private bool HomeLoaderTransporterEntity() { if (ModuleHelper.IsInstalled(ModuleName.Transporter2)) { if (_loaderTransporterEntity.Invoke("HomeAll") == (int)FSM_MSG.ALARM) { return false; } } return true; } /// <summary> /// 检验LoaderTransporter home情况 /// </summary> /// <returns></returns> private bool CheckHomeLoaderTransporterStatus() { bool result = true; if (ModuleHelper.IsInstalled(ModuleName.Transporter2)) { result = _loaderTransporterEntity.IsIdle; } return result; } /// <summary> /// 检验Loader home失败情况 /// </summary> /// <returns></returns> private bool CheckHomeLoaderTransporterStopStatus() { bool result = false; if (ModuleHelper.IsInstalled(ModuleName.Transporter2)) { result = _loaderTransporterEntity.State == (int)TransporterState.Error; } return result; } /// <summary> /// Home ProcessTransporter /// </summary> /// <returns></returns> private bool HomeProcessTransporterEntity() { if (ModuleHelper.IsInstalled(ModuleName.Transporter1)) { if (_processTransporterEntity.Invoke("HomeAll") == (int)FSM_MSG.ALARM) { return false; } } return true; } /// <summary> /// 检验LoaderTransporter home情况 /// </summary> /// <returns></returns> private bool CheckHomeProcessTransporterStatus() { bool result = true; if (ModuleHelper.IsInstalled(ModuleName.Transporter1)) { result = _processTransporterEntity.IsIdle; } return result; } /// <summary> /// 检验Loader home失败情况 /// </summary> /// <returns></returns> 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<RouteManager>.Instance.GetModule<PUFEntity>(ModuleName.PUF1.ToString()); _puf2Entity = Singleton<RouteManager>.Instance.GetModule<PUFEntity>(ModuleName.PUF2.ToString()); _loaderEntity = Singleton<RouteManager>.Instance.GetModule<LoaderEntity>(ModuleName.Loader1.ToString()); _loaderTransporterEntity = Singleton<RouteManager>.Instance.GetModule<TransporterEntity>(ModuleName.Transporter2.ToString()); _processTransporterEntity = Singleton<RouteManager>.Instance.GetModule<TransporterEntity>(ModuleName.Transporter1.ToString()); return Runner.Start("System","System Home All"); } } }