27/01/2022
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.

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:
- 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).
- Loop over scenarier: Brug en
for-løkke til at iterere gennem de forskellige scenarier eller parameterværdier, du vil teste. - Konfiguration af modellen: Inden for løkken skal du bruge
set_paramtil at opdatere de relevante parametre i din Simulink-model. Dette kan være alt fra gevinstværdier i en PID-regulator til inputdata. - Kørsel af simulering: Brug
sim-kommandoen til at køre simuleringen med de opdaterede parametre. Du kan også specificere outputtet frasim-kommandoen, hvilket ofte er en struktur, der indeholder tidsvektoren og de simulerede signaler. - 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).
- 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.

% 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
| Metode | Beskrivelse | Fordele | Ulemper |
|---|---|---|---|
Direkte set_param | Ændrer modelparametre direkte via set_param-kommandoen. | Simpel, direkte kontrol over modelparametre. | Kan være begrænset for komplekse parameterstrukturer. |
| Model Workspace | Bruger 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 Sets | Bruger 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.
