Main Content

使用工程以编程方式生成代码和仿真模型

以下示例说明如何使用工程 API 创建新工程,并自动执行工程任务来操作文件。它讲述如何以编程方式创建空白工程、添加文件和文件夹、设置工程路径、定义工程快捷方式、生成代码以及对框架模型进行仿真。

通过工程,您可以管理和共享文件与设置、查找必需文件以及与源代码管理进行交互,从而有助于您组织大型工程设计。

管理基于模型的设计工程

示例模型提供了一个控制器,它将相机固定到跟踪绿色球的直流电机上。

MBD 方法旨在对控制器操作进行建模:

  • 被控对象建模:被控对象是一台直流电机,它通过旋转重新定位相机。

  • 控制器建模:该设计使用具有角位置反馈的 PID 控制器来定位直流电机。

  • 高级球跟踪调度器建模:调度器检查绿色球位置的有效性和基准角的饱和度。调度器处理屏幕上无球可跟踪的实例。

该设计和工程包含以下几个文件夹。

被控对象 - 被控对象提供:

  • 包含使用基本 Simulink® 模块的连续时间动态系统的模型。

  • 包含使用 LTI 系统模块的线性时不变 (LTI) 系统的模型。

  • 在工作区中导入和导出仿真数据

  • 将参数加载到使用数据字典和模型回调的基础工作区。

控制器 - 控制器提供:

  • 包含离散时间动态系统并使用基本 Simulink 模块的模型。

  • 包含使用 PID Controller 模块的离散时间动态系统的模型。

  • 强制执行使用 PWM Conversion 子系统的信号饱和。

球跟踪 - 球跟踪提供:

  • 基本球跟踪算法。

  • 作为占位符的 Terminator 和 Ground 模块。

  • 使用 Stateflow® 生成电机基准角的混合控制器。

框架 - 框架提供整个系统的顶层仿真。

创建空白工程并添加文件

1.创建一个空白工程。在主页选项卡上,点击新建 > 工程 > 空白工程

或者,从命令行窗口创建此工程并使用 currentProject 获取工程对象来操作工程:

exampleDir = pwd;
matlab.project.createProject('modelBasedDesignCodeGenProject');
proj_modelBasedDesignCodeGen = currentProject
proj_modelBasedDesignCodeGen = 
  Project with properties:

                        Name: "modelBasedDesignCodeGenProject"
                 Description: ""
                  RootFolder: "C:\Users\jwarren\MATLAB\Projects\modelBasedDesignCodeGenProject5"
                    TopLevel: 1
                    ReadOnly: 0
         DefinitionFilesType: FixedPathMultiFile
    SourceControlIntegration: ""
          RepositoryLocation: ""
       SourceControlMessages: [1×0 string]
                       Files: [1×0 matlab.project.ProjectFile]
                   Shortcuts: [1×0 matlab.project.Shortcut]
                  Categories: [1×1 matlab.project.Category]
                Dependencies: [1×1 digraph]
                StartupFiles: [1×0 string]
               ShutdownFiles: [1×0 string]
                 ProjectPath: [1×0 matlab.project.PathFolder]
           ProjectReferences: [1×0 matlab.project.ProjectReference]
         SimulinkCacheFolder: ""
        ProjectStartupFolder: "C:\Users\jwarren\MATLAB\Projects\modelBasedDesignCodeGenProject5"
       SimulinkCodeGenFolder: ""
         DependencyCacheFile: ""

2.将示例文件复制到工程内的文件夹中。

或者,在命令行窗口中,键入:

copyfile(fullfile(exampleDir,'slproject_codegen_demo'), ...
    fullfile(pwd),'f');

3.将现有文件添加到工程中:

  • 点击工程文件视图按钮并选择所有文件视图

  • 选择文件夹 ball_trackingcontrollerharnessesplantutilities,右键点击其中一个文件夹的图标,然后选择将文件夹添加到工程(包括子文件)

或者,从命令行窗口以编程方式将这些文件添加到工程中:

addFolderIncludingChildFiles(proj_modelBasedDesignCodeGen,'ball_tracking');
addPath(proj_modelBasedDesignCodeGen,'ball_tracking');
addFolderIncludingChildFiles(proj_modelBasedDesignCodeGen,'controller');
addPath(proj_modelBasedDesignCodeGen,'controller');
addFolderIncludingChildFiles(proj_modelBasedDesignCodeGen,'harnesses');
addPath(proj_modelBasedDesignCodeGen,'harnesses');
addFolderIncludingChildFiles(proj_modelBasedDesignCodeGen,'plant');
addPath(proj_modelBasedDesignCodeGen,'plant');
addFolderIncludingChildFiles(proj_modelBasedDesignCodeGen,'utilities');
addPath(proj_modelBasedDesignCodeGen,'utilities');

4.选择 work 文件夹,右键点击其中一个文件夹的图标,然后选择工程路径 > 添加到工程路径(包括子文件夹)。如果选择将此文件夹添加到该路径中,则可以在工程路径中找到仿真和代码生成时生成的文件(工件)。如果选择不在工程中包含生成的文件,则依存关系图不显示这些文件。

或者,从命令行窗口将此文件夹添加到工程路径中:

addPath(proj_modelBasedDesignCodeGen,'work');

5.要使工程更容易访问,请定义工程快捷方式并为其设置属性。在文件视图中,选择工程选项卡。打开 utilities 文件夹节点。

6.选择文件 clean_up_project.mgenerate_controller_code.mset_up_project.m,右键点击其中一个文件的图标,然后选择创建快捷方式

7.要在打开工程时设置当前工作文件夹、设置仿真缓存文件夹并运行其他设置脚本:

  • 选择 set_up_project.m 脚本。

  • 右键点击该文件。

  • 选择启动时运行

或者,从命令行窗口将此设置脚本添加到工程启动任务中:

addStartupFile(proj_modelBasedDesignCodeGen,fullfile(pwd,'/utilities/set_up_project.m'));

8.要在关闭工程时还原以前的设置并运行其他清理脚本:

  • 选择 clean_up_project.m 脚本。

  • 右键点击该文件。

  • 选择关闭时运行

或者,从命令行窗口以编程方式将清理脚本添加到工程关闭任务中:

addShutdownFile(proj_modelBasedDesignCodeGen,fullfile(pwd,'/utilities/clean_up_project.m'));

9.重新打开工程以运行启动快捷方式。

或者,重新加载工程并从命令行窗口运行 set_up_project

reload(proj_modelBasedDesignCodeGen);
run('set_up_project');

从依存关系图中生成控制器的代码

1.工程选项卡上,点击依存关系分析器以对工程中的所有文件运行依存关系分析。

依存关系图显示您的工程结构和文件依存关系。它显示文件之间的相互关系。图中的每个项目表示一个文件,每个箭头表示一种依存关系。

work 文件夹的内容不会显示在依存关系图中。此设置简化了视图,以指示模型文件和 .m 脚本文件中的依存关系。

a.检查右侧的属性窗格,了解有关您的工程的有用信息,如必需产品和问题文件。

b.使用放大按钮放大依赖项对应图。使用箭头键或者使用鼠标滚轮点击并拖动,在依赖项对应图上进行移动。

c.将鼠标悬停在依存关系箭头上,检查依存关系类型。例如,MATLAB® 脚本和函数正在由模型回调运行。

GenerateCodeWithSmulinkProjectAPIExample_01.png

2.在依存关系图上选择 MBDController.slx 模型。右键点击该模型并选择打开

3.当模型在 Simulink 中打开后,点击编译按钮为该模型生成代码。或者,使用工程中的 generate_controller_code 快捷方式生成代码。

或者,从命令行窗口为模型生成代码。为了演示此示例,请将写入权限设置为 MBDController.slxc,然后为模型生成代码:

fileattrib('MBDController.slxc', '+w');
evalc('slbuild(''MBDController'')');

4.从工程窗口中关闭工程。

或者,关闭此工程并从命令行窗口运行 clean_up_project

run('clean_up_project');
close(proj_modelBasedDesignCodeGen);

另请参阅

currentProject, openProject

更多信息

相关示例