主要内容

从子系统生成s函数

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

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

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

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

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

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

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

    窗口的上方窗格显示以下列:

    • 变量名:参数名称。

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

    • 可调:让您选择可调参数。若要声明参数可调,请选中复选框。在本例中,参数K声明可调。

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

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

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

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

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

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

    • 中高_sf.h

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

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

    请注意

    看到s -功能部署所需文件

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

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

static void mdlOutputs(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-function代码生成器将自定义存储类应用于参数对象。在S-function代码中生成宏使您能够从包含变体元素的子系统生成S-function,例如不同的子系统块,配置它以在生成的代码中生成预处理条件。在s函数模拟过程中,不能修改该参数的值。

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

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

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

另请参阅

相关的话题