private void CreateIpModbusMaster(IpSettings ipSettings) { var master = _modbusFactory.CreateIpMaster(ipSettings); string masterId = ipSettings.Hostname; AddMaster(masterId, master); _ea.GetEvent <NewModbusMasterEvent>().Publish(masterId); }
/// <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); }