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; } } }