using System; using System.Diagnostics; using System.Linq; using System.Net; using Aitex.Core.RT.Event; using Aitex.Core.RT.Log; using athosRT.tool; using MECF.Framework.Common.Communications; using EV = Aitex.Core.RT.Event.EV; using TCPPortConnectionBase = athosRT.tool.Comm.TCPPortConnectionBase; namespace athosRT.Modules.Robot { public class RorzeRobot751Connection : TCPPortConnectionBase { private RorzeRobot751 _robot; private string _address; public RorzeRobot751Connection(RorzeRobot751 robot, string ipaddress) : base(ipaddress) { _address = ipaddress; _robot = robot; } protected override MessageBase ParseResponse(string rawMessage) { LogObject.Info("Robot", $"Communication {_address} Receive {rawMessage.Replace("\r", "")}"); RorzeRobot751Message rorzeRobot751Message = new RorzeRobot751Message(); try { rorzeRobot751Message.RawMessage = rawMessage.Replace("\r", ""); rorzeRobot751Message.IsAck = false; rorzeRobot751Message.IsComplete = false; rorzeRobot751Message.IsFormatError = false; rorzeRobot751Message.IsEvent = false; switch (rawMessage[0]) { case 'a': rorzeRobot751Message.IsAck = true; rorzeRobot751Message.IsComplete = false; rorzeRobot751Message.Data = rawMessage.Split(';').LastOrDefault().Split('/'); break; case 'n': rorzeRobot751Message.IsNak = true; rorzeRobot751Message.IsComplete = false; break; case 'c': rorzeRobot751Message.IsError = true; rorzeRobot751Message.IsComplete = false; break; case 'e': rorzeRobot751Message.IsEvent = true; rorzeRobot751Message.IsComplete = false; _robot.OnEventReceived(rawMessage); break; } return rorzeRobot751Message; } catch (Exception ex) { LOG.Write(ex, 2, "D:\\sorter\\trunk\\Efem\\Jet\\Jet_001_2P_Jet\\EfemRT\\Devices\\Rorze751\\RorzeRobot751Connection.cs", "ParseResponse", 76); rorzeRobot751Message.IsFormatError = true; return rorzeRobot751Message; } } protected override void OnEventArrived(MessageBase msg) { RorzeRobot751Message rorzeRobot751Message = msg as RorzeRobot751Message; if (rorzeRobot751Message.EvNo == "100") { string text = rorzeRobot751Message.EvData.Substring(1, rorzeRobot751Message.EvData.Length - 1); _robot.NotifyAlarmByErrorCode(text.ToUpper()); if (Convert.ToInt32(text, 16) > 240) { _robot.OnError("Robot occurred error:" + rorzeRobot751Message.EvData + " on " + rorzeRobot751Message.EvDate + "."); } else { EV.PostWarningLog("Robot", "Robot occurred error:" + rorzeRobot751Message.EvData + " on " + rorzeRobot751Message.EvDate + "."); } } if (!(rorzeRobot751Message.EvNo == "140")) { } } protected override void ActiveHandlerProceedMessage(MessageBase msg) { //Trace.WriteLine("ActiveHandlerProceedMessage override"); lock (_lockerActiveHandler) { //if (_activeHandler != null && (msg.IsFormatError || (_activeHandler.HandleMessage(msg, out var transactionComplete) && transactionComplete))) if (_activeHandler != null && (_activeHandler.HandleMessage(msg, out var transactionComplete) && transactionComplete)) { _activeHandler = null; } } } } }