TxLowFrequencyRFConnection.cs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System.Collections.Generic;
  2. using System.IO.Ports;
  3. using Aitex.Core.RT.Log;
  4. using MECF.Framework.Common.Communications;
  5. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.RFs.AdTecTxLow
  6. {
  7. public class LowFrequencyRFMessage : BinaryMessage
  8. {
  9. public byte Header { get; set; }
  10. public byte Command { get; set; }
  11. public byte FunctionCode { get; set; }
  12. public byte ExecutionCode { get; set; }
  13. public byte[] Parameter { get; set; }
  14. public byte CommandNumber { get; set; }
  15. public byte[] Data { get; set; }
  16. public byte CheckSum { get; set; }
  17. public int Address { get; set; }
  18. public int DataLength { get; set; }
  19. public int MessageLength { get; set; }
  20. }
  21. public class LowFrequencyRFConnection : SerialPortConnectionBase
  22. {
  23. private List<byte> _lstCacheBuffer = new List<byte>();
  24. public LowFrequencyRFConnection(string portName, int baudRate = 9600, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One)
  25. : base(portName, baudRate, dataBits, parity, stopBits, "\r", false)
  26. {
  27. }
  28. public override bool SendMessage(byte[] message)
  29. {
  30. _lstCacheBuffer.Clear();
  31. return base.SendMessage(message);
  32. }
  33. protected override MessageBase ParseResponse(byte[] rawBuffer)
  34. {
  35. _lstCacheBuffer.AddRange(rawBuffer);
  36. LowFrequencyRFMessage msg = new LowFrequencyRFMessage();
  37. msg.RawMessage = rawBuffer;
  38. //if (_lstCacheBuffer.Count >= 1 && _lstCacheBuffer[0] == 0x06)
  39. //{
  40. // msg.IsAck = true;
  41. // _lstCacheBuffer.RemoveAt(0);
  42. //}
  43. //if (_lstCacheBuffer.Count < 4)
  44. //{
  45. // return msg;
  46. //}
  47. if (!( _lstCacheBuffer.Count > 2 && _lstCacheBuffer[0] == 0x40 && _lstCacheBuffer[1] == 0x55))
  48. {
  49. return msg;
  50. }
  51. if (_lstCacheBuffer[_lstCacheBuffer.Count - 1] != 0x0D)
  52. {
  53. return msg;
  54. }
  55. msg.Header = _lstCacheBuffer[0];
  56. msg.Command = _lstCacheBuffer[1];
  57. msg.FunctionCode = _lstCacheBuffer[2];
  58. msg.ExecutionCode = _lstCacheBuffer[3];
  59. msg.DataLength = _lstCacheBuffer.Count;
  60. msg.MessageLength = _lstCacheBuffer.Count;
  61. msg.Parameter = _lstCacheBuffer.GetRange(4, _lstCacheBuffer.Count -5).ToArray();
  62. msg.Data = _lstCacheBuffer.ToArray();
  63. msg.IsResponse = true;
  64. _lstCacheBuffer.RemoveRange(0, msg.MessageLength);
  65. return msg;
  66. }
  67. }
  68. }