WriteMultipleCoilsService.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System.Linq;
  2. using NModbus.Message;
  3. namespace NModbus.Device.MessageHandlers
  4. {
  5. public class WriteMultipleCoilsService : ModbusFunctionServiceBase<WriteMultipleCoilsRequest>
  6. {
  7. public WriteMultipleCoilsService()
  8. : base(ModbusFunctionCodes.WriteMultipleCoils)
  9. {
  10. }
  11. public override IModbusMessage CreateRequest(byte[] frame)
  12. {
  13. return CreateModbusMessage<WriteMultipleCoilsRequest>(frame);
  14. }
  15. public override int GetRtuRequestBytesToRead(byte[] frameStart)
  16. {
  17. return frameStart[6] + 2;
  18. }
  19. public override int GetRtuResponseBytesToRead(byte[] frameStart)
  20. {
  21. return 4;
  22. }
  23. protected override IModbusMessage Handle(WriteMultipleCoilsRequest request, ISlaveDataStore dataStore)
  24. {
  25. bool[] points = request.Data
  26. .Take(request.NumberOfPoints)
  27. .ToArray();
  28. dataStore.CoilDiscretes.WritePoints(request.StartAddress, points);
  29. return new WriteMultipleCoilsResponse(
  30. request.SlaveAddress,
  31. request.StartAddress,
  32. request.NumberOfPoints);
  33. }
  34. }
  35. }