主要内容

使用Simulink代码导入向导导入自定义代码金宝app

本示例使用C代码为热泵控制器演示如何使用Simulink®代码导入向导将自定义C/ c++代码导入到Simulink库中。金宝app该示例还展示了如何使用MATLAB®中的Simulink Code Importer命令行界面执行等效操作。金宝app有关更多信息,请参见使用Simulink代码导入器导入自定义C/ c++代码金宝app

热泵控制器自定义代码

这些C代码源和头文件包含了热泵控制器的完整代码。

源文件位于src目录:

  • tempController.c

  • utils.c

头文件位于包括目录:

  • tempController.h

  • utils.h

  • controllerTypes.h

该文件tempController.c包含的算法为自定义的C代码的热泵机组。的控制器该文件中的函数使用室温(Troom_in)及设定温度(Tset)作为输入。输出是pump_control_bus带有控制风扇、热泵和热泵方向(加热或冷却)信号的型结构。的pump_control_bus结构有这些字段:fan_cmd,pump_cmd,pump_dir。的pump_control_bus结构类型在文件中定义controllerTypes.h

的输出控制器算法。

温度 条件 系统 状态 风扇 命令 命令 方向 | Troom _ - Tset | < DeltaT _ 风扇 闲置 0 0 D l E DelatT _ 风扇 <= | Troom _ - Tset | < DeltaT _ 风扇 只有 1 0 D l E | Troom _ - Tset | > = DeltaT _ Tset < Troom _ 冷却 1 1 C O O l N G | Troom _ - Tset | > = DeltaT _ Tset > Troom _ 加热 1 1 H E 一个 T N G

控制器函数使用两个效用函数,absoluteTempDifferencepumpDirection中定义的utils.c文件。的absoluteTempDifference函数返回之间的绝对差值TsetTroom_in作为替身。的pumpDirection函数返回其中之一PumpDirection类型枚举值。

温度 条件 方向 Tset < Troom _ 冷却 Tset > Troom _ 加热

PumpDirection枚举类型在文件中定义controllerTypes.h

打开代码导入向导

要打开“代码导入器”向导,请创建一个空的Simulink库金宝appsrc包括找到文件夹并保存它。对于本例,库保存为heatpumpController

然后,在建模选项卡上,选择设计>代码导入器

指定Simulink库金宝app

一旦欢迎页面加载,点击开始开始导入过程。

设置页面:

  1. 金宝appSimulink库文件名使用已保存的库名称自动填充,在本例中,heatpumpController

  2. 输出文件夹自动填充已保存的Simulink库的位置。金宝app

可选地,选择将生成的库添加到Simulink库浏览器金宝app创建一个slblocks.m文件。

slblocks.m文件用于将生成的库添加到Simulink库浏览器中。金宝app有关更多信息,请参见将库添加到库浏览器

点击下一个继续。

注意:下面的MATLAB代码相当于这一步。

obj = 金宝appSimulink。CodeImporter (“heatpumpController”);obj。libraryFileName =“heatpumpController”;obj。OutputFolder =“$ pwd $”;%计算结果为pwd

指定要导入的自定义代码

指定自定义代码页面:

  1. 语言中,选择C

  2. 界面标题,指定所需的头文件。对于本例,请指定tempController.h

  3. 源文件,指定所需的源文件。对于本例,指定tempController.cutils.c文件的位置。src文件夹,\ src \ tempController.c;\ src \ utils.c

  4. 包括目录,指定所需的包含目录。对于本例,请指定\。

然后,单击下一个

点击下一个分析页面。

注意:下面的代码相当于这个步骤。

src和include目录应该位于pwd中obj.CustomCode.InterfaceHeaders =“tempController.h”;obj.CustomCode.Language =“C”;obj.CustomCode.SourceFiles = {“\ src \ tempController.c。”,“\ src \ utils.c。”};obj.CustomCode.IncludePaths =”。\”包括;%分析指定的自定义代码obj.parse ();

指定导入设置

指定要导入的函数

进口页面,选择要导入到Simulink库中的函数。金宝app对于本例,选择控制器。然后,单击下一个

设置块端口规格

对于上一页中选择的每个功能,向导都会生成一个功能端口规范。所选的端口用于生成的C Caller块。

在本例中,端口规范表列出了形式参数Tset,Troom_in,控制器函数。

的标签参数control_out。点击下一个

注意:下面的代码相当于这个步骤。

需要一个成功的obj.parse()来获取函数对象fcnObj = obj.ParseInfo.getFunctions();% fcnObj =%带属性的函数:% Name: "Controller"% CPrototype: "pump_control_bus Controller(real_T Tset, real_T Troom_in);"% PortSpecification: [1×1 金宝appSimulink.CodeImporter.SimulinkPortSpecification]% IsEntry: 1% IsDefined: 1% IsStub: 0% ArrayLayout:未指定% IsDeterministic: 0fcnObj.PortSpecification.ReturnArgument.Label =“control_out”;

指定要导入的类型

接下来,选择要导入到Simulink中的类型。金宝app如果您选择导入的函数需要某种类型,则选中该类型并使其变暗。对于这个例子,pump_control_bus是必需的。向导将创建包含此类型的Simulink数据金宝app字典,并将该字典链接到生成的库。

点击下一个

指定库更新设置

由于此示例使用已保存的Simulink库,因此此页面允许您确认要金宝app在库上执行的更新操作。

  1. 选择覆盖删除任何现有的块,并为选定的自定义代码函数创建新的C Caller块。

  2. 选择更新以保留现有的块,并为选定的自定义代码函数添加新的C Caller块。

对于本例,选择更新,然后按下一个

创建测试线束

此选项仅在您拥有Simulink Test™许可时可用。金宝app

要使用Simulink测试管理器测试导入的自定义代码功能,请选择金宝app为所有导入的功能自动创建测试工具。创建的库中的每个块都将附加到一个内部测试工具。

对于本例,选择跳过。点击下一个生成Simulink库。金宝app

在代码导入之后,向导将创建一个附加到Simulink数据字典的库,该字典定义金宝apppump_control_bus作为一个金宝app仿真软件。公共汽车对象。

注意:下面的代码相当于这个步骤。

%需要Simulink金宝app Test许可证来生成测试线束obj.Options.CreateTestHarness = true;obj.import (“功能”,“控制器”,...“类型”,“pump_control_bus”,...“覆盖”,“关闭”);

如果您有一个现有的项目文件(PRJ文件),您可以选择添加,选择所需的项目文件,并将生成的文件添加到该项目。

点击完成关闭向导。

当你点击完成,选择是否将当前导入设置保存为JSON文件。您可以使用此文件以当前导入设置加载代码导入器向导。

另请参阅

|||