OmronEJ1Connection.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System.Collections.Generic;
  2. using System.IO.Ports;
  3. using System.Linq;
  4. using Aitex.Core.RT.Log;
  5. using MECF.Framework.Common.Communications;
  6. namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.Temperatures.Omrons
  7. {
  8. public class OmronEJ1Message : BinaryMessage
  9. {
  10. public byte DeviceAddress { get; set; }
  11. public byte FunctionCode { get; set; }
  12. public byte Length { get; set; }
  13. public byte[] Data { get; set; }
  14. }
  15. public class OmronEJ1Connection : SerialPortConnectionBase
  16. {
  17. private List<byte> _lstCacheBuffer = new List<byte>();
  18. public OmronEJ1Connection(string portName, int baudRate = 9600, int dataBits = 8, Parity parity = Parity.None, StopBits stopBits = StopBits.One, string newline = "", bool isAsciiMode = false)
  19. : base(portName, baudRate, dataBits, parity, stopBits, newline, isAsciiMode)
  20. {
  21. }
  22. public override bool SendMessage(byte[] message)
  23. {
  24. _lstCacheBuffer.Clear();
  25. return base.SendMessage(message);
  26. }
  27. protected override MessageBase ParseResponse(byte[] rawMessage)
  28. {
  29. _lstCacheBuffer.AddRange(rawMessage);
  30. byte[] temps = _lstCacheBuffer.ToArray();
  31. OmronEJ1Message msg = new OmronEJ1Message();
  32. msg.IsResponse = false;
  33. msg.IsAck = false;
  34. msg.IsComplete = false;
  35. msg.RawMessage = _lstCacheBuffer.ToArray();
  36. if (temps.Length < 4) return msg;
  37. msg.DeviceAddress = temps[0];
  38. msg.FunctionCode = temps[1];
  39. if (msg.FunctionCode != 0x03)
  40. {
  41. msg.Data = _lstCacheBuffer.ToArray();
  42. }
  43. else
  44. {
  45. msg.Length = temps[2];
  46. if (temps.Length < msg.Length + 5)
  47. {
  48. //msg.IsFormatError = true;
  49. return msg;
  50. }
  51. msg.Data = _lstCacheBuffer.Skip(3).Take(msg.Length).ToArray();
  52. }
  53. msg.IsResponse = true;
  54. msg.IsAck = true;
  55. msg.IsComplete = true;
  56. return msg;
  57. }
  58. }
  59. }