WriteFileRecordResponse.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using NModbus.Data;
  2. using NModbus.Unme.Common;
  3. using System;
  4. using System.Linq;
  5. using System.Net;
  6. namespace NModbus.Message
  7. {
  8. class WriteFileRecordResponse : AbstractModbusMessageWithData<FileRecordCollection>, IModbusMessage
  9. {
  10. public WriteFileRecordResponse()
  11. {
  12. }
  13. public WriteFileRecordResponse(byte slaveAddress)
  14. : base(slaveAddress, ModbusFunctionCodes.WriteFileRecord)
  15. {
  16. }
  17. public WriteFileRecordResponse(byte slaveAddress, FileRecordCollection data)
  18. : base(slaveAddress, ModbusFunctionCodes.WriteFileRecord)
  19. {
  20. Data = data;
  21. }
  22. public override int MinimumFrameSize => 10;
  23. public byte ByteCount
  24. {
  25. get => MessageImpl.ByteCount.Value;
  26. set => MessageImpl.ByteCount = value;
  27. }
  28. protected override void InitializeUnique(byte[] frame)
  29. {
  30. if (frame.Length < frame[2])
  31. {
  32. throw new FormatException("Message frame does not contain enough bytes.");
  33. }
  34. ByteCount = frame[2];
  35. Data = new FileRecordCollection(frame);
  36. }
  37. public override string ToString()
  38. {
  39. string msg = $"Wrote {Data.DataBytes.Count} bytes for file {Data.FileNumber} starting at address {Data.StartingAddress}.";
  40. return msg;
  41. }
  42. }
  43. }