예제 #1
0
        /// <summary>
        /// Конструктор класса "Ошибки (отклонения)"
        /// </summary>
        /// <param name="generators">данные по генераторам</param>
        public Errors(GeneratorsData generators)
        {
            var coi = GetCenterOfInertia(generators);

            Type myType = typeof(Errors);
            var  fault  = myType.GetField("_fault",
                                          BindingFlags.NonPublic | BindingFlags.Instance);
            var time = myType.GetField("_time",
                                       BindingFlags.NonPublic | BindingFlags.Instance);

            time.SetValue(this, generators.Time);
            for (int i = 1; i <= generators.generatorsData.Count; i++)
            {
                var tuple = errors[i];
                var power = float.Parse(generators.GetType().
                                        GetProperty(tuple.Item2).GetValue(generators).ToString());
                var difference = power - coi;

                FieldInfo error = myType.GetField(tuple.Item1,
                                                  BindingFlags.NonPublic | BindingFlags.Instance);
                error.SetValue(this, difference);

                if (Math.Abs(difference) >= LIMIT)
                {
                    fault.SetValue(this, true);
                }
            }
        }
예제 #2
0
        /// <summary>
        /// Возвращает центра инерции COI
        /// </summary>
        /// <param name="generators">данные по генераторам</param>
        /// <returns>центр инерции COI</returns>
        private float GetCenterOfInertia(GeneratorsData generators)
        {
            float numerator   = 0;
            float denominator = 0;

            for (int i = 1; i <= generators.generatorsData.Count; i++)
            {
                var tuple = generators.generatorsData[i];
                var power = float.Parse(generators.GetType().
                                        GetProperty(tuple.Item1).GetValue(generators).ToString());
                var angle = float.Parse(generators.GetType().
                                        GetProperty(tuple.Item2).GetValue(generators).ToString());

                numerator   += power * angle;
                denominator += power;
            }
            return(numerator / denominator);
        }