Beispiel #1
0
		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);
		}
Beispiel #2
0
        /// <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()));
                    }
            }
        }
Beispiel #3
0
        /// <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()));
                    }
            }
        }