1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- using System.Diagnostics.CodeAnalysis;
- using NModbus.Data;
- using NModbus.Message;
- namespace NModbus.Device
- {
- /// <summary>
- /// Modbus serial master device.
- /// </summary>
- public class ModbusSerialMaster : ModbusMaster, IModbusSerialMaster
- {
- public ModbusSerialMaster(IModbusSerialTransport transport)
- : base(transport)
- {
- }
- /// <summary>
- /// Gets the Modbus Transport.
- /// </summary>
- [SuppressMessage("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
- IModbusSerialTransport IModbusSerialMaster.Transport => (IModbusSerialTransport)Transport;
- /// <summary>
- /// 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.
- /// </summary>
- /// <param name="slaveAddress">Address of device to test.</param>
- /// <param name="data">Data to return.</param>
- /// <returns>Return true if slave device echoed data.</returns>
- public bool ReturnQueryData(byte slaveAddress, ushort data)
- {
- DiagnosticsRequestResponse request = new DiagnosticsRequestResponse(
- ModbusFunctionCodes.DiagnosticsReturnQueryData,
- slaveAddress,
- new RegisterCollection(data));
- DiagnosticsRequestResponse response = Transport.UnicastMessage<DiagnosticsRequestResponse>(request);
- return response.Data[0] == data;
- }
- }
- }
|