How do I use the 'sim' command in MATLAB?

Simulink Batch-simulering i MATLAB

27/01/2022

Rating: 4.39 (1602 votes)
Indholdsfortegnelse

Introduktion til Simulink Batch-simulering

MATLAB er et kraftfuldt værktøj til numeriske beregninger og datamanipulation, men dets sande potentiale udfolder sig ofte, når det kombineres med Simulink, et miljø til simulering af dynamiske systemer. Mens mange brugere er fortrolige med at køre individuelle simuleringer interaktivt, er der et enormt potentiale i at automatisere denne proces gennem batch-simuleringer. Dette er især nyttigt, når man skal køre flere simuleringer med forskellige parametre, udføre følsomhedsanalyser eller integrere simuleringer i større automatiseringsworkflows. Denne artikel vil guide dig gennem de grundlæggende principper og mest effektive metoder til at udføre batch-simuleringer af Simulink-modeller direkte fra MATLAB-miljøet.

Can I use Matlab® on my iPhone or iPad?
This app is available only on the App Store for iPhone and iPad. Connect to MATLAB® from your iPhone or iPad. Evaluate MATLAB commands, create and edit files, view results, acquire data from sensors, and visualize data – from the convenience of your mobile device. CONNECT TO THE CLOUD

Hvad er Batch-simulering?

Batch-simulering refererer til processen med at køre en serie af simuleringer uden manuel intervention. I stedet for at starte og konfigurere hver simulering individuelt, kan man skrive et script i MATLAB, der automatisk indlæser en Simulink-model, modificerer relevante parametre, kører simuleringen og gemmer resultaterne. Denne tilgang sparer betydelig tid og reducerer risikoen for menneskelige fejl, især når man arbejder med et stort antal scenarier.

Grundlæggende MATLAB-kommandoer til Simulink

Før vi dykker ned i batch-simulering, er det vigtigt at have en grundlæggende forståelse af, hvordan MATLAB interagerer med Simulink. MATLAB fungerer som et kommandocenter, hvorfra man kan styre næsten alle aspekter af Simulink-simuleringen.

Kommandoer til at håndtere modeller:

  • open_system('modelnavn'): Denne kommando bruges til at åbne en specificeret Simulink-model. Det er ofte et godt første skridt i et batch-script.
  • close_system('modelnavn'): Lukker den angivne model. Dette er vigtigt for at frigøre hukommelse og undgå konflikter, især når man arbejder med mange modeller.
  • sim('modelnavn'): Den centrale kommando til at køre en simulering. Når den kaldes, udfører den den aktuelle konfiguration af den angivne model.

Kommandoer til at konfigurere simuleringer:

Simulink-modeller har en række indstillinger, der kan styres programmatisk. Disse indstillinger er typisk gemt i en 'Structure' kaldet simulink_options eller direkte som parametre i modelkonfigurationen.

  • set_param('modelnavn', 'ParameterNavn', 'ParameterVærdi'): Denne alsidige kommando bruges til at ændre forskellige parametre i modellen. Eksempler inkluderer ændring af simuleringstid, starttid, stop tid, og solver-indstillinger.
  • get_param('modelnavn', 'ParameterNavn'): Bruges til at hente den aktuelle værdi af en given parameter.

Strukturering af et Batch-simuleringsscript

Et typisk batch-simuleringsscript i MATLAB vil følge en bestemt struktur:

  1. Initialisering: Ryd arbejdsområdet, luk åbne modeller, og definer variabler, der vil blive brugt i simuleringerne (f.eks. en liste over parametre, der skal testes).
  2. Loop over scenarier: Brug en for-løkke til at iterere gennem de forskellige scenarier eller parameterværdier, du vil teste.
  3. Konfiguration af modellen: Inden for løkken skal du bruge set_param til at opdatere de relevante parametre i din Simulink-model. Dette kan være alt fra gevinstværdier i en PID-regulator til inputdata.
  4. Kørsel af simulering: Brug sim-kommandoen til at køre simuleringen med de opdaterede parametre. Du kan også specificere outputtet fra sim-kommandoen, hvilket ofte er en struktur, der indeholder tidsvektoren og de simulerede signaler.
  5. Databehandling og lagring: Bearbejd de genererede resultater. Dette kan indebære at udtrække specifikke værdier, beregne fejlmetrikker eller plotte data. Gem derefter resultaterne på en organiseret måde (f.eks. i en .mat-fil, CSV-fil eller en database).
  6. Oprydning: Efter at alle simuleringer er kørt, kan det være en god idé at lukke modellerne igen.

Eksempel på et Batch-simuleringsscript

Lad os forestille os, at vi har en Simulink-model kaldet my_system.slx, der simulerer et simpelt kontrolsystem. Vi ønsker at teste effekten af en parameter kaldet Kp (proportional gain) på systemets ydeevne. Vi vil variere Kp fra 1 til 5 i trin på 1.

% Ryd arbejdsområdet og luk alle åbne modeller clear; close all; % Definer parameterværdier, der skal testes Kp_values = 1:1:5; % Initialiser en celle-array til at gemme resultater results = cell(length(Kp_values), 1); % Navnet på Simulink-modellen modelName = 'my_system'; % Åbn modellen open_system(modelName); % Loop gennem hver Kp-værdi for i = 1:length(Kp_values) current_Kp = Kp_values(i); % Sæt parameteren 'Kp' i modellen % Vi antager, at 'Kp' er en global variabel eller en parameter i 'Model Workspace' set_param(modelName, 'Kp', num2str(current_Kp)); % Konfigurer simuleringstiden (f.eks. 10 sekunder) set_param(modelName, 'StopTime', '10'); % Kør simuleringen % 'tout' er tidsvektoren, 'xout' er systemets tilstande, 'yout' er outputsignalerne [tout, xout, yout] = sim(modelName); % Gem resultaterne % Her gemmer vi kun outputtet, men man kan gemme alt nødvendigt results{i}.Kp = current_Kp; results{i}.time = tout; results{i}.output = yout; fprintf('Simulering med Kp = %d fuldført.\n', current_Kp); end % Luk modellen close_system(modelName); % Nu kan du analysere 'results' cell-arrayet % For eksempel, plot outputtet for hver simulering: figure; for i = 1:length(results) plot(results{i}.time, results{i}.output); hold on; end legend; xlabel('Tid (s)'); ylabel('Output'); title('System Output for forskellige Kp-værdier'); hold off; 

Avancerede Teknikker og Overvejelser

Brug af Simulink Parameter Objects

For mere komplekse modeller, hvor parametre er defineret som Simulink.Parameter objekter, kan du ændre deres værdier direkte via MATLABs workspace eller ved at indlæse dem fra en fil.

% Antag at du har et Parameter-objekt kaldet 'myGainParam' i din model % Først skal du indlæse modellen for at få adgang til dens workspace simulink_context = sim(modelName, [], simset('SaveOutput','on','ReturnWorkspaceOutputs','on')); % Ændre værdien af parameterobjektet simulink_context.UserData.myGainParam.Value = current_Kp; % Eller, hvis parameteren er defineret i Model Workspace: % open_system(modelName); % set_param([modelName '/SubsystemName/GainBlock'], 'Gain', num2str(current_Kp)); % Hvis det er en blokparameter % Eller direkte i model workspace: % set_param(modelName, 'ModelWorkspace:myGainParam', num2str(current_Kp)); % Dette kan variere afhængigt af version 

Parallel Computing

Hvis du har mange simuleringer at køre, kan du drage fordel af MATLABs Parallel Computing Toolbox til at køre simuleringer parallelt på flere CPU-kerner eller endda på en klynge. Dette kan drastisk reducere den samlede simuleringstid.

How do I create an app in MATLAB®?
Get started creating apps in MATLAB® by using App Designer to build an app from start to finish. By the end of the course, you will have an app that creates random mazes based on different settings selected by the user. Learn the key aspects of the app building workflow in MATLAB.
% Brug parfor-løkke for parallel udførelse (kræver Parallel Computing Toolbox) parfor i = 1:length(Kp_values) current_Kp = Kp_values(i); % Sæt parameteren set_param(modelName, 'Kp', num2str(current_Kp)); set_param(modelName, 'StopTime', '10'); % Kør simuleringen [tout, xout, yout] = sim(modelName); % Gem resultaterne results{i}.Kp = current_Kp; results{i}.time = tout; results{i}.output = yout; fprintf('Simulering med Kp = %d fuldført.\n', current_Kp); end 

Håndtering af Store Datamængder

Når man udfører mange simuleringer, kan de genererede data hurtigt blive meget store. Overvej følgende strategier:

  • Gem kun nødvendige data: Undgå at gemme hele tidsserier, hvis du kun har brug for specifikke værdier (f.eks. steady-state-værdi, overskud).
  • Brug effektive filformater: .mat-filer er generelt effektive til lagring af MATLAB-variable. For store datasæt kan formater som HDF5 overvejes.
  • Dataaggregering: Hvis du kun er interesseret i statistiske resultater (middelværdi, varians), kan du beregne disse direkte i løkken og kun gemme de aggregerede data.

Fejlhåndtering

Det er god praksis at inkludere fejlhåndtering i dine batch-scripts. Brug try-catch-blokke til at fange eventuelle fejl under simuleringen, logge fejlen og fortsætte med den næste simulering i stedet for at stoppe hele scriptet.

try [tout, xout, yout] = sim(modelName); % Gem resultater... catch ME fprintf('Fejl under simulering med Kp = %d: %s\n', current_Kp, ME.message); % Gem fejlinformation eller spring over denne simulering end 

Tabel: Sammenligning af Metoder til Parametervariation

MetodeBeskrivelseFordeleUlemper
Direkte set_paramÆndrer modelparametre direkte via set_param-kommandoen.Simpel, direkte kontrol over modelparametre.Kan være begrænset for komplekse parameterstrukturer.
Model WorkspaceBruger Simulink.Parameter objekter eller globale variabler i modellens workspace.Organiseret, god til komplekse parametre, nemmere at genbruge.Kræver indlæsning af modellen eller brug af specifikke API'er.
Configuration SetsBruger forskellige konfigurationssæt til forskellige simuleringer.Kraftfuld til at styre alle simuleringsindstillinger (solver, tid, etc.).Kan være mere kompleks at sætte op for simple parametervariationer.

Ofte Stillede Spørgsmål (FAQ)

Hvad er den bedste måde at gemme resultaterne af mange simuleringer på?

For en moderat mængde data er .mat-filer ofte den mest effektive. Hvis du har meget store datasæt eller har brug for at dele dem med andre programmer, kan HDF5 eller endda en SQL-database være bedre alternativer. Det er vigtigt at strukturere dine gemte data logisk, f.eks. ved at gemme hver simulering i en separat struktur eller ved at bruge filnavne, der indikerer parameterværdierne.

Hvordan kan jeg køre simuleringer uden at åbne Simulink-vinduet?

Du kan bruge sim-kommandoen direkte fra MATLAB. Hvis du vil undgå, at Simulink-modelvinduet dukker op, kan du bruge set_param(modelName, 'SimulationMode', 'accelerator') for at køre i accelereret tilstand, eller blot sørge for at lukke modellen med close_system(modelName) efter hver simulering.

Kan jeg bruge batch-simulering til at optimere parametre?

Ja, absolut. Batch-simulering er grundlaget for mange optimeringsalgoritmer. Du kan skrive et script, der iterativt justerer parametre baseret på resultaterne af tidligere simuleringer for at finde den optimale løsning.

Konklusion

At mestre batch-simulering i MATLAB åbner op for en verden af muligheder for automatisering og effektivisering af din simuleringsworkflow. Ved at udnytte de grundlæggende MATLAB-kommandoer som sim, open_system, close_system og set_param, kan du oprette robuste scripts, der håndterer komplekse simuleringsopgaver. Overvej avancerede teknikker som parallel computing og effektive datalagringsstrategier for at maksimere din produktivitet. Start med at implementere de grundlæggende principper, og byg gradvist mere sofistikerede batch-simuleringsværktøjer, der passer til dine specifikke behov.

Hvis du vil læse andre artikler, der ligner Simulink Batch-simulering i MATLAB, kan du besøge kategorien Software.

Go up