using System.Diagnostics.CodeAnalysis;
using NModbus.Data;
using NModbus.Message;
namespace NModbus.Device
{
///
/// Modbus serial master device.
///
public class ModbusSerialMaster : ModbusMaster, IModbusSerialMaster
{
public ModbusSerialMaster(IModbusSerialTransport transport)
: base(transport)
{
}
///
/// Gets the Modbus Transport.
///
[SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
IModbusSerialTransport IModbusSerialMaster.Transport => (IModbusSerialTransport)Transport;
///
/// Serial Line only.
/// Diagnostic function which loops back the original data.
/// NModbus only supports looping back one ushort value, this is a limitation of the "Best Effort" implementation of
/// the RTU protocol.
///
/// Address of device to test.
/// Data to return.
/// Return true if slave device echoed data.
public bool ReturnQueryData(byte slaveAddress, ushort data)
{
DiagnosticsRequestResponse request = new DiagnosticsRequestResponse(
ModbusFunctionCodes.DiagnosticsReturnQueryData,
slaveAddress,
new RegisterCollection(data));
DiagnosticsRequestResponse response = Transport.UnicastMessage(request);
return response.Data[0] == data;
}
}
}