DiagnosticsRequestResponse.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System;
  2. using System.Diagnostics;
  3. using System.Diagnostics.CodeAnalysis;
  4. using System.Linq;
  5. using System.Net;
  6. using NModbus.Data;
  7. using NModbus.Unme.Common;
  8. namespace NModbus.Message
  9. {
  10. internal class DiagnosticsRequestResponse : AbstractModbusMessageWithData<RegisterCollection>, IModbusMessage
  11. {
  12. public DiagnosticsRequestResponse()
  13. {
  14. }
  15. public DiagnosticsRequestResponse(ushort subFunctionCode, byte slaveAddress, RegisterCollection data)
  16. : base(slaveAddress, ModbusFunctionCodes.Diagnostics)
  17. {
  18. SubFunctionCode = subFunctionCode;
  19. Data = data;
  20. }
  21. public override int MinimumFrameSize => 6;
  22. [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Justification = "May implement addtional sub function codes in the future.")]
  23. public ushort SubFunctionCode
  24. {
  25. get => MessageImpl.SubFunctionCode.Value;
  26. set => MessageImpl.SubFunctionCode = value;
  27. }
  28. public override string ToString()
  29. {
  30. Debug.Assert(
  31. SubFunctionCode == ModbusFunctionCodes.DiagnosticsReturnQueryData,
  32. "Need to add support for additional sub-function.");
  33. return $"Diagnostics message, sub-function return query data - {Data}.";
  34. }
  35. protected override void InitializeUnique(byte[] frame)
  36. {
  37. SubFunctionCode = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(frame, 2));
  38. Data = new RegisterCollection(frame.Slice(4, 2).ToArray());
  39. }
  40. }
  41. }