主要内容

出口独立FMU与外部c++代码

这个例子展示了如何将外部c++代码导入仿真软件使用s函数®模型构建器和出口独立FMU。金宝apps函数生成器块允许用户将C / c++代码导入模型的语义通过建立外部代码的s函数包装器。金宝app这个例子演示了这一过程的分阶段方法通过实现一个c++类繁殖,与s函数生成器集成c++代码,作为一个独立的FMU导出模型。

与c++代码实现乘类

下面的代码实现了一个类被集成到仿真软件模型。金宝app类在构造函数中获得价值,用输入值,当用户调用成员函数双用::应用(双)。下面的实现中可以找到包括/src /目录中。

/ /用类标题,下面的代码中定义包括/相乘。高压泵类出口用{公众:乘(双init);~乘以()=违约;双应用(int val);私人:双增益;};/ /用类源,以下代码定义在src /相乘。cpp #包括“相乘。hpp”用::乘(双init){增益=初始化;}双用::应用(双val){返回val *增益;}

导入外部c++代码功能构建器

本节显示了流程外部c++代码集成到仿真软件模型使用s函数构建器块:金宝app

  • 开放仿真软金宝app件模型的s函数生成器。

  • 实例化类在输出功能函数。

  • c++代码路径添加到功能建筑块表。

modelWithSFcnBuilder.png

%打开示例模型与功能建筑块open_system (“FMUExportWithExternalCPP”);% s函数打开Builder块对话框open_system (“FMUExportWithExternalCPP / s函数构建器”);

利用s函数构建器块包括multiply.hpp并实例化c++类在相应的包装器函数。下面的包装器函数实例化并摧毁类的一个实例空白cppwrapper_Start_wrapper (const real_T *, const int_T, void * *)空白cppwrapper_Outputs_wrapper (const real_T *, real_T *, const real_T *, const int_T, void * *)。s函数生成器块使用对话框参数中定义参数表来实例化一个类的实例并创建一个PWork存储指针。

/ /添加以下代码,包括头# include“相乘。高压泵”/ /下面的代码添加到空白cppwrapper_Start_wrapper (const real_T *, const int_T, void * *) / /下面的代码从s函数生成器参数块对话框来实例化类并将它存储在一个PWork向量相乘real_T val = p0 [0];乘* mulPtr =新乘(val);pW [0] = mulPtr;/ /下面的代码添加到空白cppwrapper_Outputs_wrapper (const real_T *, real_T *, const real_T *, const int_T, void * *) / /获得输入值相乘* mulPtr = static_cast <乘* > (pW [0]);y0 [0] = mulPtr - >应用(情况[0]);/ /下面的代码添加到空白cppwrapper_Terminate_wrapper (const real_T *, const int_T, void * *) / /类繁殖破坏的实例仿真终止时乘* mulPtr = static_cast <乘* > (pW [0]);删除mulPtr;

一个完整的示例代码如下所示:

s函数生成器块要求包括目录建立外部c++代码。用户可以定义c++文件路径和进入功能表生成器和指定的目标语言语言设置组合框。对s函数Bluilder块参考,请参阅:创建一个功能建筑块和指定设置

在这个例子中,我们添加以下路径函数生成器表。点击构建按钮功能构建的代码生成器对话框。

sfunction_library_table.png

% c++源和头添加到库表处理= getSimul金宝appinkBlockHandle (“FMUExportWithExternalCPP / s函数构建器”);金宝appSimulink.SFunctionBuilder.add(处理,“LibraryItem”,“LibraryItemTag”,“INC_PATH”,“LibraryItemValue”fullfile (pwd,“包括”));金宝appSimulink.SFunctionBuilder.add(处理,“LibraryItem”,“LibraryItemTag”,“SRC_PATH”,“LibraryItemValue”fullfile (pwd,“src”));金宝appSimulink.SFunctionBuilder.add(处理,“LibraryItem”,“LibraryItemTag”,“入口”,“LibraryItemValue”,“multiply.cpp”);%建立功能金宝appSimulink.SFunctionBuilder.build(处理);
生成的cppwrapper。cpp的....请稍等编译cppwrapper。cpp的....请稍等cppwrapper # # #”。cpp cppwrapper_wrapper成功创建# # #。cpp cppwrapper成功创建# # # s函数。mexa64”成功创建

库表还允许用户指定外部共享/静态库引用自定义代码。如何添加外部库的更多信息,参见使用的库表指定外部代码和路径

注意:共享库的依赖性在独立FMU可能冲突象征,库加载顺序冲突和数据赛车导致模拟误差的问题。

作为独立FMU金宝app出口仿真软件模型

构建和模型导出到一个独立的FMU,单击下拉按钮保存模拟选项卡并选择独立FMU

下面的图显示了出口独立FMU对话框中,用户可以把源代码到FMU并生成模型利用后出口。阅读更多关于独立FMU导出功能:独立FMU出口金宝app仿真软件模型

fmuexportdialog.png

% 2.0 FMU联合仿真模型导出到独立exportToFMU2CS (“FMUExportWithExternalCPP”,“CreateModelAfterGeneratingFMU”,“上”);
设置系统联合仿真目标FMU模型“FMUExportWithExternalCPP”。设置硬件实现>设备类型模型的MATLAB主机“FMUExportWithExternalCPP”。# # #“GenerateComments”是禁用的联合仿真独立FMU出口。模型建立目标:总结构建模型重建行动的原因= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = FMUExportWithExternalCPP代码生成和编译。代码生成信息文件不存在。1 1模型的建立(0模型已经更新)构建持续时间:0 h 0米24.825秒# # #独立FMU联合仿真模型已成功出口到:“/ tmp / Bdoc23a_2213998_1264587 / tp6304bd43 / simulinkcompiler-ex17580767 / FMUExportWithExternalCPP.fmu”。金宝app

一个独立的FMU中生成目标文件夹指定从导出对话框。用户还可以使用从FMU访问源代码选择包源代码到FMU包中。请注意,FMU只接受目标landguage CR2022a。混合compilng c++函数生成器功能块和仿真软件模型结果与C Builder块生成包装器函数调用金宝app协定(“走读生C”)。

/ /下面的代码是在c++函数名C联系外面的“C”{空白cppwrapper_Start_wrapper (const real_T *, const int_T, void * *);空白cppwrapper_Outputs_wrapper (const real_T *, real_T *, const real_T *, const int_T, void * *);空白cppwrapper_Terminate_wrapper (const real_T *, const int_T, void * *);}
%关闭所有模型bdcloseFMUExportWithExternalCPP;bdcloseFMUExportWithExternalCPP_harness;