using Aitex.Core.Common;
using Aitex.Core.RT.Fsm;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.SubstrateTrackings;
using MECF.Framework.Common.ToolLayout;
using MECF.Framework.Common.WaferHolder;
using CyberX8_Core;
using CyberX8_RT.Modules.Dummy;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CyberX8_RT.Modules.Dryer;
using Aitex.Core.RT.DataCenter;
using Aitex.Core.Util;
namespace CyberX8_RT.Modules.Buffer
{
public class BufferEntity : Entity, IEntity, IModuleEntity
{
public enum MSG
{
Home
}
#region 属性
public ModuleName Module { get; private set; }
///
/// 初始化状态
///
public bool IsInit
{
get { return false; }
}
///
/// 空闲状态
///
public bool IsIdle
{
get
{
return true;
}
}
///
/// 是否发生错误
///
public bool IsError
{
get { return false; }
}
///
/// 是否正在作业
///
public bool IsBusy
{
get { return false; }
}
public bool IsAuto { get; } = true;
///
/// 是否禁用
///
public bool IsDisable { get; internal set; }
///
/// 是否为工程模式
///
public bool IsEngineering { get; } = false;
///
/// 是否为产品模式
///
public bool IsProduction { get; } = true;
///
/// WaferHolder信息
///
public WaferHolderInfo WaferHolderInfo { get { return WaferHolderManager.Instance.GetWaferHolder(Module.ToString()); } }
#endregion
///
/// 构造函数
///
///
public BufferEntity(ModuleName module)
{
this.Module = module;
WaferManager.Instance.SubscribeLocation(Module, 2);
InitializeWaferHolder();
InitializeSvid();
}
///
/// 初始化WaferHolder
///
private void InitializeWaferHolder()
{
if(WaferHolderInfo!=null)
{
if(!string.IsNullOrEmpty(WaferHolderInfo.WaferAId))
{
if(!WaferManager.Instance.CheckHasWafer(Module,0))
{
WaferManager.Instance.CreateWafer(Module, 0, WaferStatus.Normal, (WaferSize)WaferHolderInfo.WaferSize,(WaferType)WaferHolderInfo.WaferAType);
}
WaferInfo waferInfo = WaferManager.Instance.GetWafer(Module, 0);
waferInfo.WaferOrigin = WaferHolderInfo.WaferAId;
waferInfo.WaferID = WaferHolderInfo.WaferAId;
waferInfo.OrginalWaferHolder = WaferHolderInfo.Id;
}
if(!string.IsNullOrEmpty(WaferHolderInfo.WaferBId))
{
if(!WaferManager.Instance.CheckHasWafer(Module,1))
{
WaferManager.Instance.CreateWafer(Module, 1, WaferStatus.Normal, (WaferSize)WaferHolderInfo.WaferSize, (WaferType)WaferHolderInfo.WaferBType);
}
WaferInfo waferInfo = WaferManager.Instance.GetWafer(Module, 1);
waferInfo.WaferOrigin = WaferHolderInfo.WaferBId;
waferInfo.WaferID = WaferHolderInfo.WaferBId;
waferInfo.OrginalWaferHolder=WaferHolderInfo.Id;
}
}
}
///
/// 初始化SVID
///
private void InitializeSvid()
{
DATA.Subscribe($"{Module}.LotID", () => (WaferHolderInfo != null ? WaferHolderInfo.LotId : ""), SubscriptionAttribute.FLAG.IgnoreSaveDB);
DATA.Subscribe($"{Module}.WSID", () => (WaferHolderInfo != null ? WaferHolderInfo.Id : ""), SubscriptionAttribute.FLAG.IgnoreSaveDB);
DATA.Subscribe($"{Module}.LSAID", () => (WaferHolderInfo != null ? WaferHolderInfo.CrsAId : ""), SubscriptionAttribute.FLAG.IgnoreSaveDB);
DATA.Subscribe($"{Module}.LSBID", () => (WaferHolderInfo != null ? WaferHolderInfo.CrsBId : ""), SubscriptionAttribute.FLAG.IgnoreSaveDB);
DATA.Subscribe($"{Module}.SequenceRecipe", () => (WaferHolderInfo != null ? WaferHolderInfo.SequenceId : ""), SubscriptionAttribute.FLAG.IgnoreSaveDB);
DATA.Subscribe($"{Module}.WaferAID", () => (WaferHolderInfo != null ? WaferHolderInfo.WaferAId : ""), SubscriptionAttribute.FLAG.IgnoreSaveDB);
DATA.Subscribe($"{Module}.WaferBID", () => (WaferHolderInfo != null ? WaferHolderInfo.WaferBId : ""), SubscriptionAttribute.FLAG.IgnoreSaveDB);
DATA.Subscribe($"{Module}.Task", () => WaferHolderInfo != null ? WaferHolderInfo.CurrentControlJobId : "", SubscriptionAttribute.FLAG.IgnoreSaveDB);
}
public bool Check(int msg, out string reason, params object[] args)
{
reason = "";
return false;
}
public bool CheckAcked(int msg)
{
return false;
}
public int Invoke(string function, params object[] args)
{
switch (function)
{
case "HomeAll":
return (int)MSG.Home;
}
return (int)FSM_MSG.NONE;
}
}
}