主要内容

从子系统生成s函数

生成功能菜单选项自动从子系统生成s函数。的生成功能菜单选项显示子系统中使用的参数,并允许您将所选参数声明为可调的。

要从子系统创建S-Function块,请参见从子系统创建s功能块

例如,考虑SourceSubsys.目标是自动提取SourceSubsys从模型中构建一个s函数块。工作区变量K,是内部增益块的增益因子SourceSubsys,声明并生成为可调变量。

自动生成s函数SourceSubsys它有可调参数K:

  1. SourceSubsys模型打开,点击子系统来选择它。

  2. 右键单击子系统并选择C / c++代码>生成功能

  3. 生成功能窗口中,您将看到子系统中作为块参数引用的变量或数据对象。您可以将它们声明为可调的。

    窗口的上部窗格显示这些列:

    • 变量名:参数名称。

    • :如果是工作空间变量,则显示其数据类型。如果参数为数据对象,则显示其名称和类。

    • 可调:允许您选择可调参数。要声明一个参数可调,请选中复选框。在本例中,参数为K声明为可调的。

    当您在上面的窗格中选择一个参数时,下面的窗格将显示引用该参数的块以及每个块的父系统。

  4. 选择可调参数后,单击构建按钮。构建过程使用S-function目标启动s -函数的代码生成和编译。的创建新模型选项自动启用。

  5. 构建过程在MATLAB中显示状态消息®命令窗口。构建完成后,可调参数窗口关闭,并打开一个新的未命名模型窗口。

  6. 模型窗口包含一个S-Function块,其名称与生成该块的子系统相同(在本例中,SourceSubsys)。可选地,您可以保存包含生成块的生成模型。

    生成的S-Function块代码存储在当前工作文件夹中。这些文件被写入顶级文件夹:

    • 中高_sf.c. cpp,在那里中高子系统名称(例如,SourceSubsys_sf.c

    • 中高_sf.h

    • 中高_sf。mexext,在那里mexext是一个依赖于平台的墨西哥文件扩展名(例如,SourceSubsys_sf.mexw64

    s函数的源代码被写入子文件夹中高_sfcn_rtw.顶层.c. cppfile是一个包含include指令的存根文件,您可以使用该指令将其他C/ c++代码接口到生成的代码。

    请注意

    看到S-Function部署所需文件

生成的S-Function块有输入和输出,输入和输出的宽度和采样次数与原始模型对应。

下面的代码,来自mdlOutputs生成的s函数代码的例程(在SourceSubsys_sf.c)显示了可调变量K是通过调用MEX API来引用的。

(SimStruct *S, int_T tid).../ *获得:“< S1 > /增益”包含:*金额:< S1 > /总和的* / rtb_Gain_n [0] = (rtb_Product_p + (* (((const real_T * *) ssGetInputPortSignalPtrs(年代,2))(0 ]))) * (*( real_T *) (mxGetData (K (S))));rtb_Gain_n [1] = (rtb_Product_p + (* (((const real_T * *) ssGetInputPortSignalPtrs(年代,2))(1 ]))) * (*( real_T *) (mxGetData (K (S))));

在自动生成s函数时,可调参数使用值选项被清除或在命令行被设置为“关闭”

请注意

仅在创建包装器的MATLAB版本中使用MEX s -函数包装器。

宏参数

假设您应用一个存储类,例如定义到一个金宝app仿真软件。参数对象,使参数在生成的代码中显示为宏。如果在生成ERT s -函数的子系统中使用参数对象,则不能选择参数对象作为可调参数。相反,s函数代码生成器将自定义存储类应用于参数对象。在s -函数代码中生成宏使您能够从包含变量元素的子系统生成s -函数,例如不同的子系统块,您可以将其配置为在生成的代码中产生预处理器条件。在模拟s函数时,不能更改参数的值。

若要选择参数对象作为可调参数,请应用不同的存储类或创建自己的存储类。将参数视为宏的存储类包括定义ImportedDefineCompilerFlag,以及通过设置创建的存储类数据初始化自定义存储类设计器。如果使用非宏存储类,则不能使用参数对象作为变量控制变量并生成预处理器条件。

如果应用将参数对象视为导入宏的存储类,在生成ERT s函数之前,请提供宏定义。例如,假设应用存储类ImportedDefine到一个金宝app仿真软件。参数对象,并在子系统中使用参数对象作为变量控制变量。如果您设置自定义属性HeaderFile“myHdr.h”,在生成s函数时,放置自定义头文件myHdr.h在当前文件夹中。生成的s -函数使用头文件中的宏值,而不是价值参数对象的属性。

要使用通过编译器选项定义的宏,例如通过应用存储类CompilerFlag,使用模型配置参数代码生成>自定义代码>其他构建信息>定义了指定编译器选项。有关更多信息,请参见代码生成窗格:自定义代码:附加构建信息:定义

另请参阅

相关的话题