RejeSMIFConnection.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using Aitex.Core.RT.Log;
  2. using MECF.Framework.Common.Communications;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO.Ports;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Text.RegularExpressions;
  9. using System.Threading.Tasks;
  10. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.SMIFs.Reje
  11. {
  12. public class RejeSMIFMessage : AsciiMessage
  13. {
  14. public string CommandType { get; set; }
  15. public string Command { get; set; }
  16. public string Data { get; set; }
  17. public string Error { get; set; }
  18. }
  19. public class RejeSMIFConnection : SerialPortConnectionBase
  20. {
  21. private RejeSMIF _device;
  22. public RejeSMIFConnection(RejeSMIF device, string port) : base(port, 9600, 8, Parity.None, StopBits.One, "\r", true)
  23. {
  24. _device = device;
  25. }
  26. protected override MessageBase ParseResponse(string rawText)
  27. {
  28. RejeSMIFMessage msg = new RejeSMIFMessage();
  29. msg.RawMessage = rawText;
  30. msg.IsAck = false;
  31. msg.IsResponse = false;
  32. msg.IsComplete = false;
  33. msg.IsNak = false;
  34. msg.IsError = false;
  35. msg.CommandType = msg.RawMessage.Split(':')[0].Replace("s00", "");
  36. msg.Command = Regex.Match(msg.RawMessage, "(?<=:).*?(?=;)").Value;
  37. if (rawText.Contains('/'))
  38. {
  39. msg.Data = rawText.Split('/')[1].Replace(";", "").Replace("\r", "");
  40. }
  41. if (msg.CommandType.Contains("ACK"))
  42. {
  43. msg.IsAck = true;
  44. }
  45. if (msg.CommandType.Contains("NAK"))
  46. {
  47. _device.OnNak(rawText);
  48. msg.IsNak = true;
  49. }
  50. if (msg.CommandType.Contains("INF"))
  51. {
  52. msg.IsEvent = true;
  53. }
  54. if (msg.CommandType.Contains("ABS"))
  55. {
  56. _device.OnAbs(rawText);
  57. msg.IsError = true;
  58. }
  59. LOG.Write($"{Address} received message:{rawText}");
  60. return msg;
  61. }
  62. protected override void OnEventArrived(MessageBase msg)
  63. {
  64. RejeSMIFMessage message = msg as RejeSMIFMessage;
  65. _device.OnEventArrived(message.Command);
  66. }
  67. }
  68. }