ModbusSerialMaster.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System.Diagnostics.CodeAnalysis;
  2. using NModbus.Data;
  3. using NModbus.Message;
  4. namespace NModbus.Device
  5. {
  6. /// <summary>
  7. /// Modbus serial master device.
  8. /// </summary>
  9. public class ModbusSerialMaster : ModbusMaster, IModbusSerialMaster
  10. {
  11. public ModbusSerialMaster(IModbusSerialTransport transport)
  12. : base(transport)
  13. {
  14. }
  15. /// <summary>
  16. /// Gets the Modbus Transport.
  17. /// </summary>
  18. [SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
  19. IModbusSerialTransport IModbusSerialMaster.Transport => (IModbusSerialTransport)Transport;
  20. /// <summary>
  21. /// Serial Line only.
  22. /// Diagnostic function which loops back the original data.
  23. /// NModbus only supports looping back one ushort value, this is a limitation of the "Best Effort" implementation of
  24. /// the RTU protocol.
  25. /// </summary>
  26. /// <param name="slaveAddress">Address of device to test.</param>
  27. /// <param name="data">Data to return.</param>
  28. /// <returns>Return true if slave device echoed data.</returns>
  29. public bool ReturnQueryData(byte slaveAddress, ushort data)
  30. {
  31. DiagnosticsRequestResponse request = new DiagnosticsRequestResponse(
  32. ModbusFunctionCodes.DiagnosticsReturnQueryData,
  33. slaveAddress,
  34. new RegisterCollection(data));
  35. DiagnosticsRequestResponse response = Transport.UnicastMessage<DiagnosticsRequestResponse>(request);
  36. return response.Data[0] == data;
  37. }
  38. }
  39. }