コード例 #1
0
        public List <long> GetAnalogValuesGidForGidAndPowerType(long gid, PowerType powerType)
        {
            List <long> resultIds          = new List <long>();
            List <SynchronousMachine> ders = new List <SynchronousMachine>();

            int numberOfResources = 500;

            Association association = new Association(ModelCode.SYNCMACHINE_MEASVALUES, 0, false);

            if (((DMSType)ModelCodeHelper.ExtractTypeFromGlobalId(gid)).Equals(DMSType.SYNCMACHINE))
            {
                ders.Add(new SynchronousMachine(gid));
            }
            else
            {
                ders = GetDERs(gid);
            }

            try
            {
                List <ModelCode> properties = new List <ModelCode>();
                properties.Add(ModelCode.IDOBJ_GID);
                properties.Add(ModelCode.MEASUREMENTVALUE_POWERTYPE);

                foreach (SynchronousMachine der in ders)
                {
                    int iteratorId    = GdaQueryProxy.GetRelatedValues(der.GlobalId, properties, association);
                    int resourcesLeft = GdaQueryProxy.IteratorResourcesLeft(iteratorId);

                    while (resourcesLeft > 0)
                    {
                        List <ResourceDescription> rds = GdaQueryProxy.IteratorNext(numberOfResources, iteratorId);

                        foreach (ResourceDescription rd in rds)
                        {
                            PowerType type = (PowerType)rd.GetProperty(ModelCode.MEASUREMENTVALUE_POWERTYPE).AsEnum();
                            if (type.Equals(powerType))
                            {
                                resultIds.Add(rd.Id);
                            }
                        }

                        resourcesLeft = GdaQueryProxy.IteratorResourcesLeft(iteratorId);
                    }

                    GdaQueryProxy.IteratorClose(iteratorId);

                    CommonTrace.WriteTrace(CommonTrace.TraceError, "Getting extent values method successfully finished.");
                }
            }
            catch (Exception e)
            {
                string message = string.Format("Getting related values method  failed for sourceGlobalId = {0} and association (propertyId = {1}, type = {2}). Reason: {3}", gid, association.PropertyId, association.Type, e.Message);
                Console.WriteLine(message);
                CommonTrace.WriteTrace(CommonTrace.TraceError, message);
            }

            return(resultIds);
        }
コード例 #2
0
        /// <summary>
        /// Pomocna funkcija koja radi uzimanje forecast proracuna samo za interval koji je od interesa i vrsi grupisanje po vremenu
        /// </summary>
        /// <param name="duration"> Vreme koje nam je potrebno</param>
        /// <param name="type"> Power Type </param>
        /// <param name="forecastObjects"> List-a ForecastObject-a</param>
        /// <returns> Grupisana i filtrirana predvidjanja po vremenu </returns>
        private SortedDictionary <long, List <AnalogValue> > GroupAndFilterByTime(long duration, PowerType type, List <ForecastObject> forecastObjects)
        {
            // Trenutno vreme
            DateTime current = DateTime.Now;

            // Pocetak od kada nam treba forecast proracun
            DateTime startTime = new DateTime(current.Year, current.Month, current.Day, current.Hour, 0, 0);

            // Povratna vrednost
            SortedDictionary <long, List <AnalogValue> > retValue = new SortedDictionary <long, List <AnalogValue> >();

            // Pomocna promenjiva koja se uvecava za jedan sat u svakoj iteraciji
            DateTime temp = startTime;

            for (int i = 0; i < duration; i++)
            {
                temp = temp.AddHours(1);

                List <AnalogValue> forecastMeasurement = new List <AnalogValue>();

                // Prolazi se kroz forecast objekte i na osnovu power type uzima se vrednost za prvi Date time i tako dog se ne dodje do kraja duration-a
                foreach (ForecastObject forecastObject in forecastObjects)
                {
                    if (type.Equals(PowerType.Active))
                    {
                        forecastMeasurement.AddRange(forecastObject.HourlyP.Where(o => o.Timestamp.Equals(temp.Ticks)).ToList());
                    }
                    else
                    {
                        forecastMeasurement.AddRange(forecastObject.HourlyQ.Where(o => o.Timestamp.Equals(temp.Ticks)).ToList());
                    }
                }

                retValue.Add(temp.Ticks, forecastMeasurement);
            }

            return(retValue);
        }