12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- using Aitex.Core.RT.Log;
- using MECF.Framework.Common.Communications;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- using System.Threading.Tasks;
- namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Robot.HineAutomation
- {
- public class HAtmMessage : AsciiMessage
- {
- public string DeviceAddress { get; set; }
- public string Action { get; set; }
- public string Parameter { get; set; }
- public int DataLength { get; set; }
- public string Data { get; set; }
- public string ErrorText { get; set; }
- public string ResponseRecordType { get; set; }
- public string Category { get; set; }
- }
- public class HAtmConnection : ConnectionBase
- {
- private const string ResponseRecordType = "X";
- public HAtmConnection(string addr) : base(addr)
- {
- }
- public void EnableLog(bool enable)
- {
- _socket.EnableLog = enable;
- }
- protected override void OnDataReceived(string oneLineMessage)
- {
- MessageBase msg = ParseResponse(oneLineMessage);
- if (msg.IsFormatError)
- {
- SetCommunicationError(true, "received invalid response message.");
- }
- lock (_lockerActiveHandler)
- {
- if (_activeHandler != null)
- {
- if (msg.IsFormatError || (((HAtmHandler)_activeHandler).HasResponse && (_activeHandler.HandleMessage(msg, out bool completed) && completed)))
- {
- _activeHandler = null;
- }
- }
- }
- }
- protected override MessageBase ParseResponse(string rawText)
- {
- HAtmMessage msg = new HAtmMessage();
- msg.IsResponse = false;
- msg.IsAck = false;
- msg.IsComplete = false;
- msg.RawMessage = rawText;
- rawText = rawText.Replace("\r", "").Replace("\n", "");
- string[] words = Regex.Split(rawText, ",");
- if (words.Length < 2 || words[0] != ResponseRecordType)
- {
- msg.IsFormatError = true;
- LOG.Error($"Record type check failed, " + rawText);
- return msg;
- }
- msg.ResponseRecordType = words[0];
- msg.Category = words[1];
- if(words.Length > 2)
- {
- msg.Data = words[2];
- msg.MessagePart = new string[words.Length - 2];
- for (int i = 0; i < msg.MessagePart.Length; i++)
- {
- msg.MessagePart[i] = words[2 + i];
- }
- }
- msg.IsResponse = true;
- msg.IsAck = true;
- msg.IsComplete = true;
- return msg;
- }
- }
- }
|