WriteMultipleCoilsResponse.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using System.Net;
  3. namespace NModbus.Message
  4. {
  5. public class WriteMultipleCoilsResponse : AbstractModbusMessage, IModbusMessage
  6. {
  7. public WriteMultipleCoilsResponse()
  8. {
  9. }
  10. public WriteMultipleCoilsResponse(byte slaveAddress, ushort startAddress, ushort numberOfPoints)
  11. : base(slaveAddress, ModbusFunctionCodes.WriteMultipleCoils)
  12. {
  13. StartAddress = startAddress;
  14. NumberOfPoints = numberOfPoints;
  15. }
  16. public ushort NumberOfPoints
  17. {
  18. get => MessageImpl.NumberOfPoints.Value;
  19. set
  20. {
  21. if (value > Modbus.MaximumDiscreteRequestResponseSize)
  22. {
  23. string msg = $"Maximum amount of data {Modbus.MaximumDiscreteRequestResponseSize} coils.";
  24. throw new ArgumentOutOfRangeException("NumberOfPoints", msg);
  25. }
  26. MessageImpl.NumberOfPoints = value;
  27. }
  28. }
  29. public ushort StartAddress
  30. {
  31. get => MessageImpl.StartAddress.Value;
  32. set => MessageImpl.StartAddress = value;
  33. }
  34. public override int MinimumFrameSize => 6;
  35. public override string ToString()
  36. {
  37. string msg = $"Wrote {NumberOfPoints} coils starting at address {StartAddress}.";
  38. return msg;
  39. }
  40. protected override void InitializeUnique(byte[] frame)
  41. {
  42. StartAddress = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(frame, 2));
  43. NumberOfPoints = (ushort)IPAddress.NetworkToHostOrder(BitConverter.ToInt16(frame, 4));
  44. }
  45. }
  46. }