FfuAAFNewConnection.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using MECF.Framework.Common.Communications;
  7. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.FFUs.AAF
  8. {
  9. public class FfuAAFNewConnection : SerialPortConnectionBase
  10. {
  11. private List<byte> _lstCacheBuffer = new List<byte>();
  12. public FfuAAFNewConnection(string portName) : base(portName,9600,8, System.IO.Ports.Parity.None, System.IO.Ports.StopBits.One,"\r",false)
  13. {
  14. }
  15. public override bool SendMessage(byte[] message)
  16. {
  17. _lstCacheBuffer.Clear();
  18. return base.SendMessage(message);
  19. }
  20. protected override MessageBase ParseResponse(byte[] rawMessage)
  21. {
  22. _lstCacheBuffer.AddRange(rawMessage);
  23. byte[] temps = _lstCacheBuffer.ToArray();
  24. FfuAAFMessage msg = new FfuAAFMessage();
  25. msg.IsResponse = false;
  26. msg.IsAck = false;
  27. msg.IsComplete = false;
  28. msg.RawMessage = _lstCacheBuffer.ToArray();
  29. if (temps.Length < 4) return msg;
  30. if (temps.LastOrDefault() != ModRTU_CRC(temps.Take(temps.Length - 1).ToArray()))
  31. return msg;
  32. msg.Preamble = temps[0];
  33. msg.Command = temps[1];
  34. msg.GroupAddress = temps[2];
  35. if (temps.Length > 4) msg.Data1 = temps[3];
  36. if (temps.Length > 5) msg.Data2 = temps[4];
  37. msg.IsResponse = true;
  38. msg.IsAck = true;
  39. msg.IsComplete = true;
  40. return msg;
  41. }
  42. private static byte ModRTU_CRC(byte[] buffer)
  43. {
  44. //ushort crc = 0xFFFF;
  45. // var buf = System.Text.Encoding.UTF8.GetBytes(String.Join(Environment.NewLine, buffer));
  46. var buf = buffer;
  47. var len = buffer.Length;
  48. byte temp = buffer[0];
  49. for (int i = 1; i < buffer.Length; i++)
  50. {
  51. temp = (byte)(temp ^ buffer[i]);
  52. }
  53. return (byte)~temp;
  54. }
  55. }
  56. }