Ejemplo n.º 1
0
        private double Oblicz_wyjscie(Calka calka_pierwsza, Calka calka_druga, double wejscie, ref double stan_przejsciowy_x1)
        {
            double stan_przejsciowy_x2 = wejscie + (-1 / param_T) * stan_przejsciowy_x1;

            calka_pierwsza.probka_terazniejsza = stan_przejsciowy_x2;
            calka_pierwsza.wartosc            += Calkowanie(calka_pierwsza.probka_poprzednia, calka_pierwsza.probka_terazniejsza);
            stan_przejsciowy_x1 = calka_pierwsza.wartosc;

            calka_druga.probka_terazniejsza = stan_przejsciowy_x1;
            calka_druga.wartosc            += Calkowanie(calka_druga.probka_poprzednia, calka_druga.probka_terazniejsza);
            double stan_przejsciowy_x0 = calka_druga.wartosc;

            calka_pierwsza.probka_poprzednia = calka_pierwsza.probka_terazniejsza;
            calka_druga.probka_poprzednia    = calka_druga.probka_terazniejsza;

            return(stan_przejsciowy_x0 * (1 / param_T));
        }
Ejemplo n.º 2
0
        private void Operacje()
        {
            double akt_uchyb   = 0;
            double akt_wyjście = 0;
            double akt_wejscie = 0;
            double akt_sygnal_przejsciowy_u1 = 0;
            double stan_przejsciowy_x1       = 0;
            double akt_czas          = 0;
            double czas_pracy_ukladu = 20 * (1 / Calka.krok);

            List <double> Uchyb   = new List <double>();
            List <double> Wyjscie = new List <double>();
            List <double> Wejscie = new List <double>();

            Calka calka_pierwsza = new Calka();
            Calka calka_druga    = new Calka();

            for (akt_czas = 0; akt_czas <= czas_pracy_ukladu; akt_czas++)
            {
                akt_wejscie = Oblicz_wejscie(akt_czas, Wejscie);                                                                        //deklarujemy wartość wejścia w danym momencie t
                akt_uchyb   = akt_wejscie - akt_wyjście;                                                                                //obliczamy uchyb
                akt_sygnal_przejsciowy_u1 = Nieliniowosc(akt_uchyb);                                                                    //uchyb przepuszczamy przez człon nieliniowy
                akt_wyjście = Oblicz_wyjscie(calka_pierwsza, calka_druga, akt_sygnal_przejsciowy_u1, ref stan_przejsciowy_x1);

                Uchyb.Add(akt_uchyb);
                Wyjscie.Add(akt_wyjście);
            }

            Label[] wspolrzedne_y_wyjscie =
            {
                wsp_wyjscia_y11, wsp_wyjscia_y10, wsp_wyjscia_y9,  wsp_wyjscia_y8,   wsp_wyjscia_y7,  wsp_wyjscia_y6,  wsp_wyjscia_y5,  wsp_wyjscia_y4,  wsp_wyjscia_y3,
                wsp_wyjscia_y2,  wsp_wyjscia_y1,  wsp_wyjscia_y0,  wsp_wyjscia_ym1,  wsp_wyjscia_ym2, wsp_wyjscia_ym3, wsp_wyjscia_ym4, wsp_wyjscia_ym5, wsp_wyjscia_ym6,
                wsp_wyjscia_ym7, wsp_wyjscia_ym8, wsp_wyjscia_ym9, wsp_wyjscia_ym10, wsp_wyjscia_ym11
            };

            Label[] wspolrzedne_x_wyjscie =
            {
                wsp_wyjscia_x1,  wsp_wyjscia_x2,  wsp_wyjscia_x3,  wsp_wyjscia_x4,  wsp_wyjscia_x5,  wsp_wyjscia_x6,  wsp_wyjscia_x7,  wsp_wyjscia_x8,  wsp_wyjscia_x9,
                wsp_wyjscia_x10, wsp_wyjscia_x11, wsp_wyjscia_x12, wsp_wyjscia_x13, wsp_wyjscia_x14, wsp_wyjscia_x15, wsp_wyjscia_x16, wsp_wyjscia_x17, wsp_wyjscia_x18,
                wsp_wyjscia_x19, wsp_wyjscia_x20
            };

            Label[] wspolrzedne_y_uchyb =
            {
                wsp_uchybu_y11, wsp_uchybu_y10, wsp_uchybu_y9,  wsp_uchybu_y8,   wsp_uchybu_y7,  wsp_uchybu_y6,  wsp_uchybu_y5,  wsp_uchybu_y4,  wsp_uchybu_y3,
                wsp_uchybu_y2,  wsp_uchybu_y1,  wsp_uchybu_y0,  wsp_uchybu_ym1,  wsp_uchybu_ym2, wsp_uchybu_ym3, wsp_uchybu_ym4, wsp_uchybu_ym5, wsp_uchybu_ym6,
                wsp_uchybu_ym7, wsp_uchybu_ym8, wsp_uchybu_ym9, wsp_uchybu_ym10, wsp_uchybu_ym11
            };

            Label[] wspolrzedne_x_uchyb =
            {
                wsp_uchybu_x1,  wsp_uchybu_x2,  wsp_uchybu_x3,  wsp_uchybu_x4,  wsp_uchybu_x5,  wsp_uchybu_x6,  wsp_uchybu_x7,  wsp_uchybu_x8,  wsp_uchybu_x9,
                wsp_uchybu_x10, wsp_uchybu_x11, wsp_uchybu_x12, wsp_uchybu_x13, wsp_uchybu_x14, wsp_uchybu_x15, wsp_uchybu_x16, wsp_uchybu_x17, wsp_uchybu_x18,
                wsp_uchybu_x19, wsp_uchybu_x20
            };

            Rysuj_wykres(Wyjscie, Brushes.Red, Canvas_Y, wspolrzedne_x_wyjscie, wspolrzedne_y_wyjscie, czas_pracy_ukladu * Calka.krok);

            if (RB_uchyb.IsChecked == true)
            {
                Rysuj_wykres(Uchyb, Brushes.Blue, Canvas_E, wspolrzedne_x_uchyb, wspolrzedne_y_uchyb, czas_pracy_ukladu * Calka.krok);
            }
            else
            {
                Rysuj_wykres(Wejscie, Brushes.Blue, Canvas_E, wspolrzedne_x_uchyb, wspolrzedne_y_uchyb, czas_pracy_ukladu * Calka.krok);
            }
        }