WriteSingleCoilService.cs 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using NModbus.Message;
  2. namespace NModbus.Device.MessageHandlers
  3. {
  4. public class WriteSingleCoilService : ModbusFunctionServiceBase<WriteSingleCoilRequestResponse>
  5. {
  6. public WriteSingleCoilService()
  7. : base(ModbusFunctionCodes.WriteSingleCoil)
  8. {
  9. }
  10. public override IModbusMessage CreateRequest(byte[] frame)
  11. {
  12. return CreateModbusMessage<WriteSingleCoilRequestResponse>(frame);
  13. }
  14. public override int GetRtuRequestBytesToRead(byte[] frameStart)
  15. {
  16. return 1;
  17. }
  18. public override int GetRtuResponseBytesToRead(byte[] frameStart)
  19. {
  20. return 4;
  21. }
  22. protected override IModbusMessage Handle(WriteSingleCoilRequestResponse request, ISlaveDataStore dataStore)
  23. {
  24. bool[] values = new bool[]
  25. {
  26. request.Data[0] == Modbus.CoilOn
  27. };
  28. dataStore.CoilDiscretes.WritePoints(request.StartAddress, values);
  29. return request;
  30. }
  31. }
  32. }