public Device(ResursAPI.DriverType driverType, Device parent = null) : this() { Name = driverType.ToDescription(); Driver = ResursAPI.DriversConfiguration.GetDriver(driverType); DriverUID = Driver.UID; TariffType = Driver.DefaultTariffType; foreach (var item in Driver.DriverParameters) { var parameter = new Parameter { Device = this }; parameter.Initialize(item); Parameters.Add(parameter); } SetParent(parent); }
/// <summary> /// Создаёт сеть на основе типа и добавляет в коллекцию /// </summary> /// <param name="network">Объект сети из БД</param> public void AddNetwork(ResursAPI.Device network) { switch (network.DeviceType) { case ResursAPI.DeviceType.Network: { switch(network.DriverType) { case ResursAPI.DriverType.IncotextNetwork: { var incotexPort = new Incotex.NetworkControllers.DataLinkLayer.ComPort { BaudRate = (int)network.GetParameter( ParameterNamesIncotexNetwork.BautRate), PortName = ((ParameterStringContainer)network.GetParameter( ParameterNamesIncotexNetwork.PortName)).GetValue() }; var incotexController = new IncotexNetworkController { Id = (Guid)network.GetParameter(ParameterNamesIncotexNetwork.Id), Connection = (IDataLinkPort)incotexPort, BroadcastRequestDelay = (int)network.GetParameter( ParameterNamesIncotexNetwork.BroadcastDelay), RequestTimeout = (int)network.GetParameter( ParameterNamesIncotexNetwork.Timeout) }; _NetworkControllers.Add((INetwrokController)incotexController); if (network.IsActive) { incotexController.Start(); } else { incotexController.Stop(); } break; } case DriverType.VirtualIncotextNetwork: { var controller = new IncotexNetworkControllerVirtual { Id = (Guid)network.GetParameter(ParameterNamesIncotexNetworkVirtual.Id), PollingPeriod = (int)network.GetParameter(ParameterNamesIncotexNetworkVirtual.PollInterval) }; _NetworkControllers.Add((INetwrokController)controller); if (network.IsActive) { controller.Start(); } else { controller.Stop(); } break; } default: { throw new NotSupportedException(String.Format( "Устройтсво с DriverType={0} не поддерживается", network.DriverType.ToString())); } } break; } case ResursAPI.DeviceType.Counter: { throw new InvalidCastException( "Попытка приветсти счётчик эл энергии к контроллеру сети"); } default: { throw new InvalidCastException(String.Format( "Неудалось привести типы. Устройтсво с DeviceType={0} не поддерживается", network.DeviceType.ToString())); } } }
/// <summary> /// Создаёт устройтсво на основе типа и добавляет в коллекцию /// </summary> public void AddDevice(ResursAPI.Device device) { switch (device.DeviceType) { case ResursAPI.DeviceType.Network: { throw new InvalidCastException( "Попытка приветсти к контроллер сети к устройтсву"); } case ResursAPI.DeviceType.Counter: { switch (device.DriverType) { case ResursAPI.DriverType.Mercury203Counter: { var mercury203 = new Mercury203 { Id = (Guid)device.GetParameter(ParameterNamesMercury203.Id), Address = (UInt32)device.GetParameter(ParameterNamesMercury203.Address), Status = device.IsActive ? Status.Running : Status.Stopped }; mercury203.Parameters[ParameterNamesMercury203.GADDR].Value = device.GetParameter(ParameterNamesMercury203.GADDR); mercury203.Parameters[ParameterNamesMercury203.PowerLimit].Value = device.GetParameter(ParameterNamesMercury203.PowerLimit); mercury203.Parameters[ParameterNamesMercury203.PowerLimitPerMonth].Value = device.GetParameter(ParameterNamesMercury203.PowerLimitPerMonth); //TODO: Сделать таблицу параметров доконца var owner = device.Parent; if ((owner == null) || (owner.DriverType != DriverType.IncotextNetwork)) { throw new InvalidOperationException( "Невозможно добавить устройтсво. Владельцем устройства не является IncotextNetwork"); } _NetworkControllers[(Guid)owner.GetParameter(ParameterNamesBase.Id)] .Devices.Add(mercury203); break; } case DriverType.VirtualMercury203Counter: { var mercury203 = new Mercury203Virtual { Id = (Guid)device.GetParameter(ParameterNamesMercury203.Id), Address = (UInt32)device.GetParameter(ParameterNamesMercury203.Address), Status = device.IsActive ? Status.Running : Status.Stopped }; mercury203.Parameters[ParameterNamesMercury203.GADDR].Value = device.GetParameter(ParameterNamesMercury203.GADDR); mercury203.Parameters[ParameterNamesMercury203.PowerLimit].Value = device.GetParameter(ParameterNamesMercury203.PowerLimit); //mercury203.Parameters[ParameterNamesMercury203.PowerLimitPerMonth].Value = // device.GetParameter(ParameterNamesMercury203.PowerLimitPerMonth); //TODO: Сделать таблицу параметров доконца var owner = device.Parent; if ((owner == null) || (owner.DriverType != DriverType.VirtualIncotextNetwork)) { throw new InvalidOperationException( "Невозможно добавить устройтсво. Владельцем устройства не является VirtualIncotextNetwork"); } _NetworkControllers[(Guid)owner.GetParameter(ParameterNamesBase.Id)] .Devices.Add(mercury203); break; } default: { throw new NotSupportedException(String.Format( "Устройтсво с DriverType={0} не поддерживается", device.DriverType.ToString())); } } break; } default: { throw new InvalidCastException(String.Format( "Неудалось привести типы. Устройтсво с DeviceType={0} не поддерживается", device.DeviceType.ToString())); } } }