4. Uruchomienie symulacji

4.2. Uruchomienie symulacji

Symulację można uruchomić na dwa sposoby:

  • w trybie wsadowym – W tym trybie prowadzona jest symulacja w zadanym horyzoncie czasowym, dla ustalonej zmienności sygnałów SP/CV (zgodnie z ustawionymi parametrami). W tym przypadku wykorzystujemy metodę simulate(tend, log_output, progress), gdzie: tend – czas symulacji, log_output – flaga zwracania wartości wyjściowych z okresem próbkowania monitorowania (‘monit’) lub sterowania (‘control’), progres – flaga wyświetlania wskaźnika postępu. W poniższym przykładzie tend zdefiniowany został w pliku konfiguracyjnym general_params.py (moduł params).

    Listing: Uruchomienie symulatora w trybie wsadowym (plik run_simulation.py)
    
    from params.general_params import *
    from subsystems.simulator import TtsPidSim
    from common.utils import *
    
    system = TtsPidSim(tp, pr)
    
    set_default_params(system)
    set_modes(system, 1, 0.2, 1, 2)
    
    # Simulation horizont [s]
    tend = 2000
    
    proc_vars = system.simulate(tend, 'monit', True)
                
  • w trybie pracy krokowej – W tym trybie sterujemy symulacją wyzwalając kolejne kroki obliczeń. W tym przypadku wykorzystujemy metodę simulation_step(log_output), gdzie: log_output – flaga zwracania wartości wyjściowych. W poniższym przykładzie wykonano symulację dla takiego samego okresu i tych samych parametrów co w przykładzie dla trybu wsadowego. Użytkownik może w kolejnych krokach symulacji ustawiać pożądane wartości parametrów symulatora i zmieniać sygnały sterujące, w tym SPman/CVman.

    Listing: Przykład uruchomienie symulatora w trybie pracy krokowej (plik run_step_by_step.py)
    
    from params.general_params import *
    from subsystems.simulator import TtsPidSim
    from common.utils import set_default_params
    import math
    
    system = TtsPidSim(tp, pr)
    
    # Ustawienie parametrów domyślnych
    set_default_params(system)
    
    # Ustawienie parametrów charakterystycznych
    tend = 2000
    #   SP ustawiane ręcznie
    system.in_var_val('SPmode', 1)
    
    # Przechowywanie wartości t, SP i PV
    t = []
    SP = []
    PV = []
    for i in range(int(tend / tp) + 1):
        t.append(i*tp)
        # Generowanie i zapis wartości SP: sinusoida o okresie 1200 [s], amplitudzie 0.25 i biasie 0.25
        SP.append( 0.25*math.sin(2*math.pi/1200*i*tp)+0.25 )
        # Ustawienie wartości SP
        system.in_var_val('SPman', SP[i])
        rval = system.simulation_step('monit')
        # Odczyt i zapis wartości PV
        PV.append(system.out_var_val('PV'))