ReadCoilsService.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using NModbus.Data;
  2. using NModbus.Message;
  3. namespace NModbus.Device.MessageHandlers
  4. {
  5. public class ReadCoilsService : ModbusFunctionServiceBase<ReadCoilsInputsRequest>
  6. {
  7. public ReadCoilsService()
  8. : base(ModbusFunctionCodes.ReadCoils)
  9. {
  10. }
  11. public override IModbusMessage CreateRequest(byte[] frame)
  12. {
  13. return CreateModbusMessage<ReadCoilsInputsRequest>(frame);
  14. }
  15. public override int GetRtuRequestBytesToRead(byte[] frameStart)
  16. {
  17. return 1;
  18. }
  19. public override int GetRtuResponseBytesToRead(byte[] frameStart)
  20. {
  21. return frameStart[2] + 1;
  22. }
  23. protected override IModbusMessage Handle(ReadCoilsInputsRequest request, ISlaveDataStore dataStore)
  24. {
  25. bool[] discretes = dataStore.CoilDiscretes.ReadPoints(request.StartAddress, request.NumberOfPoints);
  26. DiscreteCollection data = new DiscreteCollection(discretes);
  27. return new ReadCoilsInputsResponse(
  28. request.FunctionCode,
  29. request.SlaveAddress,
  30. data.ByteCount, data);
  31. }
  32. }
  33. }