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(); }
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); }