Help

Welcome!

This community is for professionals and enthusiasts of our products and services.
Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

0

Matlab Simulink:配置数据接口

Embedded Coder® 可为模型中的数据元素和函数类别指定默认配置,以减少配置数据和函数接口的工作量。应用默认配置可以节省时间并降低在代码中引入错误的风险,尤其是对于大型模型和要从中生成多实例代码的模型更是如此。应用默认配置后,您可以有选择地覆盖单个数据元素和函数的默认设置。

可以通过配置 roll_control_step 函数来自定义 rtwdemo_roll 模型的数据接口,以:

  • 从在外部文件 roll_input_data.h 和 roll_input_data.c 中声明和定义的全局变量读取输入数据。

  • 将输出数据写入代码生成器在 output_data.h 中声明并在 output_data.c 中定义的全局变量。

要进行这些更改,请在 MATLAB® 命令行窗口中,将这些外部代码文件复制到当前的 MATLAB 工作文件夹中。

copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.c'));
copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_input_data.h'));
copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.c'));
copyfile(fullfile(matlabroot,'toolbox','rtw','rtwdemos','roll_heading_mode.h'));

您所做的数据接口配置更改取决于代码生成和编译过程可以访问的这些文件。编译过程会使用这些文件中的代码编译生成的代码。

配置数据的默认代码生成

为模型输入端口和输出端口配置默认代码生成配置。

  1. 配置模型根级别的 Inport 模块,使其在生成的代码中显示为由外部代码定义的单独全局变量。在 Code Mapping Editor 的 Data Defaults 选项卡上,对于类别 Inports,将 Storage Class 设置为 “ImportFromFile”。

    使用此设置时,生成的代码不会定义表示输入端口数据的全局变量。此时,#include 语句包含一个声明输入变量的头文件。使用 Property Inspector 指定该头文件的名称。

  2. 打开 Property Inspector。在 Simulink® Editor 窗口的右下角,点击 Property Inspector 选项卡。

  3. 在 Property Inspector 中,将属性 HeaderFile 设置为 roll_input_data.h

  4. 要查看外部头文件 roll_input_data.h 中的 extern 声明如何命名输入变量,请从 MATLAB 命令行窗口中打开 roll_input_data.h

    extern boolean_T AP_Eng;
    extern real32_T HDG_Ref;
    extern real32_T Rate_FB;
    extern real32_T Phi;
    extern real32_T Psi;
    extern real32_T TAS;
    extern real32_T Turn_Knob;
    
  5. 配置全局变量的代码生成命名规则。默认情况下,代码生成器使用前缀 rt 命名全局变量。要使代码生成器生成与 roll_input_data.h 中的外部变量声明匹配的代码,请相应地配置全局变量的代码生成命名规则。

    1. 打开 Model Configuration Parameters 对话框。

    2. 导航到 Code Generation > Symbols 窗格。

    3. 将参数 Global variables 设置为命名规则 $N$M(删除 rt 前缀)。标记 $N 表示模型中数据元素的名称,例如,Inport 或 Outport 模块的名称。标记 $M 表示代码生成器根据需要插入的名称修饰文本,以避免与代码中的其他全局变量发生名称冲突。

    4. 应用所做更改。

  6. 配置模型根级别的 Outport 模块,使其在生成的代码中显示为单独全局变量。在 Simulink Editor 窗口中,在 Code Mapping Editor 中的 Data Defaults 选项卡上,对于类别 Outports,将 Storage Class 设置为 “ExportToFile”。

    生成的代码声明并定义您使用 Property Inspector 指定的头文件和定义文件中的输出变量。

  7. 在 Property Inspector 中,将属性 HeaderFile 设置为 roll_output_data.h,将属性 DefinitionFile 设置为 roll_output_data.c

  8. 配置模型的代码生成以包括外部源文件 roll_input_data.c 和 roll_heading_mode.c。在 Configuration Parameters 对话框中,将 Code Generation > Custom Code > Additional build information > Source files 设置为 roll_input_data.c roll_heading_mode.c。然后,点击 Apply 和 OK

  9. 保存模型。点击  按钮重新生成代码。

    编译器错误指示未声明变量 HDG_Mode。该变量未在头文件 roll_output_data.h 中声明,它是您为输入端口声明的默认头文件。您可以在本教程的下一节中修复此错误。

    该模型配置为在代码生成完成后打开代码生成报告。最小化此报告窗口以便在本教程的后面部分进行浏览。

  10. 您将 Inport 模块配置为使用外部头文件来声明和定义输入变量。在代码视图中,通过搜索 roll_input_data.h 确认生成的代码包含此外部头文件。

  11. 搜索根级别 Inport 模块名称 HDG_Ref。在您键入时,选择具有绿色 V 图标的搜索建议。此搜索建议查找用作所生成代码中的变量的 HDG_Ref 实例。确认 HDG_Ref 定义为单独的全局变量。

  12. 在模型 rtwdemo_roll 中,点击 Outport 模块 Ail_Cmd。代码视图会高亮 rtwdemo_roll.c 中与该模块对应的代码。在代码中,将光标放在输出变量 Ail_Cmd 上方的省略号菜单上。可追溯性对话框可以显示与代码对应的变量定义和模型元素。该对话框确认 Ail_Cmd 已定义为单独的全局变量。点击定义代码以在 output_data.c 中查看定义。

覆盖单个数据元素的默认设置

您为 Data Defaults 下的类别选择的设置将应用于整个模型中该类别的元素。要覆盖单个数据元素的默认设置,请使用 Model Data Editor。

在为输入端口和输出端口配置默认设置后生成代码时,会显示一个编译器错误,指示未声明变量 HDG_Mode。您可以通过覆盖 Inport 模块 HDG_Mode 的默认配置来修复该错误。

  1. 打开 Model Data Editor。在代码方式下的 Code Mapping Editor 下,点击 Model Data Editor 选项卡。

  2. 在 Model Data Editor 中的 Inports/Outports 选项卡上,选择源 HDG_Mode

  3. 将 Storage Class 设置为 “ImportFromFile”,将 Header File 设置为 roll_heading_mode.h

    代码生成器将根据这些设置从头文件 roll_heading_mode.h 导入外部变量 HDG_Mode 的声明。

    extern boolean_T HDG_Mode;
    
  4. 保存模型并重新生成代码。

    最小化代码生成报告窗口,以便在本教程中的后面部分进行浏览。

  5. 在代码视图中,搜索 roll_heading_mode.h 并确认它与默认配置文件 roll_input_data.h 均包含在生成的代码中。

  6. 搜索 HDG_Mode 并确认它已定义为单独的全局变量。

接下来,将一个模型参数配置为生成的代码中的一个全局变量。您可以在运行时调整该全局变量的参数值。

Avatar
Discard