Main Content

测试生成的代码

通过使用系统级 S-Function 或在外部环境中运行生成的代码来对其进行验证。

了解:

  • 用于测试生成的代码的不同方法

  • 如何在 Simulink® 中测试生成的代码

  • 如何在 Simulink 外测试生成的代码

有关本系列中示例模型和其他示例的信息,请参阅 为 C 代码生成准备控制算法模型

验证方法

Simulink 支持使用多种系统测试方法来验证生成的代码的行为。

Windows® 运行时可执行文件:从命令提示符生成 Microsoft® Windows 可执行文件并运行该可执行文件。

  • 优点:易于创建并支持使用 C 调试器来评估代码

  • 缺点:只能对目标硬件进行部分仿真

软件在环 (SIL) 测试:使用 S-Function 将生成的代码包含在 Simulink 模型中。

  • 优点:易于创建、支持 Simulink 测试环境重用,并支持使用 C 调试器来评估代码

  • 缺点:只能对目标硬件进行部分仿真

处理器在环 (PIL) 测试:运行非实时协同仿真。Simulink 执行模型的一部分(通常是被控对象模型),而目标处理器运行模型的另一部分(通常是控制器)。在将代码下载到目标处理器后,处理器在环技术可处理在协同仿真期间 Simulink 与目标之间的信号通信。

  • 优点:支持 Simulink 测试环境重用、支持使用 C 调试器进行仿真,并可涵盖目标处理器

  • 缺点:需要额外的步骤来设置测试环境,并且处理器不实时运行

目标系统上的快速原型:作为完整系统的一部分在目标处理器上运行生成的代码。

  • 优点:您可以确定实际的硬件限制并在完整系统中测试组件。处理器实时运行

  • 缺点:需要硬件,并需要执行额外的步骤来设置测试环境

外部模式:作为完整系统的一部分在目标处理器上运行生成的代码。

  • 优点:您可以确定实际的硬件限制并在完整系统中测试组件

  • 缺点:需要硬件,并需要执行额外的步骤来设置测试环境

在 Simulink 外重用测试数据

在本系列的其他示例中,您是通过在 Simulink 中进行仿真来测试系统的。测试输入数据来自测试框架模型中的 Signal Editor 模块。

要在 Simulink 外测试系统,您可以重用测试输入数据。

  1. 将 Simulink 测试数据保存到一个文件中。

  2. 以系统代码可以访问的方式格式化数据。

  3. 将数据文件作为系统代码过程的一部分进行读取。

要使用 Simulink 执行验证,您可以以 MATLAB® 可以读取的格式保存来自外部环境的测试输出数据。

在此示例中,文件 hardwareInputs.c 包含来自测试框架模型中 Signal Editor 模块的数据。

通过软件在环进行测试(Model 模块 SIL)

创建并配置 Model 模块以用于 SIL

Simulink 可以从 Model 模块生成代码,将代码包装到一个 S-Function 中,并将该 S-Function 添加回模型以进行软件在环测试。

打开示例模型 rtwdemo_PCG_Eval_P6

打开测试框架模型。

测试框架使用 Model 模块来访问示例模型。在本示例中,您将对示例模型运行软件在环测试。

  1. 右键点击 Model 模块,然后选择模块参数(ModelReference)

  2. 模型名称设置为要测试的模型的名称。

  3. 仿真模式设置为 Software-in-the-loop (SIL)

Model 模块现在显示 (SIL) 标记。

针对 SIL 配置模型

通过调整硬件实现参数,配置示例模型 rtwdemo_PCG_Eval_P6 和测试框架模型 rtwdemo_PCGEvalHarnessHTGTSIL 以进行 SIL 仿真。

打开示例模型

对于这两种模型,在“配置参数”对话框中,选中支持 long long 复选框。

在当前文件夹中保存示例模型 rtwdemo_PCG_Eval_P6 的一个副本。

运行 Model 模块 SIL

在此示例中,测试框架模型包含一个针对 SIL 仿真配置的 Model 模块。

打开测试框架。

运行测试框架。

生成的代码和仿真产生相同的结果。

配置系统以通过测试向量导入和导出进行测试

此示例将扩展 在 Simulink 环境之外编译集成的代码 中的集成示例。在这种情况下,example_main.c 使用仿真硬件 I/O。

扩充的 example_main.c 文件现在使用以下执行顺序:

1.初始化数据(一次)

while < endTime

2.读取仿真硬件输入

3. PI_cnrl_1

4. PI_ctrl_2

5. Pos_Command_Arbitration

6.写入仿真硬件输出

end while

查看 example_main.c

两个函数 planthardwareInputs 提供输入测试数据。

Plant.c:此函数是从测试框架的被控对象部分生成的,它用于仿真节气门体对节气门命令的响应。

void Plant(void)

HardwareInputs.c:此函数提供 pos_req 信号,并将来自 Input_Signal_Scaling 子系统的噪声添加到被控对象反馈信号中。

void hardwareInputs(void)

WriteDataForEval.c 中的人工函数记录测试的输出数据。测试完成后,该函数执行并将数据写入文件 PCG_Eval_ExternSimData.m。您可以在 MATLAB 中运行此脚本文件来访问数据。然后,您可以将数据与来自 Simulink 的仿真数据进行比较。

要启用这些附加文件,请使用配置参数 > 代码生成 > 自定义代码 > 附加编译信息标识它们。

通过测试向量导入和导出进行测试(Eclipse 环境)

在 Eclipse™ 环境中编译可执行文件之前,请在不使用 S-Function 接口的情况下重新生成代码。

编译 C 代码以用于集成。

要了解如何安装和使用 Eclipse 及 GCC,请参阅 安装和使用 Cygwin 及 Eclipse

要自动为此示例安装文件,请点击以下超链接。

自动设置编译文件夹。

也可以通过执行下列操作手动安装文件:

  1. 创建编译文件夹 (Eclipse_Build_P6)。

  2. 将文件 rtwdemo_PCG_Eval_P6.zip 解压缩到编译文件夹中。

  3. 删除文件 rtwdemo_PCG_Eval_P6.cert_main.crt_logging.c,它们由 example_main.c 替换。

在 Eclipse 中运行控制代码。writeDataForEval.c 中的函数创建文件 eclipseData.m,该文件包含输出测试数据。在 MATLAB 中,通过运行脚本文件加载此 Eclipse 数据。然后,使用 plot 将该数据与来自 Simulink 测试框架模型的数据进行比较。

有关本系列中的下一个示例,请参阅 评估生成的代码的性能

相关主题