测试生成的代码
通过使用系统级 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 外测试系统,您可以重用测试输入数据。
将 Simulink 测试数据保存到一个文件中。
以系统代码可以访问的方式格式化数据。
将数据文件作为系统代码过程的一部分进行读取。
要使用 Simulink 执行验证,您可以以 MATLAB® 可以读取的格式保存来自外部环境的测试输出数据。
在此示例中,文件 hardwareInputs.c
包含来自测试框架模型中 Signal Editor 模块的数据。
通过软件在环进行测试(Model 模块 SIL)
创建并配置 Model 模块以用于 SIL
Simulink 可以从 Model 模块生成代码,将代码包装到一个 S-Function 中,并将该 S-Function 添加回模型以进行软件在环测试。
打开示例模型 rtwdemo_PCG_Eval_P6
。
测试框架使用 Model 模块来访问示例模型。在本示例中,您将对示例模型运行软件在环测试。
右键点击 Model 模块,然后选择模块参数(ModelReference)。
将模型名称设置为要测试的模型的名称。
将仿真模式设置为
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
两个函数 plant
和 hardwareInputs
提供输入测试数据。
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 接口的情况下重新生成代码。
要了解如何安装和使用 Eclipse 及 GCC,请参阅 安装和使用 Cygwin 及 Eclipse。
要自动为此示例安装文件,请点击以下超链接。
也可以通过执行下列操作手动安装文件:
创建编译文件夹 (
Eclipse_Build_P6
)。将文件
rtwdemo_PCG_Eval_P6.zip
解压缩到编译文件夹中。删除文件
rtwdemo_PCG_Eval_P6.c
、ert_main.c
和rt_logging.c
,它们由example_main.c
替换。
在 Eclipse 中运行控制代码。writeDataForEval.c
中的函数创建文件 eclipseData.m
,该文件包含输出测试数据。在 MATLAB 中,通过运行脚本文件加载此 Eclipse 数据。然后,使用 plot
将该数据与来自 Simulink 测试框架模型的数据进行比较。
有关本系列中的下一个示例,请参阅 评估生成的代码的性能。