140 lines
4.7 KiB
C#
140 lines
4.7 KiB
C#
using Aitex.Core.RT.Event;
|
|
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 class YaskawaRobotMessage : AsciiMessage
|
|
{
|
|
public int UNo { get; set; }
|
|
public int SeqNo { get; set; }
|
|
public string Status { get; set; }
|
|
public string Ackcd { get; set; }
|
|
public string Command { get; set; }
|
|
public string[] Data { get; set; }
|
|
public string ErrorCode { get; set; }
|
|
public string EvNo { get; set; }
|
|
public string EvDate { get; set; }
|
|
public string EvData { get; set; }
|
|
|
|
}
|
|
public class YaskawaAlignerConnection : TCPPortConnectionBase
|
|
{
|
|
private YaskawaAligner _aligner;
|
|
public YaskawaAlignerConnection(YaskawaAligner pa, string ipaddress)
|
|
: base(ipaddress, "\r", true)
|
|
{
|
|
_aligner = pa;
|
|
}
|
|
protected override MessageBase ParseResponse(string rawMessage)
|
|
{
|
|
YaskawaRobotMessage msg = new YaskawaRobotMessage();
|
|
try
|
|
{
|
|
msg.RawMessage = rawMessage.Replace("\r", "");
|
|
string[] msgdata = msg.RawMessage.Split(',');
|
|
msg.UNo = Convert.ToInt16(msgdata[1]);
|
|
msg.IsAck = false;
|
|
msg.IsComplete = false;
|
|
msg.IsFormatError = false;
|
|
msg.IsEvent = false;
|
|
|
|
if (msgdata[0] == "$") msg.IsAck = true;
|
|
if (msgdata[0] == "!") msg.IsComplete = true;
|
|
if (msgdata[0] == "?")
|
|
{
|
|
msg.IsFormatError = true;
|
|
}
|
|
if (msgdata[0] == ">" && msgdata[2] == "EVNT")
|
|
{
|
|
msg.IsEvent = true;
|
|
msg.EvNo = msgdata[3];
|
|
msg.EvDate = msgdata[4];
|
|
msg.EvData = msgdata[5];
|
|
return msg;
|
|
}
|
|
|
|
if (_aligner.IsEnableSeqNo)
|
|
{
|
|
msg.SeqNo = Convert.ToInt16(msgdata[2]);
|
|
msg.Status = msgdata[3];
|
|
msg.Ackcd = msgdata[4];
|
|
msg.Command = msgdata[5];
|
|
msg.Data = msgdata.Skip(6).Take(msgdata.Length - 6 - (_aligner.IsEnableCheckSum ? 1 : 0)).ToArray();
|
|
}
|
|
else
|
|
{
|
|
msg.Status = msgdata[2];
|
|
msg.Ackcd = msgdata[3];
|
|
msg.Command = msgdata[4];
|
|
msg.Data = msgdata.Skip(6).Take(msgdata.Length - 5 - (_aligner.IsEnableCheckSum ? 1 : 0)).ToArray();
|
|
}
|
|
_aligner.ParseStatus(msg.Status);
|
|
|
|
return msg;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LOG.Write(ex);
|
|
msg.IsFormatError = true;
|
|
return msg;
|
|
}
|
|
}
|
|
|
|
protected override void OnEventArrived(MessageBase msg)
|
|
{
|
|
YaskawaRobotMessage evt = msg as YaskawaRobotMessage;
|
|
|
|
if (evt.EvNo == "100")
|
|
{
|
|
string errocode = evt.EvData.Substring(1, evt.EvData.Length - 1);
|
|
_aligner.NotifyAlarmByErrorCode(errocode);
|
|
if (Convert.ToInt32(errocode,16) > 0xF0)
|
|
_aligner.OnError($"Robot occurred error:{evt.EvData} on {evt.EvDate}.");
|
|
else
|
|
EV.PostWarningLog("Robot", $"Robot occurred error:{evt.EvData} on {evt.EvDate}.");
|
|
|
|
}
|
|
if (evt.EvNo == "140")
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
public void SendAck()
|
|
{
|
|
if (_aligner.IsEnableSeqNo)
|
|
{
|
|
_aligner.CurrentSeqNo = _aligner.SeqnoGenerator.create();
|
|
_aligner.SeqnoGenerator.release(_aligner.CurrentSeqNo);
|
|
}
|
|
string commandstr = $",{_aligner.UnitNumber}" + (_aligner.IsEnableSeqNo ? $",{_aligner.CurrentSeqNo:D2}" : "") + ",ACKN";
|
|
if (_aligner.IsEnableCheckSum)
|
|
{
|
|
commandstr += ",";
|
|
commandstr = commandstr + Checksum(Encoding.ASCII.GetBytes(commandstr)) + "\r";
|
|
}
|
|
commandstr = "$" + commandstr;
|
|
SendMessage(commandstr);
|
|
}
|
|
|
|
private string Checksum(byte[] bytes)
|
|
{
|
|
int sum = 0;
|
|
foreach (byte code in bytes)
|
|
{
|
|
sum += code;
|
|
}
|
|
string hex = String.Format("{0:X2}", sum % 256);
|
|
return hex;
|
|
}
|
|
|
|
}
|
|
}
|