文档

自定义生成的c++类接口

通过设置模型配置参数代码接口包装(金宝app仿真软件编码器)c++类,您可以生成一个c++类接口来建模代码。生成的接口将所需的模型数据封装到c++类属性中,并将模型入口点函数封装到c++类方法中。c++类封装的好处包括:

  • 更好地控制对模型数据的访问

  • 能够多重实例化模型类

  • 更容易将模型代码集成到c++编程环境中

c++类封装也适用于右击构建非虚拟子系统。(有关应用需求的信息,请参阅为非虚拟子系统配置c++类接口.)

在模型代码中生成C++类接口:

  1. 配置模型以使用MathWorks提供的基于ert的系统目标文件®

  2. 在“配置参数”对话框中设置以下参数:

    • 语言c++

    • 代码接口包装c++类

  3. 可以选择使用图形用户界面(GUI)或应用程序编程接口(API)为模型代码配置相关的c++类接口设置。

  4. 生成模型代码并检查结果。

要开始使用示例,请参见C++类控件的简单使用.有关为模型代码配置c++类接口的更多细节,请参见使用图形界面自定义C++类接口以编程方式定制c++类接口. 有关适用的限制,请参阅C++类接口控件的局限性

有关c++类代码生成的示例,请参见自定义接口生成的c++代码调用的C代码

C++类控件的简单使用

这个例子演示了一个简单的用法c++类包装代码接口。它从一个示例模型生成c++类代码接口,而不需要对默认设置进行大量修改。

有关设置C++类参数的详细信息,请参见下面的部分,从使用图形界面自定义C++类接口

为Simulink生成c++类接口金宝app®型号:

  1. 打开希望为其生成c++类代码接口的模型。本例使用了该模型rtwdemo_counter.将模型的副本保存到可写位置。

  2. 配置模型以使用MathWorks提供的基于ert的系统目标文件。

  3. 设定模型组态参数语言c++.模型配置参数的设置代码接口包装更改c++类。通过单击保存模型配置更改应用

    请注意

    要立即生成c++类代码的默认样式,而不研究相关的模型配置选项,请跳过步骤4到步骤8。

  4. 打开接口窗格,并检查代码接口部分。当您选择c++类为您的模型编写代码接口,在C++中出现附加的C++类接口控件代码接口部分。看到配置c++代码接口参数有关这些控件的说明,请参见。根据应用程序要求修改参数设置。

  5. 单击。打开Configure c++类接口对话框配置C++类接口按钮。使用对话框为生成的模型类配置步骤方法。对话框最初显示一个用于配置默认的步骤方法用于模型类。在这个视图中,您可以为您的模型指定模型类名、步骤方法名和命名空间。

    看到为模型类配置步骤方法有关这些控件的说明,请参见。

    如果默认的接口样式满足您的需要,请跳过步骤6到步骤8。

  6. 如果您希望根级模型输入和输出作为步骤方法的参数,请设置功能规范I/O参数步进方法.对话框显示了为模型类配置I/O参数样式步骤方法的视图。看到为模型类配置步骤方法有关控件的说明。

  7. 单击获取默认配置按钮。一个配置C++类接口子平面出现。子平面显示模型的初始界面配置。看见通过I / O参数有关控件的说明。

  8. 如果您想配置为您的模型步骤方法生成的I/O参数,请继续修改和验证接口,直到您对步骤方法配置感到满意为止。使用对话框控件配置I/O参数属性。例如,在配置C++类接口子窗格中的输入参数时,可以更改的值类别价值指针并更改限定符没有一个常数*.预览会更新以反映您的更改。单击验证按钮,验证修改后的界面配置。要保存更改,请单击应用好吧

    如果选择不配置I/O参数,请单击取消退出对话框。

  9. 中的模型生成代码代码查看,查看生成的代码。观察所需的模型数据被封装到c++类属性中,模型入口点函数被封装到c++类方法中。例如,选择filertwdemo_counter.h查看模型的类声明。

如果您为模型步骤方法配置了自定义I/O参数(可选的步骤8),请检查步骤方法的生成代码rtwdemo_counter.hrtwdemo_counter.cpp.这些论点应该反映出你的变化。例如,如果您对输入参数时,输入参数应显示为const int32_T * arg_Input

使用图形界面自定义C++类接口

选择c++类代码接口封装

为c++类代码打包配置一个模型:

  1. 设定模型组态参数语言c++

  2. 设置参数代码接口包装c++类

这些参数设置:

  • 禁用模型配置参数c++类不支持。金宝app有关详细信息,请参见C++类接口控件的局限性

  • 添加额外的c++类接口参数,下一节将对此进行描述。

配置c++代码接口参数

当您为选择配置一个模型时c++类代码接口的打包接口窗格显示应用于c++接口的参数:

  • 多实例代码错误诊断

    指定当模型违反生成多实例代码的要求时显示的诊断的严重级别。

    • 没有一个—不显示诊断消息继续构建。

    • 警告-显示警告信息后继续构建。

    • 错误(默认)-显示错误消息后中止生成。

  • 去除实时模型数据结构中的错误状态字段

    指定是否从生成的实时模型数据结构中忽略错误状态字段rtModel(默认为关闭)。选择此选项可减少内存使用。

    请注意,选择此选项可能会导致代码生成器忽略rtModel从生成的代码中提取数据结构。

  • 参数的可见性

    指定是否生成块参数结构为公共私人受保护的c++模型类的数据成员(私人默认情况下)。

  • 参数访问

    指定是否为c++模型类的块参数生成访问方法(没有一个默认情况下)。您可以选择非线性访问方法(方法)或内联访问方法(内联方法).

  • 外部I/O访问

    指定是否为C++模型类生成根级I/O信号的访问方法(没有一个默认情况下)。如果要生成访问方法,可以使用以下选项:

    • 生成非内联或内联访问方法。

    • 生成每信号访问方法。您可以生成一系列的设置和获取方法在一个信号的基础上,或生成一组方法,外部输入的地址作为参数,结构,外部输出(如果适用),只有一个get方法返回一个引用外部输出结构。为基于结构的访问方法生成的代码具有以下一般形式:

      类ModelClass{…// Root inports设置方法void setExternalInputs(const ExternalInputs* pExternalInputs);//根outports的get方法const ExternalOutputs & getExternalOutputs() const;}

    此参数仅在您为模型类使用默认样式步骤方法时影响生成的代码;如果使用I/O arguments样式的单步方法显式传递根级别I/O信号的参数。有关详细信息,请参阅传递默认参数通过I / O参数

  • 配置C++类接口

    打开Configure c++类接口对话框,该对话框允许您为模型类配置步骤方法。有关更多信息,请参见为模型类配置步骤方法

相关但不太常用的接口参数显示在下先进的参数

  • 需要终止函数

    指定是否生成模型_terminate方法(默认为开启)。这个函数包含模型终止代码,应该在系统关闭时调用。

  • 结合信号/状态结构

    指定是否将全局块信号和全局状态数据合并到生成代码中的一个数据结构中(默认情况下清除)。选择此参数可减少RAM并提高生成代码的可读性。

  • 内部数据的可见性

    指定是否生成内部数据结构,如块I/O、DWork向量、运行时模型、过零和连续状态公共私人受保护的c++模型类的数据成员(私人默认情况下)。

  • 内部数据访问

    指定是否为c++模型类的内部数据结构生成访问方法,例如块I/O、DWork向量、运行时模型、过零和连续状态(没有一个默认情况下)。您可以选择非线性访问方法(方法)或内联访问方法(内联方法).

  • 产生析构函数

    指定是否为c++模型类生成析构函数(默认选择)。

  • 对模型块实例化使用动态内存分配(金宝appSimulink编码器)

    对于包含模型块,指定生成的代码是否应该在模型对象注册期间使用动态内存分配,为配置了c++类接口的引用模型实例化对象(默认清除)。如果选择此参数,则在实例化模型引用层次结构中顶层模型的对象期间,生成的代码将使用该操作符为引用的模型实例化对象。

    选择此参数将父模型从必须维护其直接子模型之外的被引用模型的信息中解放出来。清除此参数意味着父模型将维护其所引用模型的信息,包括其直接和间接子模型。

    • 如果选择该参数,则a坏蛋根据c++标准,如果在使用时发生内存不足错误,则可能引发异常.提供代码来捕获和处理坏蛋发生内存不足错误时的异常在构造顶级模型对象期间调用。

    • 如果您选择对模型块实例化使用动态内存分配基本模型包含一个模型块时,构建过程可能会在模型类的私有部分中生成复制构造函数和赋值操作符函数。函数的目的是防止模型类中的指针成员被其他代码复制。有关更多信息,请参见模型类复制构造函数和赋值操作符

为模型类配置步骤方法

要为模型类配置步骤方法,请在代码生成>接口窗格中,单击配置C++类接口按钮,选择时可用c++类模型的代码接口打包。在出现的Configure c++类接口对话框中,以两种样式中的任意一种配置模型类的step方法:

默认的步骤方法金宝app支持单速率模型和多速率模型。您可以将模型配置为单任务操作或多任务操作。该方法还支持虚拟总线跨界。金宝app

I/O参数步进方法金宝app支持单速率模型和多速率模型。您可以为单任务操作配置模型。

通过默认参数。配置c++类接口对话框最初显示了一个用于配置默认的步骤方法用于模型类。

  • 步方法名称

    允许您指定一个步骤方法名,而不是默认的,一步

  • 类名

    允许您指定默认以外的模型类名,模型模型类

  • 名称空间

    允许您为模型类指定名称空间。如果指定了名称空间,则在为模型类生成的代码中发出名称空间。的名称空间参数提供了C++模型类的范围。在模型引用层次结构中,可以为每个引用的模型指定不同的命名空间。

  • 阶跃函数预览

    显示当前配置的模型步骤函数原型的预览。在验证当前配置后,预览显示会动态更新。

    step函数参数列表为模型的每个根级I/O端口提供了一个条目。此列表不包括模型作为引用模型时生成的代码中可能出现的模型参数参数。例如,一个模型sldemo_mdlref_counter_paramargs是否有带参数名的导入arg_input,带有参数名的输出端口arg_output,以及饱和块,其限制具有工作区参数参数名lower_saturation_limitupper_saturation_limit

    该模型的阶跃函数预览如下:

    sldemo_mdlref_counter_paramargsModelClass:: step (arg_input, * arg_output)

    生成代码中的函数原型不同于预览。生成的代码中的原型(带有附加的模型参数参数)是:

    sldemo_mdlref_counter_paramargsModelClass::step (real_T arg_input, real_T *arg_output, real_T rtp_lower_saturation_limit, real_T rtp_upper_saturation_limit)
  • 验证

    验证当前模型步骤功能配置。的验证窗格显示故障的状态和解释。

通过I / O参数。如果您选择I/O参数步进方法功能规范菜单中,该对话框显示用于为模型类配置I/O参数样式步骤方法的视图。

  • 获取默认配置

    单击此按钮获取初始界面配置,该配置为进一步定制提供了起点。

  • 阶跃函数预览

    显示当前配置的模型步骤功能原型的预览。预览会在您进行配置更改时动态更新。

  • 验证

    验证当前模型步骤功能配置。的验证窗格显示故障的状态和解释。

当你点击获取默认配置,配置C++类接口子窗格出现在对话框中,显示初始界面配置。例如:

  • 步方法名称

    允许您指定一个步骤方法名,而不是默认的,一步

  • 类名

    允许您指定默认以外的模型类名,模型模型类

  • 名称空间

    允许您为模型类指定名称空间。如果指定了名称空间,则在为模型类生成的代码中发出名称空间。的名称空间参数提供了C++模型类的范围。在模型引用层次结构中,可以为每个引用的模型指定不同的命名空间。

  • 订单

    显示每个参数的数字位置。使用向上下来按钮更改参数顺序。

  • 端口名称

    显示每个参数的端口名(不能使用此对话框进行配置)。

  • 端口类型

    显示端口类型,轮廓尺寸外港,每个参数(不能使用此对话框配置)。

  • 类别

    显示每个参数的传递机制。要更改参数的传递机制,请选择价值指针参考从论证的类别菜单。

  • 参数名称

    显示每个参数的名称。若要更改参数名称,请单击参数的名称参数名称字段,将光标定位为文本输入,并输入新名称。

  • 限定符

    显示了常量每个参数的类型限定符。若要更改参数的限定符,请从参数中选择可用的值限定符菜单。取值包括:

    • 没有一个

    • 常量(值)

    • 常数*(由指针引用的值)

    • const *常量(由指针和指针本身引用的值)

    • 常数&(引用所引用的值)

提示

当模型包含引用的模型时,常量被引用模型的指定步骤函数接口的根输入参数的类型限定符被设置为没有一个在被引用的模型的父类中,源信号的限定符被设置为一个非没有一个,代码生成通过生成丢弃的类型转换来尊重被引用模型的接口规范常量来源信号的类型限定符。若要覆盖此行为,请添加常量引用模型的类型限定符。

将命名空间用于C++模型类的范围

嵌入式编码器®为使用c++类代码接口打包生成的模型类提供命名空间控制。在“配置c++类接口”对话框中,使用名称空间参数指定模型类的名称空间。如果指定了名称空间,则在为模型类生成的代码中发出名称空间。要在模型引用层次结构中限定c++模型类的范围,可以为每个被引用的模型指定不同的名称空间。

有关名称空间控件的示例,请参见示例模型rtwdemo_cppclass.该模型按如下方式分配名称空间:

  • 托普恩斯对于顶级模型rtwdemo_cppclass

  • MiddleNS对于参考模型rtwdemo_cppclass_refmid

  • 底部对于参考模型rtwdemo\u cppclass\u refbot

如果使用默认设置构建模型,则可以检查每个模型生成的头文件和源文件,以查看命名空间是在哪里发出的。例如,名称空间模型设置rtwdemo_cppclass_refmid如下所示,然后是模型头文件和源文件中发出的名称空间代码的摘录。

42 // rtwdemo_cppclass_refmid模型的类声明名称空间MiddleNS{44类中间类{45//公共数据和函数成员46//公共:47//模型入口点函数…52//模型步骤函数53 void StepMethod(const real_T*arg_In1,const real_T&arg_In2,real_T 54*arg_Out1,real_T*arg_Out2);…87};88}
16 #include "rtwdemo_cppclass_refmid_private.h" 16 #include "rtwdemo_cppclass_refmid_private.h" 16 #include "rtwdemo_cppclass_refmid_private.h名称空间MiddleNS19{20 //模型step函数21 void midleclass::StepMethod(const real_T *arg_In1, const real_T &arg_In2, 22 real_T *arg_Out1, real_T *arg_Out2) 23{…43}…83}

为非虚拟子系统配置c++类接口

如果满足以下要求,你可以为在Simulink模型中右键构建非虚拟子系统配置c++类接口:金宝app

  • 模型被配置为c++语言和c++类包装代码接口。

  • 这个子系统可转换为一个子系统模型块使用函数金宝appSimulink.SubSystem.convertToModelReference.有关参考模型转换需求,请参阅Simulink参考页面金宝app金宝appSimulink.SubSystem.convertToModelReference

为满足要求的子系统配置C++类接口:

  1. 打开包含模型并选择子系统块。

  2. 输入以下MATLAB®命令:

    RTW.configSubsystemBuild (gcb)

    哪里华东桐柏是Simuli金宝appnk的功能吗华东桐柏,返回当前块的完整块路径名。

    这个命令打开了一个子系统,该子系统相当于前面的章节详细描述的配置C++类接口对话框序列。为模型类配置步骤方法.(有关使用MATLAB命令的更多信息,请参见RTW.configSubsystemBuild.)

  3. 使用Configure c++类接口对话框为子系统配置c++类设置。

  4. 右键单击子系统并选择C / c++代码>构建这个子系统

  5. 当子系统构建完成时,您可以在生成的文件和HTML代码生成报告中检查c++类接口。

以编程方式定制c++类接口

如果您选择代码接口包装选项c++类对于您的模型,您可以使用c++类接口控制函数(列于c++类接口控制函数)以编程方式为模型类配置step方法。

这些功能的典型用法包括:

  • 从Simulink模型的默认配置信息开始,创建并验证一个新的步骤方法接口金宝app

    1. 创建一个特定于模型的c++类接口objRTW.ModelCPPDaultClassobj环球套票。ModelCPPArgsClass,在那里obj返回新创建的空C++类接口的句柄。

    2. 使用。将c++类接口附加到加载的基于ert的Simulink模型金宝appattachToModel

    3. 使用方法从模型中获取默认的c++类接口配置信息getDefaultConf

    4. 使用得到函数中列出c++类接口控制函数测试或重置模型类名称和模型步骤方法名称。此外,如果使用的是I/O arguments样式的步骤方法,则可以测试和重置参数名称、参数位置、参数类别和参数类型限定符。

    5. 验证c++类接口使用runValidation.(如果验证失败,使用错误消息信息runValidation返回来解决问题。)

    6. 方法保存模型,然后生成代码rtwbuild函数。

  • 修改并验证Simulink模型的现有步骤方法接口金宝app

    1. 使用下面的方法获取已存在的特定于模型的c++类接口的句柄,该类接口附加到已加载的基于ert的Simulink模型金宝appobjRTW.GetClassInterface规范型号名称,在那里型号名称字符向量指定加载的基于ert的Simulink模型的名称,以及金宝appobj返回附加到指定模型的c++类接口的句柄。如果模型没有附加的c++类接口配置,则该函数返回[]

    2. 使用得到函数中列出c++类接口控制函数测试或重置模型类名和模型步骤方法名。此外,如果返回的接口使用I/O参数样式的步骤方法,您可以测试和重置参数名称、参数位置、参数类别和参数类型限定符。

    3. 验证c++类接口使用runValidation.(如果验证失败,使用错误消息信息runValidation返回来解决问题。)

    4. 方法保存模型,然后生成代码rtwbuild函数。

您不应该在多个模型中使用相同的特定于模型的c++类接口控件对象。如果您这样做,您对一个模型中的步骤方法配置所做的更改将传播到其他模型,这通常是不可取的。

c++类接口控制函数

函数 描述
attachToModel 将特定于模型的c++类接口附加到加载的基于ert的Simulink模型金宝app
getArgCategory 从模型特定C++类接口获取Simulink模型端口的金宝app参数类别
getArgName 从特定于模型的c++类接口获取Simulin金宝appk模型端口的参数名称
getArgPosition 从模型特定C++类接口获取SIMULINK模型端口的金宝app参数位置
getArgQualifier 从特定于模型的c++类接口获取Simulink模型端口的参数类型金宝app限定符
getClassName 从特定于模型的c++类接口获取类名
getDefaultConf 从Simulink模型中获取特定于模型的C++类接口的默认配置信息金宝app
getNamespace 从特定于模型的c++类接口获取命名空间
getNumArgs 从特定于模型的c++类接口获取步骤方法参数的数量
getStepMethodName 从特定于模型的c++类接口获取步骤方法名称
RTW.configSubsystemBuild 打开GUI配置C函数原型或C++类接口,用于指定子系统的右键生成
RTW.GetClassInterface规范 获取特定模型C++类接口控制对象的句柄
runValidation 在Simulink模型上验证特定于模型的C++类接口金宝app
setArgCategory 模型专用C++类接口中SIMULINK模型端口的设置金宝app参数类
setArgName 在特定于模型的c++类接口中设置Simuli金宝appnk模型端口的参数名
setArgPosition 在特定于模型的c++类接口中设置Simulink模型金宝app端口的参数位置
setArgQualifier 在特定于模型的c++类接口中为Simulink模型端口设置参数类金宝app型限定符
setClassName 在特定于模型的c++类接口中设置类名
集合名称空间 在特定于模型的C++类接口中设置命名空间
setStepMethodName 在特定于模型的c++类接口中设置步骤方法名

为模型类配置步骤方法

下面的示例MATLAB脚本配置的步骤方法rtwdemo_counter类,使用c++类接口控制函数

%%打开RtDeMoTo计数器模型rTwiteOMO计数器%%,选择Et.TLC作为系统SETIOPARAM(GCS,‘Stand TalkFipe’,‘Ert.TLC’)的系统目标文件%%,选择C++作为模型SETIOPARAM(GCS,‘TalangLang',‘C++')的目标语言,%%选择C++类作为模型SETIOPARAM的代码接口封装(GCS,'CoDeFielPurpAkCalp','C++类'%1)%1设置I/O参数样式步方法(CMD Off= GUI on)SETIPARAM(GCS,‘ZooExelalMeLoad启动’,‘OFF’)%%,使用I/O参数样式步方法创建C++类接口,A= RtW.MealCPPARGGSC类%%将C++类接口附加到模型附件模型(A,GCS)%%从模型GETDebug TCONF(A)获得默认C++类接口配置%%将输出端口参数从位置2移动到位置1 SETARGSTATE(A,‘输出’,1)%%,将模型步骤方法名称从STEP到STEP方法SET STEPMODENDATION(A,‘STEP方法)重置%1,改变输入端口参数名称、类别和限定符StasARGNAMEY(a,'Input','inputArg')setArgCategory(a,'Input','Pointer')setArgQualifier(a,'Input','const*')%%根据模型验证函数原型[status,message]=runValidation(a)%%如果验证成功,则在状态rtwbuild(gcs)结束时生成代码和生成

为c++类代码生成指定自定义存储类

配置一个Simulink参数,金宝app信号,或状态使用自定义存储类(CSC)与c++类代码生成:

  1. 打开一个基于ERT的模型语言被设置为c++代码接口包装被设置为c++类

  2. 打开“配置参数”对话框。

  3. 代码生成>接口窗格中,设置参数多实例代码错误诊断(金宝appSimulink Coder)的值错误

  4. 如果参数忽略自定义存储类被选中,清除它。

    应用更改。

  5. 在模型中,为参数、信号或状态选择自定义存储类。例如,选择一个信号,打开它的属性对话框,并查看它的代码生成选项。在存储类下拉列表,选择自定义存储类,然后配置其属性。应用更改。

    c++类代码生成不支持以下存储类:金宝app

    • 存储类挥发性规范。

    • 类型存储类其他,除了GetSet

  6. 生成的代码。

  7. 检查文件模型.h模型. cpp观察存储类在生成的C++代码中的使用。

模型类复制构造函数和赋值操作符

当需要安全地处理指针成员时,代码生成会自动向c++类声明添加复制构造函数和赋值操作符。当存在以下两个条件时,将构造函数和操作符添加为私有成员函数:

  • 模型配置参数对模型块实例化使用动态内存分配(金宝appSimulink Coder)设置。

  • 基本模型包含一个模型街区模型块不直接或间接位于块参数为的子系统内功能包装被设置为可重用的功能

在这些条件下,软件生成私有复制构造函数和赋值操作符,以防止模型类中的指针成员被其他代码复制。

为了防止生成这些函数,可以考虑清除参数对模型块实例化使用动态内存分配

下面的代码摘录显示了生成的代码模型.h具有指针成员的模型类的代码。(寻找……的例子MiddleClass_ptr).复制构造函数和赋值操作符声明如大胆的

中产阶级;///Bottom model instance typedef MiddleClass*MiddleClass_ptr;../模型cppclass\u top Class top{…//私有数据和函数成员private://Block signals BlockIO\u cppclass\u top cppclass\u top\u B;//块状态D_Work\u cppclass\u top\u DWork;//实时模型RT_model\u cppclass\u top cppclass\u top\u top\u M;//私有成员函数对于子系统“/subsystem”void cppclass_top_subsystem_Init();void cppclass_top_subsystem_Start();void cppclass_top_subsystem();//复制构造函数Top(const Top &rhs);//赋值操作符top&rhs = (const Top &rhs);//模型实例变量为'/底部模型实例'};

C++类接口控件的局限性

  • 如果模型有一个自定义模型step函数,其中标量输出通过值传递,并在有条件执行的上下文中更新,则将输出配置为通过指针传递。在“配置c++类接口”对话框中,设置类别指针.有条件执行上下文的例子包括:

    • 当模型用作参考模型时,输出的采样时间比模型的基本速率要慢。

    • 输出被写到一个有条件执行的子系统中。

    • 输出由一个可以有条件地更新输出的s函数写入。

    • 输出由命中交叉块写入。

    • 输出由速率转换块写入。

  • c++类模型配置参数的值代码接口包装不支持某些Simu金宝applink模型配置参数。金宝app选择c++类禁用这些参数:

    • 标识符的格式控制subpane上标识符窗格

    • 文件自定义模板的参数模板窗格

      的代码和数据模板模板窗格支持金宝appc++类代码生成。然而,以下模板文件特性是其他语言选择所支持的,而c++类生成代码却不支持:金宝app

      • 模板区段外的自由格式文本

      • 自定义令牌

      • TLC命令(代币)

    • 全局数据放置(仅自定义存储类)subpane上代码的位置窗格

    选择c++类还禁用代码映射编辑器(请参阅配置用于模型数据和函数类别的默认C代码生成)。无法将默认存储类、内存节或函数模板应用于模型。

  • 上可用的数据交换接口接口在“配置参数”对话框中,只支持C API接口金宝appc++类代码生成。如果您选择外部模式ASAP2接口,代码生成失败,出现验证错误。

  • step方法规范的I/O参数风格支持单速率模型和多速率单任务模型,但不支持多速率多任务模型。金宝app

  • 如果你有一个状态流®许可证,用于驻留在根模型中的状态流图I/O参数步进方法使用模型根输入值或调用使用模型根输入值的子系统的函数规范,请执行以下操作之一以生成代码:

    • 在状态流程图中,清除在初始化时执行(输入)图表复选框。

    • 插入一个仿真软件金宝app信号转换在根导入之后立即阻塞。在信号转换块参数对话框中,选择将此块从“块减少”优化中排除

  • 如果模型根导入值连接到Simscape™转换块,则插入一个Simulink金宝app信号转换块之间的根导入和Simscape转换块。在信号转换块参数对话框中,选择将此块从“块减少”优化中排除

  • 当构建一个被配置为生成c++类接口的引用模型时:

    • 当被引用的模型不能具有组合输出/更新函数时,不要使用c++类接口。案例包括具有连续样本时间或保存状态的模型。

    • 当被引用模型使用I/O参数step方法时,不要使用虚拟总线作为被引用模型的输入或输出。当总线信号交叉引用模型边界时,要么使用非虚拟总线,要么使用Default step方法。

  • 如果c++封装接口不是默认值,则该值将被忽略为代码生成传递固定大小的标量根输入值参数。有关详细信息,请参阅为代码生成传递固定大小的标量根输入值(金宝app模型)。

自定义接口生成的c++代码调用的C代码

自定义从模型生成并希望从C或c++代码调用的c++代码的接口。要从C代码调用c++代码,需要将c++类接口封装在生成的代码中。

使用自定义c++封装接口配置模型

如果从一个新模型开始:

  1. 创建具有至少一个输入端口和至少一个输出端口的模型。

  2. 打开嵌入式编码器应用程序。

  3. 设定模型组态参数语言c++

  4. 设定模型组态参数代码接口包装c++类

  5. 在“模型配置参数”对话框中的代码生成>接口窗格中,单击配置C++类接口.根据需要定制接口。看到自定义生成的c++类接口

关于c++封装接口

一个生成的C++类封装了模型数据和方法。使用嵌入式编码器®,封装接口可以通过模型中性配置参数和特定于模型的配置来配置。该接口支持两种类型的模型步骤方法接口:默认步骤方法和I/O参数步进方法。设置界面样式以自定义step method原型。使用和默认step method样式界面可实现最大化的支持功能集,包括跨模型边界的虚拟总线和多任务界面。金宝app

open_system (“rtwdemo_cppuclass”);

生成代码

  1. 打开示例模型rtwdemo_cppclass

  2. 将模型的副本保存到可写位置。

  3. 打开嵌入式编码器应用程序。

  4. 生成的代码。

  5. 检查生成的源代码。至少,检查定制的模型步骤和初始化类ModelClass: step_method模型类::初始化在文件rtwdemo_cppclass.cpp

  6. 查看接口配置。在模型中,双击标记为黄色的按钮查看接口配置. 或者,在上的“模型配置参数”对话框中代码生成>接口窗格中,单击配置C++类接口.观察step函数的自定义参数以及它们与生成的代码的关系。

更改为默认参数和重建模型

如果从一个新模型开始,填充c++类接口的初始配置。

  1. 在“模型接口”对话框中,单击获取默认配置

  2. 关闭“模型接口”对话框。

  3. 关闭“模型配置参数”对话框。

  4. 生成的代码。

  5. 使用代码生成报告来检查定制的模型步骤和初始化类ModelClass: step_method模型类::初始化里面的文件rtwdemo_cppclass.cpp.观察step函数的默认参数以及它们与生成的代码之间的关系。

应用自定义参数和重建模型

  1. 在模型中,双击标记为黄色的按钮查看接口配置.或者,模型配置参数对话框,在代码生成>接口窗格中,单击配置C++类接口

  2. 在C++C++类接口对话框中,移动端口名着干活到顺序的顶端,并设置它类别价值

  3. 关闭“配置c++类接口”对话框。

  4. 关闭“模型配置参数”对话框。

  5. 生成的代码。

  6. 在生成的文件中rtwdemo_cppclass.cpp,检查自定义模型步骤和初始化类ModelClass: step_method模型类::初始化.观察自定义参数出现在生成的代码中。

将默认接口(最大支持)与I/O接口参数进行比较金宝app

rtwdemo_cppclass模型提供按钮,用于在默认步骤方法(多任务模式)和I/O参数步进方法之间切换C++类接口的功能规范。

  1. 通过双击标记的黄色按钮,配置默认步骤方法的功能规范在多任务模式下使用默认接口

  2. 生成的代码。

  3. 在生成的代码中,检查模型步骤和初始化类。

  4. 双击标记为的黄色按钮,为I/O arguments step方法配置函数规范使用I/O参数接口

  5. 生成的代码。

  6. 在生成的代码中,检查模型步骤和初始化类。

应用c++类接口与引用模型

rtwdemo_cppclass_refmid模型是实例模型中的参考模型rtwdemo_cppclass.该引用模型展示了如何生成一个可定制的c++类接口,以在模型引用层次结构中为引用模型生成代码。

  1. 开放模式rtwdemo_cppclass_refmid

  2. 打开嵌入式编码器应用程序。

  3. 双击带有MdlRef blks的子系统街区n, double-click themiddle_instance_1块。

  4. 查看接口的配置rtwdemo_cppclass_refmid模型双击标记为的黄色按钮查看接口配置. 或者,在“模型配置参数”对话框中的代码生成>接口窗格中,单击配置C++类接口.观察被引用模型的类接口的配置与顶级模型的类接口不同(例如,名称空间不同)。

open_system (“rtwdemo_cppclass_refmid”);

在模型引用层次结构中应用混合的C/ c++接口样式

rtwdemo_cppclass_refc模型是示例模型中的引用模型rtwdemo_cppclass.所引用的模型展示了如何在模型引用层次结构中使用混合的接口样式。该模型使用C代码接口风格(用c++编译器编译),而同一模型层次结构中的其他模型则使用c++类接口。

  1. 开放模式rtwdemo_cppclass

  2. 双击带有MdlRef blks的子系统街区n, double-click theref_c_instance块。

  3. 打开嵌入式编码器会出现一个对话框,询问你是否想要生成顶层模型的代码rtwdemo_cppclass或者对于活动模型rtwdemo_cppclass_refc

  4. 单击打开主动模型作为顶部按钮。

  5. 在为模型打开的金宝appSimulink编辑器窗口中rtwdemo_cppclass_refc,打开嵌入式编码器应用程序。

  6. 检查模型配置参数的设置代码接口包装. 设置为那种一次性的功能(对于C函数原型)。然后关闭“模型配置参数”对话框。

  7. 单击代码映射- C选项卡。

  8. 在代码映射编辑器中,单击功能选项卡。

  9. 单击更新代码的映射按钮。

  10. 在表中,查看步骤函数的函数原型预览。

  11. 关闭模式。

open_system (“rtwdemo_cppclass_refc”);

更多关于

有关更多详细信息和限制,请参见自定义生成的c++类接口在嵌入式编码器®文档中。