ReadInputsService.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using NModbus.Data;
  2. using NModbus.Message;
  3. namespace NModbus.Device.MessageHandlers
  4. {
  5. public class ReadInputsService : ModbusFunctionServiceBase<ReadCoilsInputsRequest>
  6. {
  7. public ReadInputsService()
  8. : base(ModbusFunctionCodes.ReadInputs)
  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.CoilInputs.ReadPoints(request.StartAddress, request.NumberOfPoints);
  26. DiscreteCollection data = new DiscreteCollection(discretes);
  27. return new ReadCoilsInputsResponse(
  28. request.FunctionCode,
  29. request.SlaveAddress,
  30. data.ByteCount,
  31. data);
  32. }
  33. }
  34. }