using Aitex.Core.RT.Fsm;
using Aitex.Core.RT.Log;
using Aitex.Core.Util;
using Aitex.Core.Utilities;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.Persistent.Reservoirs;
using MECF.Framework.Common.Persistent.Temperature;
using MECF.Framework.Common.ToolLayout;
using PunkHPX8_Core;
using PunkHPX8_RT.Modules.Reservoir;
using PunkHPX8_RT.Modules.VpwCell;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static PunkHPX8_RT.Modules.PlatingCell.PlatingCellEntity;
namespace PunkHPX8_RT.Modules.PlatingCell
{
public class PlatingCellVerticalEntity : Entity, IEntity, IModuleEntity
{
public enum VerticalMsg
{
NONE,
Error,
ResumeError,
Initialize,
Abort,
Init,
Position
}
#region 内部变量
private PlatingCellVerticalInitializeRoutine _initializeRoutine;
#endregion
#region 属性
///
/// 模块名称
///
public ModuleName Module { get; private set; }
///
/// 是否Init
///
public bool IsInit
{
get { return fsm.State == (int)PlatingCellVerticalState.Init; }
}
///
/// 是否Idle
///
public bool IsIdle
{
get
{
return fsm.State == (int)PlatingCellVerticalState.Idle;
}
}
///
/// 是否错误
///
public bool IsError
{
get { return fsm.State == (int)PlatingCellVerticalState.Error; }
}
///
/// 正在忙碌
///
public bool IsBusy
{
get { return fsm.State == (int)PlatingCellVerticalState.Initializing; }
}
///
/// 状态
///
public int State { get { return fsm.State; } }
public bool IsDisable { get { return false; } }
public bool IsAuto { get { return true; } }
public bool IsEngineering { get { return false; } }
public bool IsProduction { get { return true; } }
#endregion
///
/// 构造函数
///
///
public PlatingCellVerticalEntity(ModuleName module)
{
Module = module;
InitialFsm();
}
///
/// 初始化
///
///
protected override bool Init()
{
InitializeRoutine();
return true;
}
///
/// 初始化Routine
///
private void InitializeRoutine()
{
_initializeRoutine = new PlatingCellVerticalInitializeRoutine(Module.ToString());
}
/// 初始化状态机
///
private void InitialFsm()
{
fsm = new StateMachine(Module.ToString(), (int)PlatingCellVerticalState.Init, 100);
fsm.EnableRepeatedMsg(true);
AnyStateTransition(VerticalMsg.Initialize, InitializeAll, PlatingCellVerticalState.Initializing);
Transition(PlatingCellVerticalState.Initializing, FSM_MSG.TIMER, InitializeAllMonitor, PlatingCellVerticalState.Idle);
AnyStateTransition(VerticalMsg.Error, NullFunc, PlatingCellVerticalState.Error);
//Enter Init
Transition(PlatingCellVerticalState.Idle, VerticalMsg.Init, NullFunc, PlatingCellVerticalState.Init);
EnumLoop.ForEach((item) => { fsm.MapState((int)item, item.ToString()); });
EnumLoop.ForEach((item) => { fsm.MapMessage((int)item, item.ToString()); });
}
#region 初始化
///
/// 初始化
///
///
private bool InitializeAll(object[] param)
{
return _initializeRoutine.Start() == RState.Running;
}
///
/// Initialize 监控
///
///
///
private bool InitializeAllMonitor(object[] param)
{
RState rsstate = _initializeRoutine.Monitor();
if (rsstate == RState.End)
{
return true;
}
else if (rsstate == RState.Failed || rsstate == RState.Timeout)
{
PostMsg(VerticalMsg.Error);
return false;
}
return false;
}
#endregion
public bool Check(int msg, out string reason, params object[] args)
{
reason = "";
return true;
}
public bool CheckAcked(int msg)
{
return true;
}
public int Invoke(string function, params object[] args)
{
return (int)FSM_MSG.NONE;
}
}
}