namespace ZB.MOM.WW.OtOpcUa.Driver.Modbus; /// /// Single mapping point from to the concrete /// its selects. /// Consumed by both 's default transport-factory closure and the /// AdminUI Test-Connect probe, so the switch lives in /// exactly one place. /// public static class ModbusTransportFactory { /// /// Builds the transport . /// selects, threading every shared connection setting (Host/Port/Timeout/AutoReconnect/ /// KeepAlive/IdleDisconnectTimeout/Reconnect) through to whichever concrete transport is built. /// /// Driver configuration options. /// A when /// is selected; a when is selected. /// /// . is not a recognized /// member — fail loudly rather than silently falling back to TCP/MBAP. /// public static IModbusTransport Create(ModbusDriverOptions options) { ArgumentNullException.ThrowIfNull(options); return options.Transport switch { ModbusTransportMode.RtuOverTcp => new ModbusRtuOverTcpTransport( options.Host, options.Port, options.Timeout, options.AutoReconnect, keepAlive: options.KeepAlive, idleDisconnect: options.IdleDisconnectTimeout, reconnect: options.Reconnect), ModbusTransportMode.Tcp => new ModbusTcpTransport( options.Host, options.Port, options.Timeout, options.AutoReconnect, keepAlive: options.KeepAlive, idleDisconnect: options.IdleDisconnectTimeout, reconnect: options.Reconnect), _ => throw new ArgumentOutOfRangeException( nameof(options), options.Transport, "Unknown Modbus transport mode."), }; } }