Sic.Framework-Nanjing-Baishi/MECF.Framework.RT.Equipment.../HardwareUnits/Aligners/YaskawaAligner/YaskawaAlignerHandler.cs

144 lines
4.4 KiB
C#

using Aitex.Core.RT.Log;
using MECF.Framework.Common.Communications;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Aligners.YaskawaAligner
{
public abstract class YaskawaAlignerHandler : HandlerBase
{
public YaskawaAligner Device { get; }
public string _commandType;
public string _command;
public string _parameter;
private int _seqNO;
public YaskawaAlignerHandler(YaskawaAligner device, string command, string parameter = null)
: base(BuildMessage(command, parameter))
{
Device = device;
_command = command;
_parameter = parameter;
Name = command;
}
protected static string BuildMessage(string command, string parameter)
{
if (string.IsNullOrEmpty(parameter))
return command;
return $"{command},{parameter}";
}
private static string Checksum(byte[] bytes)
{
int sum = 0;
foreach (byte code in bytes)
{
sum += code;
}
string hex = String.Format("{0:X2}", sum % 256);
return hex;
}
public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
{
YaskawaRobotMessage response = msg as YaskawaRobotMessage;
ResponseMessage = msg;
if (msg.IsError)
{
Device.OnError(response.RawMessage);
transactionComplete = true;
return true;
}
if (msg.IsAck)
{
SetState(EnumHandlerState.Acked);
}
if (response.IsComplete)
{
SetState(EnumHandlerState.Completed);
Device.SenACK();
Device.OnActionDone(null);
transactionComplete = true;
return true;
}
transactionComplete = false;
return false;
}
protected virtual void NoteCommandResult(YaskawaRobotMessage response)
{
}
}
public class YaskawaAlignerReadHandler : YaskawaAlignerHandler
{
public YaskawaAlignerReadHandler(YaskawaAligner aligner, string command, string parameter = null)
: base(aligner, command, parameter)
{
string temp = string.IsNullOrEmpty(parameter) ? parameter : "";
LOG.Write($"{aligner.Name} execute read command {command} {temp} in ASCII.");
}
public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
{
YaskawaRobotMessage response = msg as YaskawaRobotMessage;
if (Device.ParseReadData(_command, response.Data))
{
Device.OnActionDone(null);
transactionComplete = true;
return true;
}
response.IsError = true;
return base.HandleMessage(response, out transactionComplete);
}
}
public class YaskawaAlignerSetHandler : YaskawaAlignerHandler
{
public YaskawaAlignerSetHandler(YaskawaAligner pa, string command, string parameter = null)
: base(pa, command, parameter)
{
string temp = string.IsNullOrEmpty(parameter) ? parameter : "";
LOG.Write($"{pa.Name} execute set command {command} {temp} in ASCII.");
}
public override bool HandleMessage(MessageBase msg, out bool transactionComplete)
{
YaskawaRobotMessage response = msg as YaskawaRobotMessage;
if (response.IsComplete)
{
Device.OnActionDone(null);
transactionComplete = true;
return true;
}
return base.HandleMessage(response, out transactionComplete);
}
}
public class YaskawaAlignerMotionHandler : YaskawaAlignerHandler
{
public YaskawaAlignerMotionHandler(YaskawaAligner pa, string command, string parameter = null)
: base(pa, command, parameter)
{
string temp = string.IsNullOrEmpty(parameter) ? parameter : "";
LOG.Write($"{pa.Name} execute motion command {command} {temp} in ASCII.");
}
}
}