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