Main Content

验证生成的可执行程序结果

验证为模型生成的可执行程序结果是否与仿真结果匹配。

配置模型以进行验证

  1. 配置 Dashboard Scope 模块,以监视信号 Force: f(t):1X 的值。双击 Dashboard Scope 模块。在“模块参数”对话框中,确认:

    • 该模块连接到信号 Force: f(t):1X。要将 Dashboard 模块连接到信号,请在模型画布中选择该信号。在“模块参数”对话框中,选择信号名称。

    • 最小值设置为 -10

    • 最大值设置为 10

    应用更改并关闭对话框。

  2. 配置 Knob 模块,以便您可以使用旋钮来更改阻尼增益的值。双击 Knob 模块。在“模块参数”对话框中,确认:

    • 该模块连接到参数 Damping:Gain。要将 Dashboard 模块连接到参数,请在模型画布中选择使用该参数的模块。在“模块参数”对话框中,选择参数名称。

    • 最小值设置为 200

    • 最大值设置为 600

    • 刻度区间设置为 100

    应用更改并关闭对话框。

  3. 打开“模型配置参数”对话框。在 C 代码选项卡上,点击设置 > C/C++ 代码生成设置

  4. 配置模型,使 Simulink® 和生成的可执行程序将工作区数据记录在仿真数据检查器中。点击数据导入/导出。确认模型配置有以下设置:

    选择的参数名称设置为
    时间tout
    状态xout
    输出yout
    信号记录logsout
    数据存储dsmout
    在仿真数据检查器中记录所记录的工作区数据 
  5. 为编译可执行程序配置模型。点击代码生成。确认参数 仅生成代码 未选中。

  6. 配置和验证用于编译可执行程序的工具链。确认参数 工具链 设置为自动定位已安装的工具链

  7. 指向参数底部的三个点以显示高级参数标签。然后,在高级参数下,点击验证工具链按钮以生成并打开验证报告。验证报告指出正在使用哪个编译器以及针对此编译器的检查项是否通过。

  8. 配置参数和信号,以便数据存储在内存中,并在可执行程序运行时可访问。要在 C 代码中高效地实现模型,您不会为模型中的每个参数、信号和状态都分配内存。如果模型算法不需要数据来计算输出,经过代码生成优化后,将不再需要为数据分配存储空间。要为数据分配存储空间以便在原型构建过程中访问数据,您需要禁用一些优化。

    点击代码生成 > 优化

  9. 确认 默认参数行为 设置为可调。在此设置下,模块参数(例如 Gain 模块的增益参数)在生成的代码中将是可调的。

  10. 指向参数底部的三个点以显示高级参数标签。然后,在高级参数下,确认Signal storage reuse已清除。在此设置下,代码生成器为各个信号线分配存储空间。运行可执行程序时,您可以监视信号的值。

  11. 配置代码生成器以支持非有限数据(例如,NaNInf)和相关运算。点击代码生成 > 接口。确认参数 Support: non-finite numbers 已选中。

  12. 配置通信信道。为了让 Simulink® 与模型生成的可执行程序通信,模型必须包括对通信信道的支持。此示例使用基于 TCP/IP 的 XCP 作为通信信道的传输层。确认这些参数设置:

  13. 禁用 MAT 文件记录。将数据从 MATLAB® 基础工作区加载到仿真数据检查器。指向参数底部的三个点以显示高级参数标签。然后,在高级参数下,确认参数 MAT-file logging已清除。

  14. 应用您的配置更改,关闭“模型配置参数”对话框,并保存模型。

对模型进行仿真并查看结果

  1. 在 Simulink 编辑器的仿真选项卡中,点击运行运行按钮上的时钟指示仿真调速已启用。仿真调速可减慢仿真速度,以便您观察系统行为。以较慢的速度可视化仿真,可在展示近乎实时的行为同时,帮助您更轻松地理解底层系统设计和识别设计问题。

    在仿真过程中,Dashboard Scope 模块显示信号 Force: f(t):1X 的行为。

  2. 在 Simulink 编辑器的仿真选项卡上,点击数据检查器。仿真数据检查器将打开,其中已导入仿真运行的数据。

  3. 展开此次运行(如果尚未展开)。然后,要绘制数据,请选择数据信号 XForce: f(t):1

将这些结果保留在仿真数据检查器中。稍后,您将仿真数据与从模型生成的可执行程序生成的输出数据进行比较。

编译和运行可执行程序并查看结果

编译并运行模型可执行程序。

  1. 在 Simulink 编辑器的硬件选项卡中,点击监控并调节 play icon 以启动过程。Simulink 将:

    1. 编译目标应用程序文件,其中包括可执行文件。根据代码生成的配置,信号的调试符号是作为可执行文件的一部分或在单独的文件中创建的。要了解有关代码生成的不同配置的更多信息,请参阅编译从 Simulink 模型生成的代码的方法

    2. 将可执行程序作为单独的进程部署在开发计算机上。

    3. 将 Simulink 模型连接到可执行程序。

    4. 启动模型可执行程序代码。

比较仿真和可执行程序结果

使用仿真数据检查器将可执行程序结果与仿真结果进行比较。

  1. 在仿真数据检查器中,检查可执行程序运行的结果,Run 2: SecondOrderSystem

  2. 点击比较

  3. 选择要比较的数据运行。对于此示例,从基线列表中,选择运行 1:SecondOrderSystem。从比较项列表中,选择运行 2:SecondOrderSystem

  4. 在仿真数据检查器的右上角,点击比较

  5. 仿真数据检查器指示,来自可执行程序代码的 XForce: f(t):1 的输出相比仿真数据的输出已经超出容差。要查看 X 的结果图,请在文件比较下,选择 X 的行。

  6. 检查 Force: f(t):1 的比较图。在文件比较下,选择 Force: f(t):1 的行。

  7. 通过指定绝对相对容差值来确定数值差异是否显著。对于本教程,我们将全局绝对容差设置为 1e-12。点击右上角的更多按钮。在对话框中的全局容差下,将绝对设置为 1e-12。然后,点击比较XForce: f(t):1 的比较结果处在容差范围内。

    有关数值一致性验证和容差的详细信息,请参阅Numerical Consistency of Model and Generated Code Simulation Results

接下来,在程序执行期间调整参数。