Пример #1
0
        /// <summary>
        /// главная функция рассчета управляемости системы. возвращает нашелся ли метод на тип системы, описанной в sysytem_state
        ///!!!Конструкторы не описаны - АБСТРАКТНЫЙ КОД!
        /// </summary>
        /// <param name="system_state"></param>
        /// <returns></returns>
        public static bool IsSystemControllability(ref State system_state)
        {
            //была ли определена управляемоть
            bool flag = false;
            //объект для инициализации в зависимости от типа системы
            Controllability node = new Controllability(ref system_state);

            if (system_state.synchronism)                                             //система синхронна
            {
                if (!system_state.stationarity)                                       //система не стационарная
                {
                    if (system_state.delay_by_state && system_state.delay_by_control) //есть запаздывание по состоянию и управлению
                    {
                        node.IsContr_NonPerm_XU(ref system_state);                    //запись результата в State - состояние системы
                        flag = true;
                    }
                    if (system_state.delay_by_state && !system_state.delay_by_control)  //есть запаздывание по состоянию и НЕТ по управлению
                    {
                        node.IsContr_NonPerm_X(ref system_state);
                        flag = true;
                    }
                    if (!system_state.delay_by_state && system_state.delay_by_control)  //НЕТ запаздывания по состоянию и есть по управлению
                    {
                        node.IsContr_NonPerm_U(ref system_state);
                        flag = true;
                    }
                }

                else //система стационарна
                {
                    if (system_state.delay_by_state && system_state.delay_by_control)   //есть запаздывание по состоянию и по управлению
                    {
                        node.IsContr_Perm_XU(ref system_state);
                        flag = true;
                    }
                    if (system_state.delay_by_state && !system_state.delay_by_control)  //есть запаздывание по состоянию и НЕТ по управлению
                    {
                        node.IsContr_Perm_X(ref system_state);
                        flag = true;
                    }
                    if (!system_state.delay_by_state && system_state.delay_by_control) //НЕТ запаздывания по состоянию и есть по управлению
                    {
                        node.IsContr_Perm_U(ref system_state);
                        flag = true;
                    }
                }
            }
            else    //система асинхронна - пока хз. в книге написано что приводятся к синхронным.
            {
                flag = false;
            }
            return(flag);
        }
Пример #2
0
 /// <summary>
 /// Функция построения последовательности обработки системы
 ///diff_state - состояние, содержащее A, B и т.п. для следующего шага
 ///следствия реализации регулятора: diff_state.x[0] - новый х. также для А, В, analogA, analog_B,H,...
 /// </summary>
 /// <param name="diff_state"></param>
 public void next_stage(State diff_state)
 {
     if (Digitizer.DigitizeSystem(ref this.current_state) && Controllability.IsSystemControllability(ref this.current_state) && Observability.IsSystemObservability(ref this.current_state))
     {
         if (!Regulator.MakeRegulation(ref this.current_state, diff_state))
         {
             throw new ArgumentException("Ошибка при регулировании");//если вернули false, то для такой системы нет регулятора
         }
     }
     else
     {
         throw new ArgumentException("Ошибка при определении параметров системы");//если не удалось даже подготовить к регуляции
     }
 }
Пример #3
0
        /// <summary>
        /// Управляемость
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            int    locationX   = 10;
            int    locationY   = 160;
            String Matrix1Name = "";
            String Matrix2Name = "";


            tabPage2.Controls.Clear();
            tabPage2.Controls.Add(button2);
            tabPage2.Controls.Add(label3);
            tabPage2.Controls.Add(label6);
            tabPage2.Controls.Add(label4);
            tabPage2.Controls.Add(label7);

            if (!sys.current_state.stationarity)
            {
                tabPage2.Controls.Add(label8);
                tabPage2.Controls.Add(label5);
            }

            tabPage2.Controls.Add(label9);

            Controllability.IsSystemControllability(ref sys.current_state);

            if (sys.current_state.stationarity)
            {
                Matrix1Name = " Vr";
                Matrix2Name = " Va";
            }


            label3.Location = new Point(locationX, locationY - 60);

            this.UniversalMatrixBox3 = new MatrixDrawer(new MatrixLibrary.Matrix(20, 20));
            label4.Text = "Ранг" + Matrix1Name + ": " + Matrix.Rank(Controllability.GR).ToString();
            UniversalMatrixBox3.Visible  = false;
            UniversalMatrixBox3.Location = new Point(locationX, locationY);
            label4.Location = new Point(locationX, locationY - 25);
            this.tabPage2.Controls.Add(UniversalMatrixBox3);
            this.UniversalMatrixBox3.ReloadMatrix(Controllability.GR);
            UniversalMatrixBox3.Visible = true;

            if (sys.current_state.stationarity)
            {
                label4.Text += "    |    n = " + sys.current_state.n.ToString();
            }
            else
            {
                locationX += UniversalMatrixBox3.Width + 20;

                this.UniversalMatrixBox4 = new MatrixDrawer(new MatrixLibrary.Matrix(20, 20));
                label8.Text = "Ранг: " + Matrix.Rank(Controllability.temp_GR).ToString();
                UniversalMatrixBox4.Visible  = false;
                UniversalMatrixBox4.Location = new Point(locationX, locationY);
                label8.Location = new Point(locationX, locationY - 25);
                this.tabPage2.Controls.Add(UniversalMatrixBox4);
                this.UniversalMatrixBox4.ReloadMatrix(Controllability.temp_GR);
                UniversalMatrixBox4.Visible = true;
            }
            locationX  = 10;
            locationY += UniversalMatrixBox3.Height + 80;

            label6.Location = new Point(locationX, locationY - 60);

            this.UniversalMatrixBox5 = new MatrixDrawer(new MatrixLibrary.Matrix(20, 20));
            label7.Text = "Ранг" + Matrix2Name + ": " + Matrix.Rank(Controllability.G_).ToString();
            UniversalMatrixBox5.Visible  = false;
            UniversalMatrixBox5.Location = new Point(locationX, locationY);
            label7.Location = new Point(locationX, locationY - 25);
            this.tabPage2.Controls.Add(UniversalMatrixBox5);
            this.UniversalMatrixBox5.ReloadMatrix(Controllability.G_);
            UniversalMatrixBox5.Visible = true;

            if (sys.current_state.stationarity)
            {
                int tmp = sys.current_state.n * (sys.current_state.L[sys.current_state.a - 1] + 1);
                label7.Text += "    |    n(La+1) = " + tmp.ToString();
            }
            else
            {
                locationX += UniversalMatrixBox5.Width + 20;

                this.UniversalMatrixBox6 = new MatrixDrawer(new MatrixLibrary.Matrix(20, 20));
                label5.Text = "Ранг: " + Matrix.Rank(Controllability.temp_G_).ToString();
                UniversalMatrixBox6.Visible  = false;
                UniversalMatrixBox6.Location = new Point(locationX, locationY);
                label5.Location = new Point(locationX, locationY - 25);
                this.tabPage2.Controls.Add(UniversalMatrixBox6);
                this.UniversalMatrixBox6.ReloadMatrix(Controllability.temp_G_);
                UniversalMatrixBox6.Visible = true;
            }
            if (sys.current_state.full_controllability)
            {
                label9.ForeColor = Color.Green;
                label9.Text      = "Система полностью управляема";
                if (!debug)
                {
                    step = 2;
                }
            }
            else
            {
                label9.ForeColor = Color.Red;
                if (sys.current_state.part_controllability)
                {
                    label9.Text = "Система частично управляема";
                }
                else
                {
                    label9.Text = "Система не управляема";
                }
            }
        }