AbstractModbusMessage.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System;
  2. namespace NModbus.Message
  3. {
  4. /// <summary>
  5. /// Abstract Modbus message.
  6. /// </summary>
  7. public abstract class AbstractModbusMessage
  8. {
  9. private readonly ModbusMessageImpl _messageImpl;
  10. /// <summary>
  11. /// Abstract Modbus message.
  12. /// </summary>
  13. internal AbstractModbusMessage()
  14. {
  15. _messageImpl = new ModbusMessageImpl();
  16. }
  17. /// <summary>
  18. /// Abstract Modbus message.
  19. /// </summary>
  20. internal AbstractModbusMessage(byte slaveAddress, byte functionCode)
  21. {
  22. _messageImpl = new ModbusMessageImpl(slaveAddress, functionCode);
  23. }
  24. public ushort TransactionId
  25. {
  26. get => _messageImpl.TransactionId;
  27. set => _messageImpl.TransactionId = value;
  28. }
  29. public byte FunctionCode
  30. {
  31. get => _messageImpl.FunctionCode;
  32. set => _messageImpl.FunctionCode = value;
  33. }
  34. public byte SlaveAddress
  35. {
  36. get => _messageImpl.SlaveAddress;
  37. set => _messageImpl.SlaveAddress = value;
  38. }
  39. public byte[] MessageFrame => _messageImpl.MessageFrame;
  40. public virtual byte[] ProtocolDataUnit => _messageImpl.ProtocolDataUnit;
  41. public abstract int MinimumFrameSize { get; }
  42. internal ModbusMessageImpl MessageImpl => _messageImpl;
  43. public void Initialize(byte[] frame)
  44. {
  45. if (frame.Length < MinimumFrameSize)
  46. {
  47. string msg = $"Message frame must contain at least {MinimumFrameSize} bytes of data.";
  48. throw new FormatException(msg);
  49. }
  50. _messageImpl.Initialize(frame);
  51. InitializeUnique(frame);
  52. }
  53. protected abstract void InitializeUnique(byte[] frame);
  54. }
  55. }