using System;
using System.IO.Ports;
using AMWD.Protocols.Modbus.Common.Contracts;
using AMWD.Protocols.Modbus.Common.Protocols;
namespace AMWD.Protocols.Modbus.Serial
{
///
/// Default implementation of a Modbus serial line client.
///
public class ModbusSerialClient : ModbusClientBase
{
///
/// Initializes a new instance of the class with a port name.
///
/// The name of the serial port to use.
public ModbusSerialClient(string portName)
: this(new ModbusSerialConnection { PortName = portName })
{ }
///
/// Initializes a new instance of the class with a specific .
///
/// The responsible for invoking the requests.
public ModbusSerialClient(IModbusConnection connection)
: this(connection, true)
{ }
///
/// Initializes a new instance of the class with a specific .
///
/// The responsible for invoking the requests.
///
/// if the connection should be disposed of by Dispose(),
/// otherwise if you inted to reuse the connection.
///
public ModbusSerialClient(IModbusConnection connection, bool disposeConnection)
: base(connection, disposeConnection)
{
Protocol = new RtuProtocol();
}
///
public static string[] AvailablePortNames => SerialPort.GetPortNames();
///
public override IModbusProtocol Protocol { get; set; }
///
public TimeSpan IdleTimeout
{
get => connection.IdleTimeout;
set => connection.IdleTimeout = value;
}
///
public TimeSpan ConnectTimeout
{
get => connection.ConnectTimeout;
set => connection.ConnectTimeout = value;
}
///
public TimeSpan ReadTimeout
{
get => connection.ReadTimeout;
set => connection.ReadTimeout = value;
}
///
public TimeSpan WriteTimeout
{
get => connection.WriteTimeout;
set => connection.WriteTimeout = value;
}
///
public bool DriverEnabledRS485
{
get
{
if (connection is ModbusSerialConnection serialConnection)
return serialConnection.DriverEnabledRS485;
return default;
}
set
{
if (connection is ModbusSerialConnection serialConnection)
serialConnection.DriverEnabledRS485 = value;
}
}
///
public TimeSpan InterRequestDelay
{
get
{
if (connection is ModbusSerialConnection serialConnection)
return serialConnection.InterRequestDelay;
return default;
}
set
{
if (connection is ModbusSerialConnection serialConnection)
serialConnection.InterRequestDelay = value;
}
}
///
public string PortName
{
get
{
if (connection is ModbusSerialConnection serialConnection)
return serialConnection.PortName;
return default;
}
set
{
if (connection is ModbusSerialConnection serialConnection)
serialConnection.PortName = value;
}
}
///
public BaudRate BaudRate
{
get
{
if (connection is ModbusSerialConnection serialConnection)
return serialConnection.BaudRate;
return default;
}
set
{
if (connection is ModbusSerialConnection serialConnection)
serialConnection.BaudRate = value;
}
}
///
public int DataBits
{
get
{
if (connection is ModbusSerialConnection serialConnection)
return serialConnection.DataBits;
return default;
}
set
{
if (connection is ModbusSerialConnection serialConnection)
serialConnection.DataBits = value;
}
}
///
public Handshake Handshake
{
get
{
if (connection is ModbusSerialConnection serialConnection)
return serialConnection.Handshake;
return default;
}
set
{
if (connection is ModbusSerialConnection serialConnection)
serialConnection.Handshake = value;
}
}
///
public Parity Parity
{
get
{
if (connection is ModbusSerialConnection serialConnection)
return serialConnection.Parity;
return default;
}
set
{
if (connection is ModbusSerialConnection serialConnection)
serialConnection.Parity = value;
}
}
///
public bool RtsEnable
{
get
{
if (connection is ModbusSerialConnection serialConnection)
return serialConnection.RtsEnable;
return default;
}
set
{
if (connection is ModbusSerialConnection serialConnection)
serialConnection.RtsEnable = value;
}
}
///
public StopBits StopBits
{
get
{
if (connection is ModbusSerialConnection serialConnection)
return serialConnection.StopBits;
return default;
}
set
{
if (connection is ModbusSerialConnection serialConnection)
serialConnection.StopBits = value;
}
}
}
}