主要内容

日志程序执行结果

方法生成的程序可以使用多种技术金宝app®编码器™软件可以将数据保存到mat文件中进行分析。生成的可执行文件可以在每个模型执行时间步骤保存系统状态、输出和仿真时间。数据被写入一个mat文件,命名为(默认)模型.mat,在那里模型是模型的名称。看到分析日志数据用于数据日志记录教程。

请注意

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

有关mat文件日志记录限制,请参阅配置参数MAT-file日志

分析日志数据

建立和配置模型

这个例子展示了如何通过复制模型生成数据slexAircraftExample是否记录到文件myAircraftExample.mat.指实时系统的构建过程工作流有关设置副本的说明slexAircraftExample作为myAircraftExample在一个工作文件夹中,如果你还没有这样做。

请注意

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

若要配置数据日志记录,请打开“配置参数”对话框并选择数据导入/导出窗格。该过程与配置Simulink模型以将输出保存到MATLAB相同金宝app®工作区。对于您定义和启用的每个工作区返回变量金宝app仿真软件编码器软件定义了一个并行的mat文件变量。例如,如果将模拟时间节省到变量吹捧,您生成的程序将相同的数据记录到一个名为rt_tout.您可以更改前缀rt_到后缀(_rt),或完全取消。您可以通过设置模型配置参数来做到这一点mat文件变量名修饰符

要在生成的代码中记录信号,请使用数据导入/导出模型配置参数如下所述或包括到文件到工作空间模型中的块。

请注意

用于代码生成的mat文件日志不支持信号日志。金宝app如果您启用mat文件和信号记录使用数据导入/导出在Simulink编辑器中,当您构建模型时,代码生成器会显示以下警告:金宝app

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

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

模拟过程中的数据记录

使用数据记录功能:

  1. 打开myAircraftExample如果它还没有打开,就进行建模。

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

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

  4. 设置参数格式结构随时间变化.选择此格式时,Simulink将以结构形式保存模型状态和输金宝app出,结构的名称在保存到工作区或文件区域。默认情况下,结构为xout对于州和为输出。用于保存输出的结构有两个顶级字段:时间而且信号.的时间字段包含模拟时间和向量信号包含一个子结构数组,每个子结构对应一个模型输出端口。

  5. 选择输出.这告诉Simulink金宝app在模拟过程中将输出信号数据保存为一个名为.选择输出允许代码生成器创建记录根输出块的代码(α,rad)到mat文件。

  6. 大量毁灭1

  7. 如果勾选了其他参数,请清空其他参数。

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

  9. 保存模型。

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

    结果范围显示

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

    谁你
    金宝app模型显示:

    名称大小字节类属性yout 1x1 10756 struct
  12. 验证α,rad通过绘制模拟时间与该变量的关系来记录。在命令窗口中输入:

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

    仿真输出图

从生成的代码记录数据

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

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

  1. 设定模型配置参数mat文件变量名修饰符_rt.这增加了后缀_rt在本例的第一部分中选择要记录的每个变量。

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

  3. 保存模型。

  4. 构建一个可执行文件。

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

    myAircraftExample !
  6. 程序现在生成两条消息行,表示mat文件已经被写入。

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

    负载myAircraftExample。你是谁

    金宝app模型显示:

    名称大小字节类属性yout 1x1 10756 struct yout_rt 1x1 10756 struct

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

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

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

    生成的代码输出的图形

    该图形应该与您在本示例的前一部分中生成的图形相同。

提示

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

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

数据导入/导出Pane使生成的程序能够在每个模型执行时间步骤保存系统状态、输出和仿真时间。数据被写入一个mat文件,命名为(默认)模型.mat

在使用此数据记录功能之前,您应该学习如何配置Simulink模型以将输出返回到MATLAB工作空间。金宝app这在导出仿真数据

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

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

  • 根输出端口块

    系统输出的默认mat文件变量名是rt_yout

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

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

    系统状态的默认mat文件变量名是rt_xout

  • 仿真时间

    模拟时间的默认mat文件变量名为rt_tout

重写默认的MAT-File变量名

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

覆盖默认的mat文件名或缓冲区大小

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

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

请注意

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

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

设置Make命令参数为make_rtw OPTS=

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

将编译器选项添加到工具选项表的C编译器行$(cflags) $(CVARSFLAG) $(CFLAGS_ADDITIONAL) -DSAVEFILE=myCodeLog。mat /Od /Oy-

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

optimsOffOpts = {'/c /Od'};optimsOnOpts = {'/c /O2'};cCompilerOpts = '$(cflags) $(CVARSFLAG) $(cflags_extra)';cppCompilerOpts = '$(cflags) $(CVARSFLAG) $(cppflags_extra)';myCompilerOpts = {' -DSAVEFILE=myCodeLog. myCompilerOpts = {'垫的};...

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

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

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

记录范围和到工作区块的数据

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

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

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

  • 到工作空间模型中的块

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

变量被写入model.mat中记录的变量工作空间的I / O窗格。

用To File块记录数据

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

请注意

Model块引用的模型不会在该上下文中执行数据记录,状态除外,您可以将其包含在顶级模型的状态记录中。生成的代码。金宝app仿真软件编码器参考模型的软件不会对mat文件执行数据日志记录。

单任务和多任务数据日志的区别

在单任务和多任务系统中记录数据时,您将注意到记录的差异

  • 非连续根输出块

  • 离散状态

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

看到单任务和多任务模型执行中的数据记录有关单任务和多任务数据记录之间差异的详细信息。

请注意

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

相关的话题