Ejecutar simulaciones de forma programática
Puede simular un modelo de forma programática de dos formas:
Con el comando
sim
.Con el botón Run.
Cuando realice simulaciones con el comando sim
, utilice la línea de comandos para realizar operaciones en su simulación. Realizar simulaciones con el botón Run implica que interactúa con la simulación utilizando la IU de Simulink® para realizar cualquier otra operación adicional. La siguiente tabla presenta las diferencias entre estos dos enfoques.
Acciones | Simulación no interactiva (simulación con el comando sim ) | Simulación interactiva (simulación con el botón Run) |
Nivel de interacción permitido | Bajo | Alto |
Iniciar una simulación | Comando sim | Run/set_param(mdl,'SimulationCommand','Start') |
Detener una simulación | Ctrl-C en la línea de comandos |
|
Poner en pausa una simulación | No | Sí. set_param(mdl,'SimulationCommand','Pause') / Pause |
Línea de comandos de MATLAB® disponible mientras se ejecuta la simulación | No | Sí |
Actualización de scopes mientras se ejecuta la simulación | Sí, excepto en el modo Rapid Accelerator | Sí |
Simulation Stepper | No | Sí, excepto en el modo Rapid Accelerator |
Pausas condicionales | No | Sí, excepto en el modo Rapid Accelerator |
¿Está disponible el valor del puerto mientras se ejecuta la simulación? | No | Sí |
Permite marcar la velocidad de la simulación | Sí | Sí |
Admite la opción TimeOut | Sí | No |
Tratamiento de errores | Excepción de MATLAB, a menos que el valor CaptureErrors esté activado | Se registra en el visor de diagnósticos |
Simulaciones con comando sim
Puede simular un modelo de forma programática con la función sim
utilizando las técnicas especificadas para indicar los valores de los parámetros. Además de simular un modelo, puede utilizar el comando sim
para activar el tiempo de espera de la simulación, capturar los errores y acceder a los metadatos de la simulación cuando se complete la simulación.
Especificar pares nombre-valor de los parámetros
Este ejemplo muestra cómo simular de forma programática un modelo, especificando los parámetros del modelo como pares nombre-valor.
Simule el modelo vdp
con los valores de los parámetros especificados como pares nombre-valor consecutivos.
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.
Puede simular el modelo en el modo Normal
, especificando una tolerancia absoluta para el error del solver. La función sim
devuelve SimOut
, un solo objeto Simulink.SimulationOutput
que contiene todas las salidas de la simulación: tiempo registrado, estados y señales.
Represente los valores de la señal de salida con respecto al tiempo.
x1 = (outputs.get('x1').Values); x2 = (outputs.get('x2').Values); plot(x1); hold on; plot(x2); title('VDP States') xlabel('Time'); legend('x1','x2')
Activar los tiempos de espera de la simulación
Si está ejecutando varias simulaciones en un lazo y utilizando un solver de paso variable, considere utilizar la función sim
con el parámetro timeout
. Si, por alguna razón, una simulación se detiene o ralentiza a unidades de tiempo sumamente pequeñas, se agotará el tiempo de espera. Luego se podrá ejecutar la siguiente simulación.
N = 100; simOut = repmat(Simulink.SimulationOutput, N, 1); for i = 1:N simOut(i) = sim('vdp', 'timeout', 1000); end
Capturar errores de simulación
Si un error provoca que se detenga su simulación, puede ver el error en los metadatos de la simulación. En este caso, la función sim
captura los datos de la simulación en el objeto de salida de la simulación hasta el momento en el que encuentra el error, permitiéndo depurar la simulación sin volver a ejecutarla. Para activar esta característica, utilice el parámetro CaptureErrors
con la función sim
.
Otra ventaja de este enfoque es que el error de simulación no provoca que la función sim
se detenga también. Por lo tanto, si está utilizando sim
en un lazo for
, por ejemplo, las siguientes iteraciones del lazo se ejecutarán de todas formas.
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]
Acceder a los metadatos de la simulación
Este ejemplo muestra cómo acceder a los metadatos de la simulación una vez que se haya completado. Puede ejecutar cualquier tipo de simulación y acceder a sus metadatos.
Este ejemplo simula el modelo con los valores de los parámetros especificados como pares nombre-valor. Ejecute la simulación.
simOut = sim('vdp','SimulationMode','normal','AbsTol','1e-5',... 'SaveState','on','StateSaveName','xoutNew',... 'SaveOutput','on','OutputSaveName','youtNew',... 'SaveFormat', 'StructureWithTime');
Acceda a la propiedad ModelInfo
, que tiene la información básica sobre el modelo y el solver.
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]
Inspeccione la información del solver.
simOut.getSimulationMetadata.ModelInfo.SolverInfo
ans = struct with fields: Type: 'Variable-Step' Solver: 'ode45' MaxStepSize: 0.4000
Revise la información sobre los tiempos de la simulación: tiempo de inicio y fin, y cuánto tardó en inicializarse, ejecutarse y terminar.
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
Añada notas a su simulación.
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: []
También puede añadir sus propios datos personalizados utilizando la propiedad UserData
.
Simulaciones con botón Run
Para una simulación interactiva, puede utilizar set_param
y get_param
. Con set_param
y get_param
, puede comprobar el estado de una simulación en ejecución y controlar cómo funciona utilizando los callbacks de bloques.
Controlar y comprobar el estado de una simulación
Este ejemplo muestra cómo utilizar set_param
para controlar el estado de su simulación. set_param
permite actualizar las variables de forma dinámica, así como escribir variables de registro de datos en el área de trabajo.
Inicie una simulación.
set_param('vdp','SimulationCommand','start')
Cuando inicia una simulación utilizando set_param
y el argumento 'start'
, debe utilizar el argumento 'stop'
para detenerla. Si no utiliza el argumento 'stop'
, la simulación solo se detendrá una vez que ha finalizado.
Pause, retome y detenga una simulación.
set_param('vdp','SimulationCommand','pause') set_param('vdp','SimulationCommand','continue') set_param('vdp','SimulationCommand','stop')
Cuando utiliza set_param
para poner en pausa o detener una simulación, la simulación no ejecuta los comandos inmediatamente. Puede utilizar set_param
para iniciar una simulación después del comando stop
y para retomar una simulación después del comando de pausa. Simulink completa primero el trabajo que no se puede interrumpir, como los pasos del solver y otros comandos que preceden al comando set_param
. A continuación, la simulación se inicia, se pausa, se retoma o se detiene según especifique el comando set_param
.
Compruebe el estado de una simulación.
get_param('vdp','SimulationStatus')
El software devuelve 'stopped'
, 'initializing'
, 'running'
, 'paused'
, 'compiled'
, 'updating'
, 'terminating'
o 'external'
(utilizados con el producto Simulink Coder™).
Para actualizar las variables modificadas del área de trabajo de forma dinámica mientras se está ejecutando una simulación, utilice el comando update
.
set_param('vdp','SimulationCommand','update')
Escriba todas las variables de registro de datos en el área de trabajo base.
set_param('vdp','SimulationCommand','WriteDataLogs')
Tareas de simulación automáticas utilizando callbacks
Un callback se ejecuta cuando realiza varias acciones en su modelo, como iniciar, pausar o detener una simulación. Puede utilizar callbacks para ejecutar un script de MATLAB u otros comandos de MATLAB. Para obtener más información, consulte Customize Model Behavior with Callbacks y Block Callbacks.
Este ejemplo muestra cómo utilizar el callback StartFcn
del modelo para ejecutar automáticamente código de MATLAB antes de que se inicie la simulación.
Escriba un script de MATLAB que encuentre bloques Scope en su modelo y los abra en primer plano cuando simula el modelo. Guarde el script en la carpeta actual.
% 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.
Establezca el parámetro StartFcn
para que el modelo llame al script openscopes
.
set_param('my_model','StartFcn','openscopes')
Consulte también
Simulink.SimulationOutput
| Simulink.SimulationMetadata
| getSimulationMetadata
| setUserString
| setUserData