144 lines
4.4 KiB
C#
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.");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|