文档

从一个嵌入式系统的控制算法生成C代码

为控制算法模型生成代码,将生成的代码与现有系统集成,并验证仿真和可执行结果。

的例子

一系列示例基于共享模型。每个示例都有该模型的唯一版本和相应的数据集,以便您可以独立使用这些示例。您不必按特定顺序运行这些示例。在示例之间转换时,保存当前模型,以便每个示例捕获您对e模型和模型数据。

要恢复处于原始状态的模型,请删除模型和模型数据的本地副本。模型数据保存为PCG_Demo_ # _data.mat

使用这些超链接可以导航到本系列中的示例。

第三方软件

一些示例使用Eclipse™ IDE和Cygwin™/gcc编译器。安装和使用Eclipse的说明™ 还有Cygwin™/gcc在中提供安装并使用Cygwin和Eclipse

了解模型

这个例子从行为和结构的角度展示和描述了这个模型。该示例还展示了如何配置代码生成模型以及如何生成代码。你学习如何:

  • 了解示例模型的功能行为。

  • 了解如何验证模型。

  • 熟悉模型检查工具。

  • 熟悉影响代码生成的配置选项。

  • 从模型生成代码。

了解模型的功能设计

这个例子使用了一个简单的节气门控制器模型。该模型的特点是冗余,这是安全关键、线控驱动应用程序通常使用的。该模型强调了一个标准的模型结构和一套算法设计的基本模块。

在当前配置中,模型生成的代码没有配置为生产目标系统。在本例中,更改目标配置并观察生成代码格式的结果更改。

检查顶级模型

打开示例模型

顶级模型包括:

  • 四个子系统:PI_ctrl_1,PI_ctrl_2,定义参数,Pos_Command_Arbitration

  • 顶级输入:pos_rqst,fbk_1,fbk_2

  • 顶级输出:pos_cmd_one,pos_cmd_two,喉结

  • 信号路由。

  • 没有变换块。变换块改变信号的值,例如,求和和和积分器块。

布局显示了基本的模型建筑样式。

  • 从信号路由(线路和总线)中分离计算

  • 划分为子系统

这种款式适合许多类型的模特。

检查子系统

两个子系统代表PI控制器:PI_ctrl_1PI_ctrl_2.子系统具有相同的内容,目前使用相同的数据。稍后,您将使用子系统来了解代码生成器如何创建可重用的函数。

PI控制器来自于图书馆,这是一组您想要重用的相关块或模型。库提供了包含和重用模型的两种方法之一。在本系列的后面,您将看到第二种方法,模型引用。

在模型中使用库块时,无法编辑模型中的块实例。请改为编辑库中的块定义。然后,不同模型中的块实例保持一致。

打开子系统PI_ctrl_1

的Stateflow®图表Pos_Command_Arbitration对两个命令信号执行基本错误检查。如果命令信号相距太远,图表会将输出设置为afail_safe的位置。

打开Pos_Command_Arbitration

检查代码生成的模型配置参数设置

要准备用于代码生成的模型,请打开嵌入式编码器然后设置代码生成模型配置参数。这些参数确定代码生成器用于生成代码的方法以及生成的代码格式。

目标代码生成

您可以手动配置模型配置参数。或者,您可以从预定义的目标中选择自动配置模型配置参数。

您可以从以下高级代码生成目标中进行选择:

  • 执行效率

  • 罗效率

  • 内存效率

  • 可追溯性

  • 安全预防措施

  • 调试

每个目标根据目标的推荐值检查当前模型配置参数。每个目标还包括一组代码生成顾问检查。您可以使用这些额外的检查来验证模型配置参数是否被设置为创建满足目标的代码。

目标与代码生成顾问检查相冲突的一些建议。选择目标的顺序决定了结果。金宝appSimulink®通过满足具有更高优先级的目标来解决冲突。

图中显示了如何设置优先级为执行效率>罗效率>内存效率.要打开该对话框,在“配置参数”对话框中,选择代码生成窗格。然后,单击设定目标

您可以运行代码生成顾问来根据指定的目标检查模型。要打开代码生成顾问,请在C代码选项卡,单击C / c++代码的顾问

代码生成顾问根据您选择的目标创建一个检查列表。第一个检查检查模型配置参数的当前值,并建议基于目标的可选值。检查提供了将参数设置为推荐值的自动方法。

手动配置选项

在模型配置参数对话框中,这些窗格与代码生成相关:

  • 解算器

  • 硬件实现

  • 代码生成

解算器

打开解算器窗格。

  • 要为模型生成代码,必须设置模型配置参数类型固定步长

  • 参数固定的大小设置系统的基本速率。设置为系统中速率的最小公倍数。

  • 参数解算器控制代码生成器使用的集成算法。

  • 要为系统中的每个速率生成入口点函数,请选择参数将每一个离散的速率视为一个单独的任务

硬件实现

打开硬件实现窗格。

使用硬件实现参数指定硬件单板。金宝appSimulink®调整面板上的其他设置,包括隐藏的微处理器设备细节,基于您的板选择。单击,可以查看或调整隐藏参数的设置,如字长、字节顺序等设备详细信息

代码生成

打开代码生成窗格。

使用代码生成窗格以指定系统目标文件和优化。下面的例子使用了Embedded Coder®系统目标文件(ert.tlc)。您可以扩展该系统目标文件以创建自定义配置。上的一些基本参数代码生成窗格及其子窗格包括:

系统目标文件

  • ert.tlc- "Base" Embedded Coder®

  • 锐信。tlc -“Base”通用实时目标

  • 特定于硬件的目标

使文件

代码优化

  • 从代码中删除未使用的分支,并控制临时变量的创建。

  • 控制哪些信号具有显式初始化代码。

  • 启用和禁用溢出和除零保护代码的使用。

代码格式化选项

  • 使用括号

  • 头文件信息

  • 变量命名约定

包含自定义代码

  • C文件

  • H文件

  • 对象文件

  • 文件夹路径

生成ASAP2文件

保存模型配置参数

您可以将模型配置参数的值保存为MATLAB®函数。在命令提示符处,输入:

高碳钢= getActiveConfigSet (“rtwdemo_PCG_Eval_P1”);hCs.saveAs (“ConfiguredData”);

MATLAB®函数保存配置参数对象的文本表示。您可以使用生成的文件进行归档,或者使用传统的差异工具来比较文件的不同版本。您还可以直观地检查文件的内容。

您可以运行该函数来设置其他型号的配置参数。

hCs2 = ConfiguredData;attachConfigSet (“myModel”hCs2,真实);setActiveConfigSet (“myModel”, hCs2.Name);

了解模拟测试环境

你在一个单独的模型中测试节气门控制器模型测试线束.测试工具是评估控制算法的模型。使用测试工具:

  • 从控制算法中分离测试数据

  • 从控制算法中分离设备或反馈模型

  • 为控制算法的多个版本提供可重用的环境

打开测试线束

一个典型的模拟测试环境由以下几个部分组成:

  • 单元测试下

  • 测试向量源

  • 评估和记录

  • 设备或反馈系统

  • 输入输出缩放

突出显示测试中的单元。

控制算法是单元测试下。测试线束模型通过模型块引用控制算法。使用模型块,您可以重用组件。模型块通过名称引用控制算法(rtwdemo_PCG_评估_P1).

Model块允许在另一个模型中包含(引用)一个模型编译函数.默认情况下,当您更改模型金宝app时,Simulink®会编译引用模型。编译函数比库具有以下优点:

  • 大型模型模拟速度更快。

  • 您可以直接模拟编译后的函数。

  • 模拟需要更少的内存。当您添加模型的多个实例(多个model块)时,内存中只存在已编译模型的一个副本。

突出显示测试向量源。

该模型使用Signal Builder块作为测试矢量源。该块具有驱动模拟的数据(pos_rqst)和验证子系统使用的预期结果。这个例子只使用了一组测试数据,但是在一个典型的应用程序中,您创建了一个测试套件,可以充分地运行系统。

强调验证。

测试装置将仿真结果与金色的数据,这是一组测试结果,指示模型的所需行为。在此模型中,V&V断言块将来自工厂的模拟油门值位置与测试线束提供的黄金值进行比较。如果两个信号之间的差值大于5%,则测试失败,断言块停止t他喜欢模拟。

或者,您可以在模拟完成执行后评估模拟数据。您可以使用MATLAB®脚本或第三方工具来执行评估。执行后评估在数据分析中提供了更大的灵活性,但您必须等到执行完成。将这两种方法结合起来可以产生一个高性能的结果灵活高效的测试环境。

加载系统(“rtwdemo_PCGEvalHarness”) open_system (“rtwdemo_PCGEvalHarness /验证”)

突出显示设备/反馈系统。

这个例子通过将一个传递函数分解成一个规范的形式来模拟节气门动力学。您可以创建植物模型来为特定的逼真度级别建模。许多应用程序在每个测试阶段使用不同的工厂模型。

高亮缩放输入和输出。

缩放输入和输出的子系统执行以下主要功能:

  • 选择信号路由到被测设备和工厂。

  • 在工程单元和被测单元之间重新调整信号。

  • 处理设备和被测装置之间的速率转换。

运行仿真测试

要运行测试装置模型模拟,请单击开始或单击此超链接。

运行测试工具。

第一次运行测试工具时,Simulink®必须编译参考模型。金宝app您可以在“命令窗口”中监控编译进度。

模型模拟完成后,Simulink®将结果显示在绘图图中。金宝app

模拟(“rtwdemo_PCGEvalHarness”)

右下角的图显示了预期(黄金)油门位置和工厂计算的油门位置之间的差异。

生成代码

要生成代码,请打开嵌入式编码器然后,使用以下技巧之一:

  • 在模型中,按Ctrl + B

  • C代码选项卡上,选择构建生成代码

  • 点击这个链接:

为模型生成代码。

代码生成器生成多个文件。生成的代码虽然计算效率高,但尚未组织起来集成到生产环境中。

检查生成的代码

代码生成器创建多个文件,您可以从代码查看或代码生成报告。除了标准的C定义和头文件外,代码生成器还创建了一组HTML文件。HTML文件提供了代码和模型之间的超链接。

在模型管理器中,打开HTML代码浏览器。

在生成的代码中,注意:

  • 控制器代码存在于一个名为ModelName_step,在文件中rtwdemo_PCG_Eval_P1.c

  • 代码生成器将多个块的操作折叠成一条代码语句。

  • 这个函数ModelName_initialize初始化变量。

  • 数据结构定义模型数据(例如,rtwdemo_PCG_Eval_P1_.pos_rqst).

有关本系列的下一个示例,请参见在生成代码中配置数据接口

相关的话题