Exemple #1
0
        public SubstationViewModel(Substation substation, SubGeographicalRegionViewModel parentSubGeographicalRegion, ObservableCollection <TableSMItem> ders)
            : base(parentSubGeographicalRegion, true)
        {
            ReactiveVisibility = Visibility.Collapsed;

            foreach (SynchronousMachine der in rdAdapter.GetDERs(substation.GlobalId))
            {
                if (der.FuelType == FTN.Common.FuelType.Wind)
                {
                    ReactiveVisibility = Visibility.Visible;
                    break;
                }
            }

            _substation          = substation;
            ActivePowerCommand   = new RelayCommand(() => ExecuteActivePowerCommand());
            ReactivePowerCommand = new RelayCommand(() => ExecuteReactivePowerCommand());
            _ders = ders;
            _ders.Clear();
        }
Exemple #2
0
        public GeographicalRegionViewModel(GeographicalRegion region, NetworkRootViewModel parent, ObservableCollection <TableSMItem> ders)
            : base(parent, true)
        {
            ReactiveVisibility = Visibility.Collapsed;

            var allDers = rdAdapter.GetDERs(region.GlobalId);

            foreach (SynchronousMachine der in allDers)
            {
                if (der.FuelType == FTN.Common.FuelType.Wind)
                {
                    ReactiveVisibility = Visibility.Visible;
                    break;
                }
            }

            _region              = region;
            ActivePowerCommand   = new RelayCommand(() => ExecuteActivePowerCommand());
            ReactivePowerCommand = new RelayCommand(() => ExecuteReactivePowerCommand());
            _ders = ders;
            _ders.Clear();
        }
        /// <summary>
        /// Pomocna funkcija koja na osnovu GlobalId pribavlja sve DER-ove, GlobalId moze da se odnosi na Region, SubRegion, Substation ili sam DER
        /// </summary>
        /// <param name="gid"> Globalni identifikator</param>
        /// <returns> Lista DER-ova </returns>
        private List <SynchronousMachine> GetDERsForGlobalID(long gid)
        {
            // Povratna vrednost - lista DER-ova
            List <SynchronousMachine> ders = new List <SynchronousMachine>();

            // U zavisnosti od tipa gid-a, pribavljaju se sinhrone masine
            switch (((DMSType)ModelCodeHelper.ExtractTypeFromGlobalId(gid)))
            {
            case DMSType.REGION:
            case DMSType.SUBREGION:
            case DMSType.SUBSTATION:
                ders = adapter.GetDERs(gid);
                break;

            case DMSType.SYNCMACHINE:
                ders.Add(CalculationEngineModel.Instance.DersOriginal.Where(o => o.GlobalId.Equals(gid)).FirstOrDefault());
                break;
            }

            return(ders);
        }
        /// <summary>
        /// Calculates forecast for ders group
        /// <param name="hourlyData"></param>
        /// <param name="groupGID"></param>
        /// <returns></returns>
        public ForecastObject CalculateHourlyForecastForGroup(long groupGID)
        {
            LogHelper.Log(LogTarget.File, LogService.CalculationEngineForecast, " INFO - CalculationEngineForecast.cs - Get hourly forecast for group: " + groupGID);
            List <ForecastObject> derFObjects = new List <ForecastObject>();
            ForecastObject        forecastObj = new ForecastObject();

            DateTime start = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);
            DateTime end   = start.AddDays(1);

            start = start.AddHours(DateTime.Now.Hour);

            forecastObj.DerGID = groupGID;

            //Return forecast object for each der in group and add it to list of der forecast objects
            foreach (SynchronousMachine der in adapter.GetDERs(groupGID))
            {
                ForecastObject temp = model.ForecastListOfDers.Where(o => o.DerGID.Equals(der.GlobalId)).FirstOrDefault();

                ForecastObject retValue = new ForecastObject();

                retValue.DerGID  = temp.DerGID;
                retValue.HourlyP = temp.HourlyP.Where(o => o.Timestamp >= start.Ticks && o.Timestamp <= end.Ticks).ToList();
                retValue.HourlyQ = temp.HourlyQ.Where(o => o.Timestamp >= start.Ticks && o.Timestamp <= end.Ticks).ToList();

                retValue.HourlyP = CopyList(retValue.HourlyP);
                retValue.HourlyQ = CopyList(retValue.HourlyQ);

                UpdateForecastDataDer(retValue);

                derFObjects.Add(retValue);
            }

            // UpdateForecastData(derFObjects);

            //fill out lists of forecast object of group
            for (int k = 0; k < derFObjects.FirstOrDefault().HourlyP.Count; k++)
            {
                forecastObj.HourlyP.Add(new AnalogValue(-1));
                forecastObj.HourlyQ.Add(new AnalogValue(-1));
            }

            //Go through each object in list and sum their power values
            foreach (ForecastObject item in derFObjects)
            {
                for (int i = 0; i < item.HourlyP.Count; i++)
                {
                    forecastObj.HourlyP[i].Value       += item.HourlyP[i].Value;
                    forecastObj.HourlyP[i].PowIncrease += item.HourlyP[i].PowIncrease;
                    forecastObj.HourlyP[i].PowDecrease += item.HourlyP[i].PowDecrease;

                    //Solar der HourlyQ list should be empty, so we need to skip it
                    if (item.HourlyQ.Count > 0)
                    {
                        forecastObj.HourlyQ[i].Value       += item.HourlyQ[i].Value;
                        forecastObj.HourlyQ[i].PowIncrease += item.HourlyQ[i].PowIncrease;
                        forecastObj.HourlyQ[i].PowDecrease += item.HourlyQ[i].PowDecrease;
                    }
                }
            }

            //Go through each power value in group forecast object and devide it with count of ders to get average power value
            for (int j = 0; j < forecastObj.HourlyP.Count; j++)
            {
                //set time for each element in power lists
                //use first element in der object list beause all object have same time values
                forecastObj.HourlyP[j].Timestamp = derFObjects[0].HourlyP[j].Timestamp;
                forecastObj.HourlyQ[j].Timestamp = derFObjects[0].HourlyP[j].Timestamp;
            }

            return(forecastObj);
        }