public static bool IsSystemObservability(ref State system_state, int k0 = 0)
        {
            bool          result;
            int           tempResult;
            Observability node = new Observability(ref system_state);

            if (!system_state.stationarity)     //система не стационарная p.55
            {
                tempResult = node.IsObserv_NonStationarity(ref system_state, k0);
                if (tempResult < 0)
                {
                    result = false;
                }
                else
                {
                    //Выставляем биты в state.
                    // 0 - высавляем observersability в 0
                    // 1 - высавляем observersability в 1
                    // 2 - тоже выставляем observersability в 1...
                    result = true;
                    switch (tempResult)
                    {
                    case 0:
                        system_state.full_observersability = false;
                        system_state.part_observersability = false;
                        break;

                    case 1:
                        system_state.full_observersability = true;
                        break;

                    case 2:
                        system_state.part_observersability = true;
                        break;
                    }
                }
            }
            else //система стационарна
            {
                tempResult = node.IsObserv_stationarity(ref system_state);
                if (tempResult < 0)
                {
                    result = false;
                }
                else
                {
                    //Выставляем биты в state.
                    // 0 - высавляем observersability в 0
                    // 1 - высавляем observersability в 1
                    // 2 - тоже выставляем observersability в 1...
                    result = true;
                    switch (tempResult)
                    {
                    case 0:
                        system_state.full_observersability = false;
                        system_state.part_observersability = false;
                        break;

                    case 1:
                        system_state.full_observersability = true;
                        break;

                    case 2:
                        system_state.part_observersability = true;
                        break;
                    }
                }
            }
            return(result);
        }
Exemple #2
0
        /// <summary>
        /// Наблюдаемость
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button_observ_Click(object sender, EventArgs e)
        {
            int locationX = 10;
            int locationY = 160;

            tabPage3.Controls.Clear();
            tabPage3.Controls.Add(button_observ);
            tabPage3.Controls.Add(label_IsObserv);
            tabPage3.Controls.Add(label_FullObserv);
            tabPage3.Controls.Add(label_PartObserv);

            if (!sys.current_state.stationarity)
            {
                tabPage3.Controls.Add(label_Sa);
                tabPage3.Controls.Add(label_Sr);
            }


            tabPage3.Controls.Add(label_Va);
            tabPage3.Controls.Add(label_Vr);


            Observability.IsSystemObservability(ref sys.current_state);

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

            this.VrMatrixBox     = new MatrixDrawer(new MatrixLibrary.Matrix(20, 20));
            label_Vr.Text        = "Ранг Vr: " + Matrix.Rank(Observability.tmpVr).ToString();
            VrMatrixBox.Location = new Point(locationX, locationY);
            label_Vr.Location    = new Point(locationX, locationY - 25);
            this.tabPage3.Controls.Add(VrMatrixBox);
            this.VrMatrixBox.ReloadMatrix(Observability.tmpVr);
            if (sys.current_state.stationarity)
            {
                label_Vr.Text += "    |    n = " + sys.current_state.n.ToString();
            }
            else
            {
                locationX += VrMatrixBox.Width + 20;

                this.SrMatrixBox     = new MatrixDrawer(new MatrixLibrary.Matrix(20, 20));
                label_Sr.Text        = "Ранг Sr: " + Matrix.Rank(Observability.tmpSr).ToString();
                SrMatrixBox.Location = new Point(locationX, locationY);
                label_Sr.Location    = new Point(locationX, locationY - 25);
                this.tabPage3.Controls.Add(SrMatrixBox);
                this.SrMatrixBox.ReloadMatrix(Observability.tmpSr);
            }

            locationX  = 10;
            locationY += VrMatrixBox.Height + 80;

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

            this.VaMatrixBox     = new MatrixDrawer(new MatrixLibrary.Matrix(20, 20));
            label_Va.Text        = "Ранг Va: " + Matrix.Rank(Observability.tmpVa).ToString();
            VaMatrixBox.Location = new Point(locationX, locationY);
            label_Va.Location    = new Point(locationX, locationY - 25);
            this.tabPage3.Controls.Add(VaMatrixBox);
            this.VaMatrixBox.ReloadMatrix(Observability.tmpVa);

            if (sys.current_state.stationarity)
            {
                int tmp = sys.current_state.n * (Observability.J + 1);
                label_Va.Text += "    |    n(J+1) = " + tmp.ToString();
            }
            else
            {
                locationX += VaMatrixBox.Width + 20;

                this.SaMatrixBox     = new MatrixDrawer(new MatrixLibrary.Matrix(20, 20));
                label_Sa.Text        = "Ранг Sa: " + Matrix.Rank(Observability.tmpSa).ToString();
                SaMatrixBox.Location = new Point(locationX, locationY);
                label_Sa.Location    = new Point(locationX, locationY - 25);
                this.tabPage3.Controls.Add(SaMatrixBox);
                this.SaMatrixBox.ReloadMatrix(Observability.tmpSa);
            }

            if (sys.current_state.full_observersability)
            {
                label_IsObserv.ForeColor = Color.Green;
                label_IsObserv.Text      = "Система полностью наблюдаема";
                if (!debug)
                {
                    step = 3;
                }
            }

            else

            {
                label_IsObserv.ForeColor = Color.Red;
                if (sys.current_state.part_observersability)
                {
                    label_IsObserv.Text = "Система частично наблюдаема";
                }
                else
                {
                    label_IsObserv.Text = "Система не наблюдаема";
                }
            }
        }
Exemple #3
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("Ошибка при определении параметров системы");//если не удалось даже подготовить к регуляции
     }
 }