加速模拟,重用代码,或保护知识产权利用s函数的目标
S-functions是系统的一个重要类目标文件的代码生成器可以产生代码。封装一个子系统的能力成为一个功能允许你增加它的执行效率和促进代码重用。
以下部分描述的属性功能目标和说明如何生成它们。S-functions结构的更多细节,请参阅S-Functions(金宝app模型)。
的功能目标
使用功能目标,您可以构建一个功能组件和使用它作为一个功能块在另一个模型。以下部分描述的部署考虑功能的目标。
的“功能”
值CodeFormat
TLC变量使用的功能目标符合模型生成代码金宝app®C墨西哥人功能应用程序编程接口(API)。这种格式的应用程序包括
一个模型转换成一个组件。您可以生成一个功能块模型,
m1
。然后,您可以将生成的功能块在另一个模型中,平方米
。重新生成代码平方米
不需要重新生成代码m1
。转换组件的一个子系统。通过提取子系统到一个单独的模型,并从模型生成一个功能块,您可以创建一个可重用的组件的子系统。看到创建从一个子系统功能块对这个过程的一个例子。
加速模拟。通常,一个s函数生成的模型比原模型更有效地执行。
代码重用。你可以把一个模型的多个实例在另一个没有复制每个实例的代码。每个实例继续保持其独特的数据。
您可以将生成的功能块到另一个模型,您可以生成另一个功能。这种方法允许任何嵌套S-functions水平。有关嵌套限制,看到嵌套限制S-Functions。
请注意
而功能目标提供了一种方法来部署应用程序组件重用而屏蔽其内部逻辑与检查和修改,保护知识产权的首选解决方案在分布式组件:金宝搏官方网站
受保护的模型,一个参考模型,隐藏所有块和行信息。有关更多信息,请参见保护模式(金宝app模型)。
共享库系统目标文件,用于生成共享库的模型或子系统中使用的外部系统仿真模型。金宝app有关更多信息,请参见包生成的代码作为共享库(嵌入式编码)。
为功能部署所需的文件
有不同的文件需要部署一个功能块生成模拟与代码生成。
部署功能块生成包含在其他模型为模拟,您只需要提供生成的二进制MEX-file对象在当前工作目录中创建屏蔽功能。所需文件:
中高
_sf。mexext
在哪里
子系统名称和吗中高
是一个与平台相关的MEX-file扩展(见mexext
mexext
)。例如,SourceSubsys_sf.mexw64
。
部署功能块生成包含在其他模型对于代码生成,你必须提供所有生成的文件在当前工作目录中创建屏蔽功能。所需文件:
或中高
_sf.c. cpp
,在那里
是子系统名称(例如,中高
SourceSubsys_sf.c
)中高
_sf.h
,在那里中高
_sf。mexext
是一个与平台相关的MEX-file扩展(见mexext
mexext
)子文件夹
及其内容中高
_sfcn_rtw
请注意
生成的函数代码使用配置参数>硬件实现主机系统相匹配的参数值的函数。当你使用代码生成模型的功能,确保这些参数值为模型匹配函数的参数值。
样品时间传播S-Functions生成
生成的功能块可以继承采样时间从模型中放置特定条件是否满足。条件控制样本时间传播模型块和生成功能块中描述继承采样时间模型引用(金宝app模型)和继承采样时间参考模型。
生成一个符合标准的s函数块继承采样时间,你必须约束模型的解算器的功能块生成。在解算器面板配置参数对话框中,设置类型来固定步
和定期取样时间约束来确保样品时间独立
。如果模型无法继承示例,该设置导致Simulink仿真软件构建模型时显示一条错误消息。金宝app关于这个选项的更多信息,请参阅定期取样时间约束(金宝app模型)。
选择一种解算器
顶级的表格显示了可能的组合模型解算器类型,这些类型与子系统构建类型和解决者类型S-functions生成。
顶层模型解算器选项和子系统构建类型
模型配置参数:顶级配置模型 | ||
---|---|---|
子系统构建类型 | 解算器选项,类型:变步 | 解算器选项,类型:固定步 |
构建这个子系统 | 生成函数不需要变步解算器 | 生成函数不需要变步解算器 |
生成功能 | 生成函数需要变步解算器 | 生成函数不需要变步解算器 |
请注意
S-functions从一个子系统参数,生成硬编码到块中。金宝app模型计算参数,如样本时它生成,而不是在模拟运行时间。因此,重要的是要验证生成的功能块是否按预期工作目标模型。
解算器类型覆盖
存在这样的情况:子系统构建子系统解算器的选型产生覆盖类型。表总结了子系统之间的关系构建类型和应用子系统解算器类型。
顶层模型解算器类型覆盖子系统解决类型的构建类型
模型配置参数:顶级配置模型 | ||
---|---|---|
子系统构建类型 | 解算器选项,类型:变步 | 解算器选项,类型:固定步 |
构建这个子系统 | 子系统使用固定步解算器类型 | 子系统使用固定步解算器类型 |
生成功能 | 子系统采用变步解算器类型 | 子系统使用固定步解算器类型 |
创建从一个子系统功能块
本节说明如何从模型中提取一个子系统,生成一个可重用的功能组件。
下一个图显示SourceModel
一个简单的模型,输入信号子系统。随后的图中显示子系统,SourceSubsys
。的信号有不同的宽度和样品时间,有:
一步与样本时间1块
一个正弦波块样品时间0.5
一个常数块,其价值是向量[2 3]
SourceModel
SourceSubsys
目标是提取SourceSubsys
从模型和构建一个功能块,使用功能的目标。功能块必须执行相同的子系统是生成的。
在这个模型中,SourceSubsys
继承采样时间和信号输入信号的宽度。然而,功能块使用功能的目标已经从一个模型创建所有信号属性(如信号宽度或样品)的。(唯一例外问题样品,所述样品时间传播S-Functions生成。)
在本例中,您想要的功能块保留的属性SourceSubsys
因为它存在于SourceModel
。因此,构建子系统作为一个单独的功能组件之前,您必须显式地设置尺寸样品时间和宽度。此外,解算器功能组件的参数必须与这些参数的原始模型。生成的功能组件运行相同(见原子系统选择一种解算器的更多信息)。
构建SourceSubsys
作为一个功能组件,
创建一个新的模型,复制/粘贴
SourceSubsys
块空窗口。港口内设置信号宽度和样品的时候
SourceSubsys
这样,他们与原始信号的模型。尺寸1,过滤器
,宽度1和一个示例1。轮廓尺寸2,Xferfcn
,宽度1和样品时间为0.5。尺寸3,偏移量
宽度是2和样品时间为0.5。生成的功能块应该有三个港口和一个输出港。连接港口和一个输出港
SourceSubsys
,如第二图所示。信号宽度和样品时间传播到这些端口。
设置解算器类型、模式和其他参数解算器,这样就完全相同的源模型。这是最容易做的如果你使用模型资源管理器。
在配置参数对话框中,去代码生成窗格。
点击浏览打开系统目标文件浏览器。
在系统目标文件浏览器,选择功能的目标,
rtwsfcn.tlc
,然后单击好吧。选择功能目标窗格。确保创建新的模型被选中时,如第二图所示:
当这个选项被选中时,构建过程创建一个新的模型构建后功能组件。新模型包含一个功能块,与功能组件。
点击应用。
保存新模型包含子系统,例如
SourceSubsys
。构建的模型。
构建过程生成功能组件在工作文件夹。构建后,一个新的模型显示窗口。
你也可以选择保存生成的模型,例如
SourceSubsys_Sfunction
。你现在可以复制功能块生成的新模型,并使用它在其他模型或在图书馆。
请注意
列表文件需要部署功能块模拟或代码生成,明白了为功能部署所需的文件。
下一个图显示功能块插入原始模型。鉴于相同的输入信号,功能块执行相同原始子系统。
像SourceModel生成功能配置
功能块执行的速度通常比原模型。这种差异在速度更明显更大、更复杂的模型。通过使用S-functions生成,您可以增加您的建模过程的效率。
在生成的S-Functions可调参数
您可以使用可调参数生成S-functions在两个方面:
使用生成功能特性(见从子系统生成功能)。
或
(请参阅使用模型参数配置对话框在生成的代码块参数表示)申报所需的参数可调。
声明块参数可调的汽车
存储类源模型成为可调参数的生成的功能。这些参数不成为一个生成的一部分
(原模型
_PrtP
)参数的数据结构,将从其他目标生成的代码。相反,生成的代码访问这些参数通过墨西哥人API调用等mxGetPr
或mxGetData
。您的代码应该以相同的方式访问这些参数。
墨西哥人API调用的更多信息,请参阅关于C S-Functions(金宝app模型)和为其他语言MATLAB的API(MATLAB)。
功能块利用s函数创建的目标会自动屏蔽。面具一个编辑框显示每一个可调参数。默认情况下,编辑字段显示参数的变量名称,如以下示例。
你可以选择显示参数的值,而不是选择的变量名使用可调参数的值在代码生成>功能目标面板的配置参数对话框。
选择这个选项时,变量的值(在代码生成时)显示在编辑字段,如以下示例。
系统目标文件
的rtwsfcn.tlc
系统提供目标文件使用功能的目标。
校验和和功能目标
代码生成器为模型创建一个校验和,在构建过程中使用校验和代码重用,模型参考,和外部模式特性。
代码生成器模型计算校验和
一个功能可以添加额外的信息,而不是在块属性分析,校验和通过调用函数ssSetChecksumVal
。的功能目标,校验和的值被添加到模型的校验和或子系统的功能是生成的。
代码生成器应用子系统和模型校验和如下:
代码重用,如果两个子系统模型有相同的校验和,代码生成器生成的代码仅供一个函数。
模型参考——如果当前模型校验和校验和匹配的模型建立时,引用的构建过程不重建模型。
外部模式——如果当前模型的校验和校验和不匹配在目标硬件上运行的代码,构建过程生成一个错误。
生成的功能兼容性
当你建立一个墨西哥人从您的模型功能,代码生成器构建一个二级noninlined s函数。Cross-release限制使用生成的代码和二进制文件(例如,墨西哥人* .mexw64
)包括:
功能目标从先前的MATLAB生成的代码发布软件不兼容新版本。不重新编译生成的代码从先前版本更新的MATLAB版本软件。使用相同的MATLAB版本软件来生成代码的功能目标和编译代码到一个墨西哥人的文件中。
您可以使用二进制s函数生成墨西哥人文件从以前的MATLAB软件发布相同或较新的版本兼容性考虑相同的手写S-functions。有关更多信息,请参见功能的兼容性(金宝app模型)。
代码生成器可以生成代码并构建一个可执行的模型,该模型包含S-functions生成。这种支持要金宝app求S-functions构建相同的MATLAB版本软件构建模型。不可能将生成的功能从先前的MATLAB软件释放到墨西哥人文件新版本的模型和构建模型。
功能目标的局限性
限制使用可调变量表达式
某些限制适用于可调变量表达式的使用。当代码生成器遇到一个不受支持的表达式在生产代码中,会出现一个警告和等效数值生成代金宝app码。限制的列表,请参阅可调表达的局限性。
参数调优
的功能块不支持的可调参数调优:金宝app
复杂的值。
值或数据类型转换为一个常数(通过设置模型配置参数优化>信号和参数>默认参数的行为来
内联
)。没有内置的数据类型。
如果你选择这些可调参数(通过为子系统生成功能对话框):
在构建过程中软件产生警告。
生成的功能块面具不显示这些参数。
运行时参数和诊断功能兼容性
如果你设置功能升级需要选择在诊断>兼容性面板的配置参数对话框警告
或错误
,代码生成器指示你升级S-functions创建的生成功能特性。这是因为功能系统目标文件不注册运行时参数。运行时参数只支持内联S-Functions和生成的功能支持金宝app功能,防止它被内联(例如,它可以打电话或包含其他noninlined S-Functions)。
你可以通过设置解决这个限制功能升级需要选项没有一个
。
限制使用Goto和块
当使用功能系统目标文件,代码生成器对I / O限制对应根模型尺寸和外港块(或子系统的轮廓尺寸和外港块街区的功能目标生成)。不生成的代码转到或从块。
为了解决这个限制,创建您的模型和子系统所需的尺寸和外港块,而不是使用转到从块到根模型和子系统之间传递数据。在模型中,包含生成的功能,您将添加转到从街区。
例子之前解决
根模型从块和子系统,
Subsystem1
Subsystem1
与一个转到块,全球可见性和将其输入传递给从根块模型Subsystem1
替换功能的s函数生成的目标——一个警告结果运行模型时,因为生成的功能没有实现转到块
下班后在例子
外港块取代了转到块在Subsystem1
。当你把生成的s函数代入根模型,其输出直接连接到工作区。
建立和更新S-Functions局限性
以下限制适用于建筑使用功能和更新S-functions系统目标文件:
你不能包含构建模型模型使用功能块系统目标文件。这也意味着你不能建立一个子系统模块(或通过单击右键代码>C / c++代码>构建选择子系统如果子系统包含模型块。这个限制只适用于S-functions利用s函数生成的目标,不要ERT S-functions。
如果你修改模型,生成一个功能块,构建过程不会自动重建模型包含生成的功能块。这与自动重建模型的实践参考模型块时修改(根据模型参考重建配置设置)。
手写S-functions没有相应的TLC文件必须包含exception-free代码。exception-free代码的更多信息,参见除了免费代码(金宝app模型)。
不支金宝app持的块
s函数的格式不支持内置模块如下:金宝app
解释MATLAB函数块
功能块包含下列:
MATLAB®语言S-functions(除非你供应TLC文件C代码生成)
Fortran S-functions(除非你供应TLC文件C代码生成)
C / c++墨西哥人S-functions,调用MATLAB环境
范围块
到工作空间块
s函数的格式不支持的块金宝appembeddedtargetslib
块库。
SimState
不支持代金宝app码生成
您可以使用SimState
在C-MEX和2级MATLAB语言S-functions保存和恢复仿真状态。看到功能符合SimState(金宝app模型)。然而,SimState
不支持代码生成金宝app,包括与目标文件的功能系统。
分析代码的性能与TLC钩子函数不受支持的金宝app
分析使用目标语言编译器生成的代码的性能(TLC)钩子函数接口描述概要文件代码的性能不支持功能的目金宝app标。
请注意
如果你有一个嵌入式编码器®许可证,看到代码执行分析(另一种嵌入式编码器),简单的方法基于software-in-the-loop (SIL)或processor-in-the-loop(公益诉讼)模拟。
嵌套限制S-Functions
以下限制适用于嵌套模型中生成的功能块或子系统生成的另一个功能:
软件不支持nonvirtual总线嵌套函数的金宝app输入和输出信号。
你应该避免嵌套模型中的一个功能或子系统名称相同的功能(可能是多个层面分开)。在这种情况下,函数可以递归地调用。软件目前在s函数依赖不检测这样的循环,这可以导致流产或挂你的MATLAB会话。为了防止这种情况的发生,确保名称生成子系统或模型作为一个独特的功能目标,避免重复已有的墨西哥人在MATLAB路径文件名。
限制用户定义的数据类型
目标文件不支持的功能系统金宝appHeaderFile
属性,可以指定用户定义的数据类型,包括基于金宝appSimulink.AliasType
,金宝appSimulink.Bus
,金宝appSimulink.NumericType
对象。如果在你的模型使用一个用户定义的数据类型HeaderFile
属性指定一个相关的头文件,代码生成功能系统目标文件忽视了相应产生的价值,不包括声明。
限制右键单击代的功能目标
如果您生成一个目标通过右键单击一个功能函数调用子系统块,原来的子系统和生成的功能可能不一致。发生不一致时州时启用参数的触发端口块内函数调用子系统块设置为继承。你必须设置州时启用参数重置或举行,否则仿真软件就会报告错金宝app误。
限制S-Functions总线的I / O信号
如果一个函数使用s函数生成目标总线输入或输出信号,生成的总线数据结构可能包括对齐字段填充的总线中使用模拟仿真软件的元素表示。金宝app然而,如果你插入的s函数模型和生成代码使用一个模型目标等grt.tlc
,总线结构对齐生成的模型构建可能不兼容填充生成的功能,可能会影响代码执行的数值结果。使结构之间对齐一致模型模拟和模型代码的执行,为每一个金宝appSimulink.Bus
对象,您可以修改HeaderFile
头文件属性删除填充物的总线结构。这将导致总线类型定义为函数生成模型中被重用代码。
限制与函数调用的I / O子系统的信号
功能不支持创建一个目标金宝app功能块的一个子系统,函数调用触发输入或函数调用的输出。
数据存储访问
当一个功能在你的模型中访问数据存储在仿真中,仿真软件禁用数据存储诊断。金宝app
如果你创建了功能从一个模型,诊断为全球数据存储是禁用的。
如果你创建了功能从一个子系统,诊断是禁用以下数据存储:
全球数据存储
数据存储在子系统,但访问数据存储读或写数据存储块。
不能指定替代进口或外港块参数通过子系统面具
你不能指定任何轮廓尺寸或外港块通过子系统参数变量如果你想生成一个面具功能块的子系统。软件生成一个错误当你试图运行一个模拟使用功能块,例如:
无效的设置在“testSystem /子系统/ __OutputSSForSFun__ / Out2”参数“PortDimensions”……
相关的话题
- 加速度(金宝app模型)
- 加速,完善和测试混合动态系统在主机通过RSim系统目标文件