以编程方式运行仿真

可以通过两种方法以编程方式仿真模型:

  • 通过 sim 命令。

  • 通过运行按钮

        使用 sim 命令执行仿真时,可以使用命令行对仿真执行操作。使用运行按钮执行仿真意味着您可以使用 Simulink® UI 与仿真进行交互,以执行任何其他操作。下表详细说明了这两种方法之间的差异。

操作非交互式仿真sim 命令仿真)交互式仿真(“运行”按钮仿真)
允许的交互级别高/set_param(mdl,'SimulationCommand','Start')
开始仿真。sim 命令Run
停止仿真在命令行中执行 Ctrl-C

set_param(mdl,'SimulationCommand','Stop')/ Stop

暂停仿真是。set_param(mdl,'SimulationCommand','Pause') / 暂停
当仿真运行时,MATLAB® 提示符可用
仿真运行时示波器更新是,但在快速加速模式下除外
仿真步进器是,但在快速加速模式下除外
条件暂停是,但在快速加速模式下除外
仿真运行时端口值显示可用?
支持仿真调速
支持 TimeOut 选项
错误处理MATLAB 异常,除非 CaptureErrors 为 on向诊断查看器报告

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.DatasetPackage: Simulink.SimulationDataCharacteristics:Name: 'yout'Total Elements: 2Elements: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 函数返回 SimOut,它是一个 Simulink.SimulationOutput 对象,其中包含所有的仿真输出(记录的时间、状态和信号)。

        绘制输出信号值对时间的图。

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:NsimOut(i) = sim('vdp', 'timeout', 1000);
end
捕获仿真错误

        如果发生错误导致仿真停止,您可以在仿真元数据中查看错误。在这种情况下,sim 会在仿真输出对象中捕获遇到错误之前的仿真数据,以便您对仿真进行某些调试,而不用重新运行仿真。要启用此功能,请使用 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: 0StopTime: 20SolverInfo: [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.1830ExecutionElapsedWallTime: 1.0000e-03TerminationElapsedWallTime: 0.0030TotalElapsedWallTime: 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 命令后开始仿真以及在暂停命令后继续进行仿真。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 命令。。

        此示例说明如何使用模型 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')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32G474之DAC

STM32G474分别使用CORDIC硬件和“math.h”的正弦值,从DAC1和DAC2输出。 1、DAC特点 PA4的附加功能为DAC1_OUT1,无需映射,直接将它配置为模拟功能,就可以使用了。 PA6的附加功能为DAC2_OUT1,无需映射,直接将…

使用PyTorch Lightning力量精简空间分析

大家好,随着人工智能热潮的全面兴起,PyTorch Lightning库正在获得越来越多的关注。其特别突出的地方在于简化复杂的机器学习操作,即使对于非开发者也是如此。深度学习和部分机器学习中的许多挑战性方面,如多GPU训练和实验跟踪&…

物料主数据的分类及编码规则概述

物料主数据分布在设计、工艺、生产、采购、销售、存储、物流过程中的多个业务部门中,类型繁杂且不易于管理,必须对于物料主数据进行分类管理。 本文将从物料主数据的分类原则、编码样例、编码规范以及编码设计等方面进行详细介绍,帮助企业更…

STM32高级定时器生成互补PWM的原理与代码实现

文章目录 前言一 CubeMx配置1.1 TIM1 Mode and Configuration1.2 Paramter Settings 二 程序代码三 仿真分析总结 前言 互补 PWM(Complementary PWM)是指一对逻辑状态互为反相的 PWM(脉冲宽度调制)信号。这种信号配置常见于电机控…

数字人实战第三天——wav2lip部署教程

wav2lip数字人 一、wav2lip简介 Wav2Lip 是一种通过将音频与视频中的嘴唇动作同步的技术,旨在生成与音频内容高度匹配的口型动画。其主要应用是让视频中的人物嘴唇动作与配音或其他音频输入精确同步,这在电影配音、虚拟主持人、在线教学、影视后期处理等…

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜…

如何快速练习键盘盲打

盲打是指在不看键盘的情况下进行打字,这样可以显著提高打字速度和效率。以下是一些练习盲打的方法: 熟悉键盘布局:首先,你需要熟悉键盘上的字母和符号的位置。可以通过键盘图或者键盘贴纸来帮助记忆。 使用在线打字练习工具&…

CSS —— display属性

用于指定一个元素在页面中的显示方式 HTML中标签元素大体被分为三种类型:块元素、行内元素和行内块元素 块元素 :block 1.独占一行 2.水平方向,占满它父元素的可用空间(宽度是父级的100%) 3.垂直方向,占据的…

Idea 创建 Maven项目的时候卡死

文章目录 一、Archetype 和 Catalog1.1 Archetype(原型)1.2 Catalog(目录) 二、可能遇到的问题2.1 问题描述2.2 原因分析2.3 解决方案 参考资料 一、Archetype 和 Catalog 1.1 Archetype(原型) Archetype…

【自考zt】【软件工程】【21.10】

关键字: 软件需求基本性质、软件系统需求挑战、耦合(高内容,低无直接)、内聚(初始化时间)、uml包、rup边界类、测试首要目标、单元测试最后工作、性能需求 软件开发本质、软件需求规约三种风格、提炼、用…

比较差异 图片 视频

目录 两张图片像素差: 深度图和rgb图对齐 视频比较差异: 拼接2: 两张图片像素差: diffnp.clip(np.abs( img_mask.astype(np.int16))-img.astype(np.int16), 0, 255).astype(np.uint8) 深度图和rgb图对齐 # -*- coding: utf-…

9.7(QT.Day 1)

一、自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面 要求&#xff1a;每行代码都有注释 【需要用到的图片或者动图&#xff0c;自己去网上找】 1.mywidget.h代码 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QIcon> //图…

2024全国大学省数学建模竞赛A题-原创参考论文(部分+第一问代码)

一问题重述 1.1 问题背景 "板凳龙"&#xff0c;又称"盘龙"&#xff0c;是浙闽地区的传统地方民俗文化活动。这种独特的表演艺术形式融合了中国传统龙舞的精髓和地方特色&#xff0c;展现了人们对美好生活的向往和对传统文化的传承。 在板凳龙表演中&am…

为elementui的el-date-picker时间选择器添加快捷选项

1、效果图 2、实现方法 直接在elementui的时间选择器上修改&#xff0c;添加shorcuts选项&#xff0c;但是样式要自己修改。 有几个注意点&#xff1a; 1&#xff09;如图我是选中后有显示背景颜色的&#xff0c;也就意味着要给选中的选项添加类名&#xff0c;elementui没有…

一. 从Hive开始

1. 怎么理解Hive Hive不能理解成一个传统意义上的数据库&#xff0c;应该理解成一个解决方案。 是Hadoop在hdfs和mapreduce之后才出现的一个结构化数据处理的解决方案。 Hdfs解决了大数据的存储问题&#xff0c;mapreduce解决了数据的计算问题。 一切似乎很美好。 但是使用成本…

微信小程序页面制作——个人信息

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

探索fastFM:Python中的高效推荐系统库

文章目录 &#x1f680; 探索fastFM&#xff1a;Python中的高效推荐系统库背景&#xff1a;为何选择fastFM&#xff1f;快照&#xff1a;fastFM是什么&#xff1f;安装指南&#xff1a;如何将fastFM加入你的项目&#xff1f;快速入门&#xff1a;五个基础函数的使用实战演练&am…

PWA(Progressive Web App,渐进式网络应用)

PWA&#xff08;Progressive Web App&#xff0c;渐进式网络应用&#xff09;是一种结合了 Web 和原生应用程序最佳特性的现代 Web 应用程序开发方法。PWA 旨在提供类似原生应用的用户体验&#xff0c;同时保持 Web 应用的灵活性和可访问性。 PWA 的主要特性&#xff1a; 渐进…

【音视频】播放音视频时发生了什么? 视频的编解码 H264是什么? MP4是什么?

目录 ✨播放一个视频的流程✨为什么要编码&#xff08;压缩&#xff09;视频数据&#xff1f;✨如何编码&#xff08;压缩&#xff09;数据&#x1f384;简单的例子&#x1f384;音视频编码方式&#x1f384;视频编码格式H264编码是什么&#xff1f;发展历程&#xff1f;H.264基…

ES6+ 特性,箭头函数、解构赋值、模块导入

1. 箭头函数&#xff08;Arrow Functions&#xff09; 箭头函数是 ES6 引入的一种简洁的函数定义方式。它的语法更简洁&#xff0c;并且不会绑定自己的 this 值。箭头函数通常用于简化函数表达式。 基本语法&#xff1a; const add (a, b) > a b;特点&#xff1a; 简洁…