主要内容

仿真与代码比较

方法生成的代码计算出的答案如何验证slexAircraftExample模型。它展示了如何捕获和比较两组输出数据。模拟模型产生一组输出数据。执行生成的代码将生成第二组输出数据。

请注意

要获得模型输出和生成代码之间的有效比较,请使用相同的方法解算器的选择而且步长用于模拟运行和构建过程。

配置测井信号数据

配置用于记录和记录信号数据的模型。

  1. 确保slexAircraftExample是关闭的。清除基本工作空间以消除以前模拟运行的结果。在命令窗口中输入:

    清晰的

    清除操作清除在以前的模拟过程中创建的变量和所有工作空间变量,其中一些是标准变量slexAircraftExample模型需要。

  2. 要打开模型,在命令窗口中输入:

    openExample (“slexAircraftExample”

  3. 在模型窗口中,选择文件>另存为,导航到工作文件夹,并保存slexAircraftExample模型myAircraftExample

  4. 设置你的模型来记录信号的信号数据:坚持α,rad,q, rad /秒.对于每个信号:

    1. 右击该信号。从上下文菜单中选择属性

    2. 在“信号属性”对话框中,选择测井信号数据

    3. 日志的名字节中,从下拉列表中选择自定义

    4. 在文本框中,输入对应信号的日志名称。

      信号的名字 日志的名字
      坚持 Stick_input
      α,rad α
      q, rad /秒 Pitch_rate

    5. 点击应用而且好吧

    有关更多信息,请参见使用信号日志导出信号数据

  5. 在“配置参数”对话框中:

    1. 类型固定步

    2. 格式结构随时间变化

    3. 清除复选框。

    4. 选择信号记录复选框。

    5. 选择在模拟数据检查器中记录已记录的工作空间数据复选框。

  6. 保存模型。

继续日志模拟数据

日志模拟数据

运行仿真,记录信号数据,并在仿真数据检查器中查看数据。

  1. 运行模型。当仿真完成后,在Simulink上金宝app®编辑器工具栏,模拟数据检查器按钮将高亮显示,以指示在“仿真数据检查器”中有新的仿真输出。

  2. 单击模拟数据检查器按钮打开模拟数据检查器。

  3. 将信号分组:

    1. 可视化选项卡上,单击组信号

    2. 在“组信号”对话框中,选择数据层次结构然后列表。

    3. 点击好吧

  4. 单击logsout扩展器查看已记录的信号。

  5. 单击格式选项卡。

  6. 单击次要情节按钮并选择3 x1来展示三个次要情节。

  7. 对于每个信号:

    1. 单击顶部的子图。蓝色边框表示地块选择。

    2. 属性旁边的复选框α信号的名字。信号数据显示在子图中。

    3. 画出Pitch_rate信号在中间的子图。

    4. 画出Stick_input信号在底部的子图。

继续运行可执行文件并加载数据

运行可执行文件并加载数据

必须重新构建并运行myAircraftExample可执行文件以获取有效的数据文件,因为您已经修改了模型。

  1. 在“配置参数”对话框中,设置mat文件变量名修饰符参数rt_rt_在本示例的第一部分中为登录选择的每个变量都加上前缀。

  2. 点击应用而且好吧

  3. 保存模型。

  4. 上生成代码C代码选项卡上,单击构建按钮。

  5. 构建完成后,从命令窗口运行独立程序。

    myAircraftExample !

    执行程序将下列消息写入命令窗口。

    **启动模型** **创建myAircraftExample。垫* *
  6. 加载数据文件myAircraftExample.mat

    负载myAircraftExample

提示

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

继续可视化和比较结果

可视化和比较结果

当你按照开始的例子序列配置测井信号数据,您可以从模型的Simulink运行和由模型生成的金宝app程序的运行中获取数据。

  1. 的执行输出α,rad,将数据导入模拟数据检查器。

    1. 在模拟数据检查器上可视化选项卡,单击进口按钮,打开导入对话框。

    2. 指定进口的作为基本工作空间

    3. 指定导入作为新运行

    4. 在的左边信号的名字,单击复选框,清除复选框。

    5. 属性的复选框α,rad的数据时间序列根rt_yout

    6. 点击进口

    所选数据现在在下面执行2:importted_data

  2. 查看已执行数据图。

    1. 单击rt_yout扩展器。

    2. 单击顶部子图并选择α,rad信号的名字。信号数据显示在顶部的子图中。

      α,rad来自运行1和运行2的信号在子图中重叠,因为信号是等效的。

在模拟和代码生成结果之间可能会看到非常小的差异。造成轻微差异的因素有很多,包括:

  • 不同的编译器优化

  • 语句排序

  • 运行时库

例如,函数调用罪(2.0)可以返回稍微不同的值,这取决于您使用的C库。这种变化还可能导致您的结果与这些结果之间的差异。

比较模拟和代码生成的状态

在模拟过程中,Simulink记录状态金宝app的顺序与记录状态的顺序不同金宝app仿真软件编码器™记录代码生成期间的状态。如果您想比较模拟和代码生成之间的状态,请按块名对状态进行排序。

例如,默认情况下,Simulink将状态数据导出到金宝appMATLAB变量,xout金宝app仿真软件编码器将状态数据导出到变量rt_xout.为了对这些变量的状态数据进行排序,在MATLAB命令窗口中输入以下命令:

[~, idx1] =排序({xout.signals.blockName});xout_sorted = [xout.signals (idx1) . values);[~, idx2] =排序({rt_xout.signals.blockName});rt_xout_sorted = [rt_xout.signals (idx2) . values);

在MATLAB命令窗口中输入以下命令,可以确认代码生成和模拟的日志顺序相同:

isequal (xout_sorted rt_xout_sorted)

相关的话题