Sic02-new/FrameworkLocal/RTEquipmentLibrary/HardwareUnits/SMIFs/Brooks/BrooksSMIFHandler.cs

347 lines
11 KiB
C#

using Aitex.Core.RT.Device;
using MECF.Framework.Common.Communications;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.SMIFs.Brooks
{
public abstract class BrooksSMIFHandler : HandlerBase
{
public BrooksSMIF Device { get; }
public string _commandType;
public string _command;
public string _parameter;
protected string _completeEvent;
protected BrooksSMIFHandler(BrooksSMIF device, string commandType,string command, string completeEvent = null,string parameter = null)
: base(BuildMessage(commandType, command, parameter))
{
Device = device;
_commandType = commandType;
_command = command;
_completeEvent = completeEvent;
_parameter = parameter;
Name = command;
}
private static string BuildMessage(string commandType, string command, string parameter)
{
string commandStr = commandType;
if(command != null)
{
commandStr += " " + command;
}
if (parameter != null)
{
commandStr += " " + parameter;
}
return commandStr + "\r\n";
}
protected static string F2S(float value)
{
return value < 0 ? value.ToString() : " " + value.ToString();
}
public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
{
BrooksSMIFMessage response = msg as BrooksSMIFMessage;
ResponseMessage = msg;
if (msg.IsError)
{
Device.NoteError(response.Data);
}
else
{
Device.NoteError(null);
if(msg.IsAck)
{
this.SetState(EnumHandlerState.Acked);
}
if (_completeEvent == null)
{
if (this.IsAcked)
{
SetState(EnumHandlerState.Completed);
transactionComplete = true;
return true;
}
}
else if (this.IsAcked && msg.IsEvent && _completeEvent == response.Data)
{
SetState(EnumHandlerState.Completed);
transactionComplete = true;
return true;
}
}
transactionComplete = false;
return false;
}
}
public class BrooksSMIFRawCommandHandler : BrooksSMIFHandler
{
public BrooksSMIFRawCommandHandler(BrooksSMIF device, string commandType, string command, string completeEvent,string parameter = null)
: base(device, commandType, command, completeEvent,parameter)
{
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
if (base.HandleMessage(msg, out handled))
{
var result = msg as BrooksSMIFMessage;
Device.NoteRawCommandInfo(_commandType,_command, result.RawMessage, msg.IsAck);
ResponseMessage = msg;
handled = true;
}
return true;
}
}
public class BrooksSMIFEnableActionHandler : BrooksSMIFHandler
{
public BrooksSMIFEnableActionHandler(BrooksSMIF device, string action, bool isEnable)
: base(device, "HCS", isEnable? "ENABLE":"DISABLE",null, action)
{
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
if (base.HandleMessage(msg, out handled))
{
var result = msg as BrooksSMIFMessage;
Device.NoteEnable(_parameter, _command == "ENABLE");
}
return true;
}
}
public class BrooksSMIFFetchCassetteHandler : BrooksSMIFHandler
{
public BrooksSMIFFetchCassetteHandler(BrooksSMIF device)
: base(device, "HCS", "FETCH", "CMPL_FETCH")
{
}
}
public class BrooksSMIFLoadCassetteHandler : BrooksSMIFHandler
{
public BrooksSMIFLoadCassetteHandler(BrooksSMIF device)
: base(device, "HCS", "LOAD", null)
{
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
if (!base.HandleMessage(msg, out handled))
{
BrooksSMIFMessage response = msg as BrooksSMIFMessage;
if (response.Data.Contains("ABORT_LOAD"))
{
Device.NoteError("ABORT_LOAD");
handled = true;
}
}
return true;
}
}
public class BrooksSMIFHomeHandler : BrooksSMIFHandler
{
public BrooksSMIFHomeHandler(BrooksSMIF device)
: base(device, "HCS", "HOME", null)
{
}
}
public class BrooksSMIFRecoveryHandler : BrooksSMIFHandler
{
public BrooksSMIFRecoveryHandler(BrooksSMIF device)
: base(device, "HCS", "RECOVERY", null)
{
}
}
public class BrooksSMIFStopHandler : BrooksSMIFHandler
{
public BrooksSMIFStopHandler(BrooksSMIF device)
: base(device, "HCS", "STOP", null)
{
}
}
public class BrooksSMIFResetHandler : BrooksSMIFHandler
{
public BrooksSMIFResetHandler(BrooksSMIF device)
: base(device, "HCS", "RESET", null)
{
}
}
public class BrooksSMIFOpenPodHandler : BrooksSMIFHandler
{
public BrooksSMIFOpenPodHandler(BrooksSMIF device)
: base(device, "HCS", "OPEN", "CMPL_OPEN")
{
}
}
public class BrooksSMIFUnloadCassetteHandler : BrooksSMIFHandler
{
public BrooksSMIFUnloadCassetteHandler(BrooksSMIF device)
: base(device, "HCS", "UNLOAD", null)
{
}
//mabye need and the guide document miss this info ??
//public override bool HandleMessage(MessageBase msg, out bool handled)
//{
// if (!base.HandleMessage(msg, out handled))
// {
// BrooksSMIFMessage response = msg as BrooksSMIFMessage;
// if (response.Data.Contains("ABORT_UNLOAD"))
// {
// Device.NoteError("ABORT_UNLOAD");
// handled = true;
// }
// }
// return true;
//}
}
public class BrooksSMIFClosePodHandler : BrooksSMIFHandler
{
public BrooksSMIFClosePodHandler(BrooksSMIF device)
: base(device, "HCS", "CLOSE", "CMPL_UNLOAD")
{
}
}
public class BrooksSMIFRequestConstantHandler : BrooksSMIFHandler
{
public BrooksSMIFRequestConstantHandler(BrooksSMIF device, string constantId)
: base(device, "ECR", null, null, constantId)
{
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as BrooksSMIFMessage;
if (result.MessagePart[0] == "ECD")
{
msg.IsAck = true;
}
else
{
handled = false;
return false;
}
if (base.HandleMessage(msg, out handled))
{
Device.NoteConstant(result.MessagePart[1]);
}
return true;
}
}
public class BrooksSMIFRequestStatusHandler : BrooksSMIFHandler
{
int _formCode;
string AlarmId = "ALMID";//0000 = No alarm
string Mode = "MODE";//AUTO,MANUAL
string PodPresent = "PIP";//FALSE=no pod present,TRUE=pod present
string PortStatus = "PRTST";//UNLK=port unlocked,LOCK=port locked,OTHER=none of the above
string GripperStatus = "GRPST";//OPEN=gripper opened;CLOSE=gripper closed;OT=overtraveled;OTHER=none of the above
string Ready = "READY";//FALSE=busy;TRUE=ready for new command
string Home = "HOME";//FALSE=not home;TRUE=home
string Elevator = "ELUP";//FALSE=elevator not at home limit;TRUE=elevator at home limit
string ArmRetract = "ARM_RETR";//TRUE=arm retract;FALSE=arm not retract
public BrooksSMIFRequestStatusHandler(BrooksSMIF device, int formCode)
: base(device, "FSR", null, null, "FC="+formCode.ToString())
{
_formCode = formCode;
}
public override bool HandleMessage(MessageBase msg, out bool handled)
{
var result = msg as BrooksSMIFMessage;
if (result.MessagePart[0].Contains($"FSD{_formCode}"))
{
msg.IsAck = true;
}
else
{
handled = false;
return false;
}
bool isPodPresent = false;
bool isReady = false;
bool isArmRetract = false;
bool isHomed = false;
for (int i = 0;i< result.MessagePart.Length;i++)
{
var statusArray = result.MessagePart[i].Split('=');
if (statusArray.Length != 2)
continue;
if (statusArray[0] == AlarmId)
{
if (statusArray[1] != "0000")
Device.SetError(statusArray[1]);
}
else if (statusArray[0] == Mode)
{
}
else if (statusArray[0] == PodPresent)
{
if (statusArray[1].ToUpper() == "TRUE")
isPodPresent = true;
}
else if (statusArray[0] == PortStatus)
{
}
else if (statusArray[0] == GripperStatus)
{
}
else if (statusArray[0] == Ready)
{
if (statusArray[1].ToUpper() == "TRUE")
isReady = true;
}
else if (statusArray[0] == Home)
{
if (statusArray[1].ToUpper() == "TRUE")
isHomed = true;
}
else if (statusArray[0] == Elevator)
{
}
else if (statusArray[0] == ArmRetract)
{
if (statusArray[1].ToUpper() == "TRUE")
isArmRetract = true;
}
}
Device.SetStatus(isReady, isHomed, isPodPresent, isArmRetract);
if (base.HandleMessage(msg, out handled))
{
Device.NoteStatus(result.MessagePart[0], result.Data);
}
return true;
}
}
}