文档

从子系统生成s函数

生成功能feature自动化了从子系统生成s函数的过程。此外,生成功能特性显示子系统中使用的参数,并允许您声明所选参数是可调的。

作为一个例子,考虑一下SourceSubsys,与示例中所示的子系统相同从子系统创建s功能块。目标是自动提取SourceSubsys从模型中构建一个S-Function块,就像前面的例子一样。此外,工作区变量K,是内部增益块的增益因子SourceSubsys(如下面的增益块参数对话框所示),被声明并生成为可调变量。

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

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

  2. 代码菜单中,选择C / c++代码>生成功能。在当前模型中选择子系统时启用此菜单项。

    或者,您可以右键单击子系统并选择C / c++代码>生成功能从子系统块的上下文菜单。

  3. 生成功能窗口显示(见下图)。此窗口显示子系统中作为块参数引用的变量(或数据对象),并允许您将它们声明为可调的。

    窗口的上部窗格显示了三列:

    • 变量名:参数名称。

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

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

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

    生成s函数窗口

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

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

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

  7. 生成的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部署所需文件

  8. 生成的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 -函数包装器。

如果使用absolute指定路径和文件

宏参数

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

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

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

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

另请参阅

相关的话题

这个话题有用吗?