이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
프로그래밍 방식으로 시뮬레이션 실행하기
다음 두 방법을 사용하여 모델을 프로그래밍 방식으로 시뮬레이션할 수 있습니다.
sim
명령을 통해실행 버튼을 통해
sim
명령으로 시뮬레이션을 수행할 때는 명령줄을 사용하여 시뮬레이션 작업을 수행합니다. 실행 버튼으로 시뮬레이션을 수행하면 Simulink® UI를 사용하여 다른 추가 작업도 수행할 수 있습니다. 다음 표는 이러한 두 가지 접근 방식의 차이를 자세히 설명합니다.
동작 | 비대화형 방식 시뮬레이션(sim 명령 시뮬레이션) | 대화형 방식 시뮬레이션(실행 버튼 시뮬레이션) |
허용되는 상호 작용 수준 | 낮음 | 높음 |
시뮬레이션 시작 | sim 명령 | 실행/set_param(mdl,'SimulationCommand','Start') |
시뮬레이션 중지 | 명령줄에서 Ctrl+C |
|
시뮬레이션 일시 중지 | 아니요 | 예. set_param(mdl,'SimulationCommand','Pause') / 일시 중지 |
시뮬레이션 실행 중에 MATLAB® 프롬프트 사용 가능 여부 | 아니요 | 예 |
시뮬레이션 실행 중에 스코프 업데이트 | 예, 고속 액셀러레이터 모드에서는 제외 | 예 |
시뮬레이션 스텝 지정기 | 아니요 | 예, 고속 액셀러레이터 모드에서는 제외 |
조건부 일시 중지 | 아니요 | 예, 고속 액셀러레이터 모드에서는 제외 |
시뮬레이션 실행 중에 포트 값 표시 여부 | 아니요 | 예 |
시뮬레이션 속도 조절 지원 | 예 | 예 |
TimeOut 옵션 지원 | 예 | 아니요 |
오류 처리 | MATLAB 예외(CaptureErrors 가 켜져 있지 않은 한) | 진단 뷰어에 보고됨 |
sim
명령 시뮬레이션
파라미터 값을 지정하기 위해 특정 기법으로 sim
함수를 사용하여 모델을 프로그래밍 방식으로 시뮬레이션할 수 있습니다. 모델 시뮬레이션 외에 sim
명령을 사용하여 시뮬레이션 제한 시간을 활성화하고 시뮬레이션 오류를 캡처하며 시뮬레이션이 완료될 때 시뮬레이션 메타데이터에 액세스할 수 있습니다.
파라미터 이름-값 쌍 지정하기
이 예제에서는 이름-값 쌍으로 모델 파라미터를 지정하여 프로그래밍 방식으로 모델을 시뮬레이션하는 방법을 보여줍니다.
연속된 이름-값 쌍으로 지정된 파라미터 값을 사용하여 vdp
모델을 시뮬레이션합니다.
simOut = sim('vdp','SimulationMode','normal',... 'SaveState','on','StateSaveName','xout',... 'SaveOutput','on','OutputSaveName','yout',... 'SaveFormat', 'Dataset'); outputs = simOut.yout
outputs = Simulink.SimulationData.Dataset Package: Simulink.SimulationData Characteristics: Name: 'yout' Total Elements: 2 Elements: 1 : 'x1' 2 : 'x2' -Use get or getElement to access elements by index or name. -Use addElement or setElement to add or modify elements.
솔버 오류에 맞는 절대 허용오차를 지정하여 Normal
모드로 모델을 시뮬레이션합니다. sim
함수는 단일 Simulink.SimulationOutput
객체인 SimOut
을 반환합니다. 이 객체는 기록된 시간, 상태, 신호와 같은 시뮬레이션 출력값을 모두 포함합니다.
시간에 대해 출력 신호 값을 플로팅합니다.
x1 = (outputs.get('x1').Values); x2 = (outputs.get('x2').Values); plot(x1); hold on; plot(x2); title('VDP States') xlabel('Time'); legend('x1','x2')
시뮬레이션 제한 시간 활성화하기
루프에서 여러 시뮬레이션을 실행 중이고 가변 스텝 솔버를 사용 중인 경우 sim
을 timeout
파라미터와 함께 사용해 보십시오. 여러 이유로 시뮬레이션이 중단되거나 예기치 않게 작은 시간 스텝을 수행하기 시작한다면 제한 시간 후에 자동으로 중단됩니다. 그런 다음, 다음 시뮬레이션을 실행할 수 있습니다.
N = 100; simOut = repmat(Simulink.SimulationOutput, N, 1); for i = 1:N simOut(i) = sim('vdp', 'timeout', 1000); end
시뮬레이션 오류 캡처하기
오류로 인해 시뮬레이션이 중지되면 시뮬레이션 메타데이터에서 오류를 확인할 수 있습니다. 이 경우 sim
은 오류가 발생할 때까지 시뮬레이션 데이터를 simulation output 객체에 캡처하므로, 사용자는 시뮬레이션을 다시 실행하지 않고도 시뮬레이션에 대해 일부 디버그를 수행할 수 있습니다. 이 기능을 활성화하려면 sim
함수와 함께 CaptureErrors
파라미터를 사용하십시오.
이러한 접근 방식의 또 다른 장점은 시뮬레이션 오류로 인해 sim
도 중지되지 않는다는 것입니다. 따라서, 예를 들어 for
루프에서 sim
을 사용하고 있다면 이후의 루프 반복은 계속 실행됩니다.
simOut = sim('my_model', 'CaptureErrors', 'on'); simOut.getSimulationMetadata.ExecutionInfo
ans = struct with fields: StopEvent: 'DiagnosticError' StopEventSource: [] StopEventDescription: 'Division by zero in 'my_model/Divide'' ErrorDiagnostic: [1×1 struct] WarningDiagnostics: [0×1 struct]
시뮬레이션 메타데이터에 액세스하기
이 예제에서는 시뮬레이션이 완료된 후 시뮬레이션 메타데이터에 액세스하는 방법을 보여줍니다. 모든 종류의 시뮬레이션을 실행하고 시뮬레이션 메타데이터에 액세스할 수 있습니다.
이 예제에서는 이름-값 쌍으로 지정된 파라미터 값을 사용하여 모델을 시뮬레이션합니다. 시뮬레이션을 실행합니다.
simOut = sim('vdp','SimulationMode','normal','AbsTol','1e-5',... 'SaveState','on','StateSaveName','xoutNew',... 'SaveOutput','on','OutputSaveName','youtNew',... 'SaveFormat', 'StructureWithTime');
모델과 솔버에 대한 기본 정보를 포함하고 있는 ModelInfo
속성에 액세스합니다.
simOut.getSimulationMetadata.ModelInfo
ans = struct with fields: ModelName: 'vdp' ModelVersion: '1.6' ModelFilePath: 'C:\MyWork' UserID: 'User' MachineName: 'MyMachine' Platform: 'PCWIN64' ModelStructuralChecksum: [4×1 uint32] SimulationMode: 'normal' StartTime: 0 StopTime: 20 SolverInfo: [1×1 struct] SimulinkVersion: [1×1 struct] LoggingInfo: [1×1 struct]
솔버 정보를 검사합니다.
simOut.getSimulationMetadata.ModelInfo.SolverInfo
ans = struct with fields: Type: 'Variable-Step' Solver: 'ode45' MaxStepSize: 0.4000
시뮬레이션의 시작과 완료 시간, 시뮬레이션이 초기화된 시간, 실행된 시간, 중단된 시간과 같은 시뮬레이션의 시간 정보를 검토합니다.
simOut.getSimulationMetadata.TimingInfo
ans = struct with fields: WallClockTimestampStart: '2016-06-17 10:26:58.433686' WallClockTimestampStop: '2016-06-17 10:26:58.620687' InitializationElapsedWallTime: 0.1830 ExecutionElapsedWallTime: 1.0000e-03 TerminationElapsedWallTime: 0.0030 TotalElapsedWallTime: 0.1870
시뮬레이션에 참고 사항을 추가합니다.
simOut=simOut.setUserString('Results from simulation 1 of 10');
simOut.getSimulationMetadata
ans = SimulationMetadata with properties: ModelInfo: [1×1 struct] TimingInfo: [1×1 struct] ExecutionInfo: [1×1 struct] UserString: 'Results from simulation 1 of 10' UserData: []
UserData
속성을 사용하여 사용자 지정 데이터를 추가할 수도 있습니다.
실행 버튼 시뮬레이션
대화형 방식의 시뮬레이션의 경우 set_param
과 get_param
을 사용할 수 있습니다. set_param
과 get_param
을 사용하면 실행 중인 시뮬레이션의 상태를 검사하고 블록 콜백을 사용하여 시뮬레이션이 작동하는 방식을 제어할 수 있습니다.
시뮬레이션 상태 제어 및 검사하기
이 예제에서는 set_param
을 사용하여 시뮬레이션 상태를 제어하는 방법을 보여줍니다. set_param
을 사용하면 변수를 동적으로 업데이트할 수 있고 작업 공간에 데이터 기록 변수를 쓸 수 있습니다.
시뮬레이션을 시작합니다.
set_param('vdp','SimulationCommand','start')
set_param
과 'start'
인수를 사용하여 시뮬레이션을 시작하는 경우 시뮬레이션을 중지하려면 'stop'
인수를 사용해야 합니다. 'stop'
인수를 사용하지 않으면 시뮬레이션이 끝날 때 한 번만 중지합니다.
시뮬레이션을 일시 중지하고 계속한 다음 중지합니다.
set_param('vdp','SimulationCommand','pause') set_param('vdp','SimulationCommand','continue') set_param('vdp','SimulationCommand','stop')
set_param
을 사용하여 시뮬레이션을 일시 중지하거나 중지하면 시뮬레이션이 즉시 명령을 실행하지 않습니다. set_param
을 사용하여 stop
명령 후에 시뮬레이션을 시작할 수 있고, pause 명령 후에 시뮬레이션을 계속할 수 있습니다. Simulink는 set_param
명령보다 앞서 실행된 솔버 스텝과 여러 다른 명령 등의 중단될 수 없는 작업을 먼저 완료합니다. 그런 다음, set_param
명령이 지정하는 대로 시뮬레이션이 시작, 일시 중지, 계속 또는 중지됩니다.
시뮬레이션 상태를 검사합니다.
get_param('vdp','SimulationStatus')
'stopped'
, 'initializing'
, 'running'
, 'paused'
, 'compiled'
, 'updating'
, 'terminating'
또는 'external'
(Simulink Coder™ 제품과 함께 사용됨)이 반환됩니다.
시뮬레이션이 실행되는 동안 변경된 작업 공간 변수를 동적으로 업데이트하기 위해 update
명령을 사용합니다.
set_param('vdp','SimulationCommand','update')
모든 데이터 기록 변수를 기본 작업 공간에 씁니다.
set_param('vdp','SimulationCommand','WriteDataLogs')
콜백을 사용하여 시뮬레이션 작업 자동화하기
콜백은 모델에서 다양한 동작(예: 시뮬레이션 시작, 일시 중지, 중지)을 수행할 때 실행됩니다. 콜백을 사용하여 MATLAB 스크립트 또는 다른 MATLAB 명령을 실행할 수 있습니다. 자세한 내용은 콜백으로 모델 동작 사용자 지정하기 및 Block Callbacks 항목을 참조하십시오.
이 예제에서는 시뮬레이션이 시작되기 전에 모델의 StartFcn
콜백을 사용하여 자동으로 MATLAB 코드를 실행하는 방법을 보여줍니다.
모델을 시뮬레이션할 때 모델에서 Scope 블록을 찾아 전경에서 여는 MATLAB 스크립트를 씁니다. 현재 폴더에 스크립트를 저장합니다.
% openscopes.m % Brings scopes to forefront at beginning of simulation. blocks = find_system(bdroot,'BlockType','Scope'); % Finds all of the scope blocks in the top level of your % model. To find scopes in subsystems, provide the subsystem % names. Type help find_system for more on this command. for i = 1:length(blocks) set_param(blocks{i},'Open','on') end % Loops through all of the scope blocks and brings them % to the forefront.
모델의 StartFcn
파라미터를 설정하여 openscopes
스크립트를 호출합니다.
set_param('my_model','StartFcn','openscopes')
참고 항목
Simulink.SimulationOutput
| Simulink.SimulationMetadata
| getSimulationMetadata
| setUserString
| setUserData