TruPlasmaRF1000Connection.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO.Ports;
  4. using System.Linq;
  5. using System.Text;
  6. using Aitex.Core.RT.Log;
  7. using MECF.Framework.Common.Communications;
  8. using MECF.Framework.Common.Utilities;
  9. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.RFs.TruPlasmaRF
  10. {
  11. public class TruPlasmaRF1000Message : BinaryMessage
  12. {
  13. public string Command { get; set; }
  14. public string ErrorCode { get; set; }
  15. public byte[] Data { get; set; }
  16. }
  17. public class TruPlasmaRF1000Connection : TCPPortConnectionBase
  18. {
  19. //private static byte _GS = 0x00;
  20. private List<byte> _msgBuffer = new List<byte>();
  21. public TruPlasmaRF1000Connection(string address)
  22. : base(address, "", false)
  23. {
  24. }
  25. public override bool SendMessage(byte[] message)
  26. {
  27. return base.SendMessage(message);
  28. }
  29. protected override MessageBase ParseResponse(byte[] rawMessage)
  30. {
  31. if(rawMessage == null || rawMessage.Length == 0)
  32. {
  33. return null;
  34. }
  35. _msgBuffer.AddRange(rawMessage);
  36. var length = _msgBuffer[0];
  37. TruPlasmaRF1000Message msg = new TruPlasmaRF1000Message();
  38. if(_msgBuffer.Count != length + 1)
  39. return msg;
  40. msg.RawMessage = _msgBuffer.ToArray();
  41. _msgBuffer.Clear();
  42. if (msg.RawMessage.Length < 7)
  43. {
  44. msg.IsFormatError = true;
  45. LOG.Error($"invalid response");
  46. return msg;
  47. }
  48. //if ((msg.RawMessage[1] & 0b_1000_0000) > 0 || (msg.RawMessage[1] & 0b_0100_0000) > 0)
  49. //{
  50. // msg.IsError = true;
  51. // msg.ErrorCode = $"Alarms or error messages are pending";
  52. // LOG.Error($"Alarms or error messages are pending");
  53. // return msg;
  54. //}
  55. if ((msg.RawMessage[1] & 0x08) == 0)
  56. {
  57. msg.IsFormatError = true;
  58. LOG.Error($"interface is not active");
  59. return msg;
  60. }
  61. if (msg.RawMessage[2] == 0xFE)
  62. {
  63. msg.IsFormatError = true;
  64. LOG.Error($"telegram error");
  65. return msg;
  66. }
  67. if (msg.RawMessage[6] != 0xFF && msg.RawMessage[6] != 0x00)
  68. {
  69. msg.IsError = true;
  70. msg.ErrorCode = msg.RawMessage[6].ToString("X2");
  71. }
  72. var msgArray = msg.RawMessage.Select(bt => bt.ToString("X2")).ToArray();
  73. string msgCommand = string.Join(",", msgArray, 2, 4);
  74. msg.Command = msgCommand;
  75. if(msg.RawMessage.Length > 7 && msg.RawMessage[6] == 0x00)
  76. msg.Data = msg.RawMessage.Skip(8).Take(msg.RawMessage.Length - 8).ToArray();
  77. msg.IsResponse = true;
  78. msg.IsAck = true;
  79. msg.IsComplete = true;
  80. return msg;
  81. }
  82. }
  83. }