Example #1
0
        public static IModbusMaster CreateIpMaster(this IModbusFactory factory, IpSettings ipSettings)
        {
            switch (ipSettings.ModbusType)
            {
            case ModbusType.Tcp:
                return(factory.CreateMaster(
                           new TcpClient(ipSettings.Hostname, ipSettings.Port)));

            case ModbusType.Udp:
                return(factory.CreateMaster(
                           new UdpClient(ipSettings.Hostname, ipSettings.Port)));

            case ModbusType.RtuOverTcp:
                return(factory.CreateRtuMaster(
                           new TcpClientAdapter(
                               new TcpClient(ipSettings.Hostname, ipSettings.Port))));

            case ModbusType.RtuOverUdp:
                return(factory.CreateRtuMaster(
                           new UdpClientAdapter(
                               new UdpClient(ipSettings.Hostname, ipSettings.Port))));

            default:
                throw new ArgumentException(
                          "Ip settings must be of type Tcp, Udp, RtuOverTcp, or RtuOverUdp.");
            }
        }
Example #2
0
        /// <summary>
        /// Gets modbus master object from cache or create new one.
        /// </summary>
        /// <param name="factory"></param>
        /// <param name="frameType"></param>
        /// <param name="connectionSource"></param>
        /// <returns></returns>
        public IModbusMaster Get(IModbusFactory factory, FrameType frameType, ConnectionSourceAbstract connectionSource)
        {
            if (factory == default)
            {
                throw new ArgumentException("argument 'factory' is mandatory");
            }

            if (connectionSource == default)
            {
                throw new ArgumentException("argument 'connectionSource' is mandatory");
            }


            if ((connectionSource == _connectionSource) &&
                (_connectionSource.IsOpen) &&
                (modbusMaster != default) &&
                (modbusMaster?.Transport?.StreamResource?.IsOpen ?? false))
            {
                return(modbusMaster);
            }

            _connectionSource = connectionSource;

            var streamResource = _connectionSource.Get();

            if (frameType == FrameType.Ip)
            {
                modbusMaster = factory.CreateIpMaster(streamResource);
            }

            if (frameType == FrameType.Rtu)
            {
                var t = factory.CreateRtuTransport(streamResource);
                modbusMaster = factory.CreateMaster(t);
            }

            if (frameType == FrameType.Ascii)
            {
                var t = factory.CreateAsciiTransport(streamResource);
                modbusMaster = factory.CreateMaster(t);
            }

            return(modbusMaster);
        }
Example #3
0
        public IModbusMaster CreateMaster()
        {
            IModbusRtuTransport transport = CreateTransport();

            return(ModbusFactory.CreateMaster(transport));
        }