使用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
。
的输出控制器
算法。
的控制器
函数使用两个效用函数,absoluteTempDifference
和pumpDirection
中定义的utils.c
文件。的absoluteTempDifference
函数返回之间的绝对差值Tset
和Troom_in
作为替身。的pumpDirection
函数返回其中之一PumpDirection
类型枚举值。
的PumpDirection
枚举类型
在文件中定义controllerTypes.h
。
打开代码导入向导
要打开“代码导入器”向导,请创建一个空的Simulink库金宝appsrc
和包括
找到文件夹并保存它。对于本例,库保存为heatpumpController
。
然后,在建模选项卡上,选择设计>代码导入器。
指定Simulink库金宝app
一旦欢迎页面加载,点击开始开始导入过程。
在设置页面:
的金宝appSimulink库文件名使用已保存的库名称自动填充,在本例中,
heatpumpController
。的输出文件夹自动填充已保存的Simulink库的位置。金宝app
可选地,选择将生成的库添加到Simulink库浏览器金宝app创建一个slblocks.m文件。
的slblocks.m
文件用于将生成的库添加到Simulink库浏览器中。金宝app有关更多信息,请参见将库添加到库浏览器。
点击下一个继续。
注意:下面的MATLAB代码相当于这一步。
obj = 金宝appSimulink。CodeImporter (“heatpumpController”);obj。libraryFileName =“heatpumpController”;obj。OutputFolder =“$ pwd $”;%计算结果为pwd
指定要导入的自定义代码
在指定自定义代码页面:
为语言中,选择
C
。为界面标题,指定所需的头文件。对于本例,请指定
tempController.h
。为源文件,指定所需的源文件。对于本例,指定
tempController.c
和utils.c
文件的位置。src文件夹,\ src \ tempController.c;\ src \ utils.c
。为包括目录,指定所需的包含目录。对于本例,请指定
\。
。
然后,单击下一个。
点击下一个在分析页面。
注意:下面的代码相当于这个步骤。
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在库上执行的更新操作。
选择覆盖删除任何现有的块,并为选定的自定义代码函数创建新的C Caller块。
选择更新以保留现有的块,并为选定的自定义代码函数添加新的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文件。您可以使用此文件以当前导入设置加载代码导入器向导。
另请参阅
使用C调用者块集成C代码|C调用者|向库浏览器添加库|使用Simulink代码导入器导入自定义C/ c++代码金宝app