主要内容

记录程序执行结果

程序生成的多种技术可用金宝app®编码员™软件可以将数据保存到MAT文件中进行分析。生成的可执行文件可以在每个模型执行时间步保存系统状态、输出和模拟时间。数据将写入MAT文件,名为(默认情况下)模型.mat哪里模型是模型的名称。看到用于分析的日志数据有关数据记录教程。

请注意

数据日志记录仅对能够访问文件系统的系统目标文件可用。此外,只有RSim目标可执行文件能够访问MATLAB工作空间数据。

关于mat文件日志限制,请参见配置参数MAT-file日志

用于分析的日志数据

设置和配置模型

这个示例展示了如何通过模型的副本生成数据slexAircraftExample已记录到该文件myAircraftExample.mat.指建立实时系统的过程工作流有关设置的副本的说明,请参见slexAircraftExample作为myAircraftExample在工作文件夹中(如果尚未这样做)。

请注意

当您将代码生成器配置为在执行期间生成支持数据日志记录的代码时,代码生成器可以在日志文件中包含的块路径中包含块名称的文本。金宝app如果文本包含在模型的字符集编码中未表示的字符,代码生成器将用XML转义序列替换这些字符。例如,代码生成器取代了日本宽屏片假名信ア转义序列ア;.有关更多信息,请参见国际化和代码生成

若要配置数据日志记录,请打开“配置参数”对话框,选择数据导入/导出窗玻璃这个process is the same as configuring a Simulink model to save output to the MATLAB®工作区。对于定义和启用的每个工作区返回变量,金宝appSimulink编码器软件定义了一个并行的mat文件变量。例如,如果您为变量节省模拟时间吹捧,则生成的程序将相同的数据记录到一个名为rt_tout.您可以更改前缀rt_后缀(_rt),或者完全消除它。您可以通过设置模型配置参数来实现这一点MAT文件变量名修改器

金宝appSimulink允许您记录模型中任何位置的信号数据。在Simulink编辑器中,选择要记录的信号,然后在仿真数据检查下拉按钮,选择记录所选信号. 但是,代码生成器不使用这种在生成的代码中记录信号的方法。要在生成的代码中记录信号,请使用数据导入/导出参数描述如下或包括归档工作空间块在您的模型中。

请注意

如果您启用mat文件和信号记录(通过数据导入/导出窗格),并选择用于日志记录的信号(通过Simulink编辑器),当你构建模型时,你会看到以下警告:金宝app

警告:mat文件日志不支持信号日志。金宝app当你的模型代码执行时,信号日志变量'rt_logsout'将不会被保存到mat文件中。
要避免此警告,请清除模型配置参数信号记录

在本例中,修改myAircraftExample使生成的程序节省仿真时间和系统输出到文件myAircraftExample.mat.然后将数据加载到基本工作区,并根据其中一个输出绘制模拟时间。的myAircraftExample应按照中所述配置模型建立实时系统的过程工作流

模拟过程中的数据记录

要使用数据记录功能,请执行以下操作:

  1. 打开myAircraftExample如果尚未打开,则进行建模。

  2. 打开“配置参数”对话框。

  3. 选择数据导入/导出窗玻璃这个数据导入/导出窗格允许您指定将哪些输出数据保存到工作区,以及为其使用什么变量名。

  4. 设置参数格式结构随着时间的推移.当您选择这种格式时,Simulink将模型状态和输出保存在金宝app结构中,这些结构的名称在保存到工作区或文件地区默认情况下,结构是xout对州和为输出。用于保存输出的结构有两个顶级字段:时间信号.的时间字段包含模拟时间和的向量信号包含一个子结构数组,每个子结构对应一个模型输出端口。

  5. 选择输出。这告诉Simulink在金宝app模拟期间将输出信号数据保存为名为.选择输出允许代码生成器创建记录根Output块的代码(阿尔法,拉德)到一个垫子文件。

  6. 大量毁灭1

  7. 如果已勾选其他参数,请清除。下图显示了对话框的外观。

  8. 点击应用好吧注册更改并关闭对话框。

  9. 保存模型。

  10. 在模型窗口中,双击飞行器动力学模型块旁边的范围符号,然后模拟模型。结果显示的作用域如下所示。

  11. 验证模拟时间和输出已保存到mat文件中的基本工作空间。在MATLAB提示符下,输入:

    谁你
    金宝app模型显示:

    yout 1x1 10756 struct . Name Size Bytes Class Attributes yout 1x1 10756 struct . Name Size Bytes
  12. 核实阿尔法,拉德通过绘制模拟时间与该变量的关系来记录。在命令窗口中,键入:

    情节(yout.time yout.signals.values)

    结果图如下所示。

从生成的代码记录数据

在本例的第二部分中,您构建并运行由模型的代码生成器构建的可执行程序myAircraftExample.程序输出一个mat文件,其中包含您前面检查过的模拟时间和输出。即使您已经为myAircraftExample模型,现在必须重新生成该代码,因为您已经通过启用数据日志对模型进行了更改。下面的步骤解释了这个过程。

为了避免使用来自模拟运行的数据覆盖工作区数据,代码生成器修改Simulink记录的变量的标识符。金宝app您可以控制这些修改。

  1. 设定模型组态参数MAT文件变量名修改器_rt.这就添加了后缀_rt到您在本示例的第一部分中选择要记录的每个变量。

  2. 点击应用好吧注册更改并关闭对话框。

  3. 保存模型。

  4. 构建一个可执行的。

  5. 当构建结束时,使用以下命令运行可执行程序:

    !myAircraftExample
  6. 程序现在产生两行消息,表明mat文件已经写入。

    **启动模型** ** created myAircraftExample。垫* *
  7. 加载可执行文件创建的mat文件数据,并通过输入以下命令查看模拟和生成的程序的工作区变量:

    负载myAircraftExample。垫谁你*

    金宝app模型显示:

    名称大小字节类属性yout 1x1 10756结构yout\u rt 1x1 10756结构

    注意,模拟运行和生成的代码产生的结构的大小和字节是相同的。

  8. 在命令窗口中输入以下命令,绘制生成的代码输出:

    绘图(实时时间、实时信号值)

    绘图应与本示例上一部分中生成的绘图相同。

提示

对于UNIX®平台,在命令窗口中使用以下语法运行可执行程序!。/executable_name。如果首选,请使用以下语法从操作系统外壳运行可执行程序./executable_name.有关更多信息,请参见运行外部命令、脚本和程序

配置状态、时间和输出日志记录

数据导入/导出窗格允许生成的程序在每个模型执行时间步骤中保存系统状态、输出和模拟时间。数据被写入一个mat文件,名为(默认)模型.mat

在使用此数据日志特性之前,您应该了解如何配置Simulink模型以将输出返回到MATLAB工作空间。金宝app这在出口仿真数据

对于您定义和启用的每个工作空间返回变量,代码生成器定义了一个MAT文件变量。例如,如果模型将模拟时间保存到工作空间变量吹捧,生成的程序将相同的数据记录到名为的变量(默认情况下)rt_tout

代码生成器生成的代码记录了以下数据:

  • 根外港块

    系统输出的默认MAT文件变量名为rt_yout

    排序的顺序rt_yout数组基于输出端口块的端口号,从1开始。

  • 模型中的连续和离散状态

    系统状态的默认MAT-file变量名是rt_xout

  • 仿真时间

    模拟时间的默认MAT-file变量名是rt_tout

覆盖默认的MAT-File变量名

默认情况下,代码生成器以文本为前缀rt_输入系统输出、状态和模拟时间的变量名,以形成MAT文件变量名。要更改模型的此前缀,请设置模型配置参数MAT文件变量名修改器(rt_),后缀(_rt),或没有修饰词(没有一个)。其他系统目标文件可能不支持此参数。金宝app

覆盖默认的MAT-File Name或Buffer Size

你可以在生成的代码中指定编译器选项来覆盖以下MAT-file属性:

MAT-File属性 默认的 编译器选项
的名字 模型.mat -DSAVEFILE =文件名
数据日志缓冲区的大小 1024个字节 -DDEFAULT\u缓冲区大小=n

请注意

有效的选项语法可能因编译器而异。例如微软®Visual c++®编译器通常会接受/ DSAVEFILE =文件名以及-DSAVEFILE =文件名

对于基于模板生成文件(TMF)的目标,设置模型配置参数使命令到编译器选项。例如:

对于基于工具链的系统目标文件,如GRT或ERT,将编译器选项添加到模型配置中。设置参数构建配置指定,并将编译器选项添加到C编译器工具/选择权表3.例如:

要将编译器选项添加到自定义工具链,可以使用示例中所示的过程修改并重新注册自定义工具链添加自定义工具链到MATLAB®Coder™构建过程.例如,要将编译器选项添加到用于自定义工具链的MATLAB源文件中,您可以定义myCompilerOpts如下:

optimsOffOpts={'/c/Od'};optimsOnOpts={'/c/O2'};cCompilerOpts=“$(cflags)$(CVARSFLAG)$(cflags_附加)”;cppCompilerOpts=“$(cflags)$(CVARSFLAG)$(CppsFlags_附加)”;myCompilerOpts = {' -DSAVEFILE= mydelog。垫的};...

然后你可以添加myCompilerOpts到它所应用的每个配置和编译器的标志,例如:

cfg = tc。getBuildConfiguration(“加快构建”);cfg。setOption (C编译器,horzcat (cCompilerOpts,myCompilerOptsoptimsOffOpts));

所示添加自定义工具链到MATLAB®Coder™构建过程,在修改自定义工具链之后,将配置保存到mat文件并刷新目标注册表。

使用作用域和工作区块记录数据

代码生成器生成的代码也会记录来自以下来源的数据:

  • 具有block参数的作用域块将数据记录到工作区启用

    必须在每个Scope块的对话框中指定变量名和数据格式。

  • 工作空间模型中的块

    必须在每个To工作区块的对话框中指定变量名和数据格式。

变量被写入到模型垫,以及从工作空间的I / O窗格。

使用To File块记录数据

您还可以将数据记录到to文件块。生成的程序创建一个单独的MAT文件(不同于模型垫)为每一个归档块在模型中。该文件包含块时间和输入变量。必须在“文件”块对话框中指定文件名、变量名、抽取和采样时间。

请注意

Model块引用的模型在该上下文中不执行数据日志记录,除了状态,您可以在顶级模型的日志记录中包含状态。由金宝appSimulink编码器参考模型的软件不将数据记录到MAT文件。

单任务和多任务之间的数据记录差异

在单任务和多任务系统中记录数据时,您会注意到

  • 非连续根输出端口块

  • 离散状态

在多任务模式下,状态和输出的日志记录是在第一次任务执行之后完成的(而不是在第一次步骤结束时)。在单任务模式下,构建过程生成的代码在第一个时间步骤之后记录状态和输出。

看到单任务和多任务模型执行中的数据记录有关单任务和多任务数据日志记录之间的差异的更多细节。

请注意

快速模拟目标(RSim)提供了增强的日志记录选项。看见利用RSim系统目标文件在上位机上对混合动态系统进行加速、优化和测试了解更多信息。

相关的话题