123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- using System;
- using System.Collections.Generic;
- using System.IO.Ports;
- using System.Linq;
- using System.Text;
- using Aitex.Core.RT.Event;
- using Aitex.Core.RT.Log;
- using Aitex.Core.RT.SCCore;
- using MECF.Framework.Common.Communications;
- namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robots.YaskawaRobots
- {
- 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 YaskawaRobotConnection: TCPPortConnectionBase
- {
- private YaskawaSR100Robot _robot;
- public YaskawaRobotConnection(YaskawaSR100Robot robot, string ipaddress)
- : base(ipaddress, "\r", true)
- {
- _robot = robot;
- }
- protected override MessageBase ParseResponse(string rawMessage)
- {
- YaskawaRobotMessage msg = new YaskawaRobotMessage();
- try
- {
- msg.RawMessage = rawMessage.Replace("\r","");
- string[] msgdata = rawMessage.Replace("\r", "").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;
- msg.IsComplete = false;
- }
-
- if (msgdata[0] == "?")
- {
- msg.IsFormatError = true;
- msg.ErrorCode = msgdata[1];
- return msg;
- }
- if (msgdata[0] == ">" && msgdata[2] == "EVNT")
- {
- msg.IsEvent = true;
- msg.EvNo = msgdata[3];
- msg.EvDate = msgdata[4];
- msg.EvData = msgdata[5];
- return msg;
- }
- if (_robot.IsEnableSeqNo)
- {
- msg.SeqNo = Convert.ToInt16(msgdata[2]);
- msg.Status = msgdata[3];
- if(msg.IsAck)
- msg.Ackcd = msgdata[4];
- msg.Command = msgdata[5];
- msg.Data = msgdata.Skip(6).Take(msgdata.Length -6 - (_robot.IsEnableCheckSum?1:0)).ToArray();
- }
- else
- {
- msg.Status = msgdata[2];
- if (msg.IsAck)
- msg.Ackcd = msgdata[3];
- msg.Command = msgdata[4];
- msg.Data = msgdata.Skip(5).Take(msgdata.Length - 5 - (_robot.IsEnableCheckSum ? 1 : 0)).ToArray();
- }
- if (msgdata[0] == "!")
- {
- SendAck();
- msg.IsComplete = true;
- if (_robot.IsEnableSeqNo)
- {
- msg.ErrorCode = msgdata[4];
- }
- else
- msg.ErrorCode = msgdata[3];
- if (msg.ErrorCode != "0000")
- {
- _robot.OnError($"Execution error,Error code is {msg.ErrorCode}");
- }
- }
- _robot.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);
- _robot.NotifyAlarmByErrorCode(errocode.ToUpper());
- if(Convert.ToInt32(errocode,16) > 0xF0)
- _robot.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 (_robot.IsEnableSeqNo)
- {
- _robot.CurrentSeqNo = _robot.SeqnoGenerator.create();
- _robot.SeqnoGenerator.release(_robot.CurrentSeqNo);
- }
- string commandstr = $",{_robot.UnitNumber}" + (_robot.IsEnableSeqNo? $",{_robot.CurrentSeqNo:D2}":"") + ",ACKN";
- if (_robot.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;
- }
- }
-
- }
|