利用s函数模型或子系统的目标
S-functions一类系统目标文件的代码生成器可以产生代码。封装一个子系统功能目标,可以增加它的执行效率,促进代码重用,并保护其知识产权。
请注意
虽然您可以使用功能目标部署一个应用程序组件重用而屏蔽其内部逻辑与检查和修改,保护知识产权的首选解决方案在分布式组件:金宝搏官方网站
受保护的模型,一个参考模型,隐藏块和线信息。有关更多信息,请参见保护模型隐藏内容。
共享库系统目标文件,用于生成共享库的模型或子系统中使用的外部系统仿真模型金宝app®。有关更多信息,请参见包生成的代码作为共享库(嵌入式编码)。
这些解决方案金宝搏官方网站还提高执行效率和促进代码重用。
您可以使用生成的目标与功能生成的功能块。
的“功能”
值CodeFormat
TLC所使用的变量目标函数所生成的代码符合模型C墨西哥人功能应用程序编程接口(API)。金宝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
的rtwsfcn.tlc
系统提供目标文件使用功能的目标。
生成的函数代码使用配置参数>硬件实现主机系统相匹配的参数值的函数。当你使用代码生成模型的功能,确保这些参数值为模型匹配函数的参数值。
样品时间传播S-Functions生成
一个生成的功能阻止可以继承采样时间的模型放置如果某些条件得到满足。条件控制样本时间传播模型块和生成功能块中描述引用的模型样品时间和S-Functions指定样品时间继承规则。
生成一个功能块符合继承采样时间的标准,你必须约束的模型的解算器功能块生成。集模型配置参数类型来固定步
和定期取样时间约束来确保样品时间独立
。如果模型无法继承示例,该设置导致Simulink仿真软件构建模型时显示一条错误消息。金宝app关于这个选项的更多信息,请参阅定期取样时间约束。
解算器类型与生成S-Functions顶级模特
表显示了可能的组合的模型解算器类型,这些类型与模型是否离散或连续的样本时间和解决者类型S-functions生成。
模型解算器的选择和样品时间
模型配置参数:顶级配置模型 | ||
---|---|---|
样品时间 | 解算器选项,类型:变步 | 解算器选项,类型:固定步 |
离散 | 生成函数需要变步解算器 | 生成功能可以变步解算器或固定的解决者 |
连续 | 生成函数需要变步解算器 | 生成函数需要一个固定的解决者 |
S-functions产生一个子系统参数硬编码到块中。金宝app模型计算参数,如样本时它生成,而不是在模拟运行时间。验证是否生成的是很重要的功能块是预期目标模型。
在生成的S-Functions可调参数
使用可调参数生成S-functions,使用模型配置参数来声明所需的块可调参数。看到将工作空间变量声明为可调参数使用模型参数配置对话框。
您声明块参数可调的汽车
存储类源模型成为可调参数的生成的功能。这些参数不成为一个生成的一部分
(原模型
_PrtP
)参数数据结构,因为他们从其他系统目标文件将生成的代码。相反,生成的代码访问这些参数通过墨西哥人API调用等mxGetPr
或mxGetData
。您的代码应该以相同的方式访问这些参数。
墨西哥人API调用的更多信息,请参阅关于C墨西哥人S-Functions和MATLAB与外部编程语言和系统集成。
功能块利用s函数创建的目标会自动屏蔽。面具一个编辑框显示每一个可调参数。默认情况下,编辑字段显示参数的变量名称,如以下示例。
你可以选择显示参数的值,而不是它的变量名通过选择模型配置参数使用可调参数的值。
当选择该参数,变量的值(在代码生成时)显示在编辑字段。
宏参数
假设你应用存储类等定义
到一个金宝appSimulink.Parameter
对象的参数出现的宏生成的代码。如果你使用的参数对象在一个子系统生成一个ERT s函数,你不能选择参数对象作为一个可调参数。相反,功能代码生成器对象自定义存储类适用于参数。这一代的宏功能代码允许您生成S-functions从子系统包含变种元素,如不同的子系统块,配置生产预处理条件生成的代码。你不能改变参数的值在模拟的功能。
选择参数对象作为一个可调参数,应用不同的存储类或创建自己的存储类。存储类宏包括治疗参数定义
,ImportedDefine
,CompilerFlag
通过设置创建和存储类数据初始化来宏
在自定义存储类设计师。如果你使用一个非宏存储类,你不能使用对象作为参数变异控制变量并生成预处理条件。
如果你申请一个存储类,将参数对象作为进口宏观,生成ERT s函数之前,提供宏定义。例如,假设您应用存储类ImportedDefine
到一个金宝appSimulink.Parameter
对象,并使用参数对象作为变种子系统的控制变量。如果你设置自定义属性HeaderFile
来“myHdr.h”
,当你生成功能,自定义头文件的地方myHdr.h
在当前文件夹。生成的功能从你的头文件,而不是使用宏观价值的价值价值
属性的参数对象。
使用宏定义通过编译器选项,例如通过应用存储类CompilerFlag
配置参数,使用模型代码生成>自定义代码>代码信息>定义了指定编译器选项。有关更多信息,请参见代码生成窗格:自定义代码:额外的构建信息:定义。
校验和和功能目标
代码生成器为模型创建一个校验和,在构建过程中使用校验和代码重用,模型参考,和外部模式特性。
代码生成器模型计算校验和
为每个子系统模型中计算校验和。一个子系统的校验和的组合属性(数据类型、复杂性,样品时间,港口维度,等等)的子系统模块。
结合子系统校验和和其他模型级信息。
一个功能可以添加额外的信息,而不是在块属性分析,校验和通过调用函数ssSetChecksumVal
。的功能目标,校验和的值被添加到模型的校验和或子系统的功能是生成的。
代码生成器应用子系统和模型校验和如下:
代码重用,如果两个子系统模型有相同的校验和,代码生成器生成的代码仅供一个函数。
模型参考——如果当前模型校验和校验和匹配的模型建立时,引用的构建过程不重建模型。
外部模式——如果当前模型的校验和校验和不匹配在目标硬件上运行的代码,构建过程生成一个错误。
生成的功能兼容性
当你建立一个墨西哥人从您的模型功能,代码生成器构建一个二级noninlined s函数。Cross-release限制使用生成的代码和二进制文件(例如,墨西哥人* .mexw64
)包括:
从先前的MATLAB函数目标生成的代码®发布新版本软件不兼容。不重新编译生成的代码从先前版本更新的MATLAB版本软件。使用相同的MATLAB版本软件来生成代码的功能目标和编译代码到一个墨西哥人的文件中。
您可以使用二进制s函数生成墨西哥人文件从以前的MATLAB软件发布相同或较新的版本兼容性考虑相同的手写S-functions。有关更多信息,请参见功能的兼容性。
代码生成器可以生成代码并构建一个可执行的模型,该模型包含S-functions生成。这种支持要金宝app求S-functions构建相同的MATLAB版本软件构建模型。不可能将生成的功能从先前的MATLAB软件释放到墨西哥人文件新版本的模型和构建模型。
功能目标的局限性
轮廓尺寸和外港块连续采样时间
右键单击构建方法生成一个函数不保持连续的采样时间轮廓尺寸和外港块。因为样品时间不保存,模拟生成的功能块可以影响。
可调变量的表达式
某些限制适用于可调变量表达式的使用。当代码生成器遇到一个不受支持的表达式在生产代码中,会出现一个警告和等效数值生成代金宝app码。限制的列表,请参阅可调表达的局限性。
参数调优
的功能块不支持的可调参数调优:金宝app
复杂的值。
值或数据类型转换为一个常数(通过设置模型配置参数优化>默认参数的行为来
内联
)。没有内置的数据类型。
浮点数据类型不相当于一个内置的类型。
运行时参数和诊断功能兼容性
如果你集模型配置参数功能升级需要来警告
或错误
,代码生成器指示你升级S-functions生成子系统。功能系统目标文件不注册运行时参数。运行时参数只支持内联S-functions,生成的支持功能金宝app,防止它被内联函数,例如,它可以打电话或包含其他noninlined S-functions。
为了解决这个限制,设置参数功能升级需要来没有一个
。
转到和从块
当使用功能系统目标文件,代码生成器限制输入和输出对应于根模型轮廓尺寸和外港块(或轮廓尺寸和外港块的子系统块的功能目标生成)。代码生成器不会产生代码转到或从块。
为了解决这个限制,创建您的模型和子系统所需的轮廓尺寸和外港块,而不是使用转到和从块根模型和子系统之间传递数据。在模型中,包含生成的功能,您将添加转到和从块。
例子之前解决
根模型,该模型包括一个从块和子系统,
Subsystem1
Subsystem1
,其中包括转到块,全球可见性和传递的输入从块在根模型Subsystem1
替换为一个函数与函数系统生成的目标文件,当您运行一个警告结果模型,因为生成的功能没有实现转到块
下班后在例子
一个外港块取代了转到块在Subsystem1
。当你把生成的s函数代入根模型,其输出直接连接到工作空间块。
建立和更新S-Functions
以下限制适用于建筑使用功能和更新S-functions系统目标文件:
你不能包含构建模型模型使用功能块系统目标文件。这也意味着你不能建立一个子系统通过使用鼠标右键上下文菜单如果子系统包含模型块。这个限制只适用于S-functions利用s函数生成的目标,不要ERT S-functions。
您可以构建一个模型:
工具链只有在工具链支持MEX-file一代。金宝app
一个模板只有模板makefile makefile关联到一个工具链支持MEX金宝app-file一代。
如果你修改模型生成一个功能块,构建过程不会自动重建模型包含生成的功能块。这与自动重建模型的实践参考模型块时修改(根据模型参考重建配置设置)。
手写S-functions没有相应的TLC文件必须包含exception-free代码。exception-free代码的更多信息,参见除了免费代码。
不支金宝app持的块
s函数的格式不支持内置模块如下:金宝app
解释MATLAB函数块
功能块包含下列:
MATLAB语言S-functions(除非你供应TLC文件C代码生成)
Fortran S-functions(除非你供应TLC文件C代码生成)
C / c++墨西哥人S-functions,调用MATLAB环境
金宝app仿真软件的功能块
函数调用者块
范围块
到工作空间块
s函数的格式不支持的块金宝appembeddedtargetslib
块库。
操作点不支持代码生成模型金宝app
你可以写C-MEX和2级MATLAB S-functions杠杆操作点的模型,用于保存和恢复仿真状态,所述功能符合ModelOperatingPoint。模型操作点不支持代码生成,包括与目标文件的功能系统。金宝app
当您生成代码的功能指定默认操作合规或没有操作点支持,模型生成的代码不包括操作点的功能。金宝app你不能生成代码的功能实现自定义操作点的功能。
嵌套S-Functions
以下限制适用于嵌套一个生成的功能块的模型或子系统生成另一个函数:
软件不支持nonvirtual总线嵌套函数的金宝app输入和输出。
避免嵌套模型中的一个功能或子系统名称相同的功能(可能是多个层面分开)。在这种情况下,函数可以递归地调用。软件目前在s函数依赖不检测这样的循环,这可以导致流产或挂你的MATLAB会话。为了防止这种情况的发生,将生成子系统或模型作为一个独特的功能目标,避免复制现有的墨西哥人在MATLAB路径文件名。
用户定义的数据类型
目标文件不支持的功能系统金宝appHeaderFile
属性,可以指定用户定义的数据类型,包括基于金宝appSimulink.AliasType
,金宝appSimulink.Bus
,金宝appSimulink.NumericType
对象。如果在你的模型使用一个用户定义的数据类型HeaderFile
属性指定一个相关的头文件,代码生成功能系统目标文件忽视了相应产生的价值,不包括声明。
右键单击代的功能目标
如果您生成一个目标通过右键单击一个功能函数调用子系统块,原来的子系统和生成的功能可能不一致。发生不一致时州时启用参数的触发端口块内函数调用子系统块设置为继承。你必须设置州时启用参数重置或举行,否则仿真软件就会报告错金宝app误。
总线的输入和输出
如果一个函数使用s函数生成目标总线输入或输出,生成的总线数据结构可能包括对齐字段填充的总线中使用模拟仿真软件的元素表示。金宝app然而,如果你插入的s函数模型和生成代码使用一个模型目标等grt.tlc
,总线结构对齐生成的模型构建可能不兼容填充生成的功能,可能会影响代码执行的数值结果。使结构之间对齐一致模型模拟和模型代码的执行,为每一个金宝appSimulink.Bus
对象,您可以修改HeaderFile
头文件属性删除填充物的总线结构。这将导致总线类型定义为函数生成模型中被重用代码。
子系统与函数调用的输入和输出信号
功能不支持创建一个目标金宝app功能块的一个子系统,函数调用触发输入或函数调用的输出。
函数调用子系统建模模式
当你添加一个生成功能块模型,然后模拟模型,用MATLAB可能崩溃如果生成的功能使用这个函数调用子系统建模模式。
函数调用子系统直接连接到一个外港块。信号线连接子系统外港块一块有一个分支更新
函数,也就是说,一块主要更新在每个时间步,等单位延迟和内存。分支可以子系统的内部或外部。
在模型中,包括函数调用子系统,一个信号转换块在其中一个位置可以解决的问题生成的功能:
子系统之间的块和分支
分支和根外港块
分支和阻止的
更新
函数
的信号转换块解决方案中这些参数设置:
输出设置为
信号复制
排除这一杯啤酒从减少块的优化选择
数据存储访问
当一个功能在你的模型中访问数据块存储在仿真中,仿真软件禁用数据存储诊断。金宝app
如果你创建了功能块从一个模型,诊断为全球数据存储是禁用的。
如果你创建了功能块从一个子系统,诊断是禁用以下数据存储:
全球数据存储
数据存储子系统外,但访问数据存储读取或数据存储写块。
轮廓尺寸或外港块参数通过子系统的面具
S-functions生成的一个子系统轮廓尺寸或外港块参数指定子系统面具变量产生一个错误当你试图运行一个模拟使用功能块。
无效的设置在“testSystem /子系统/ __OutputSSForSFun__ / Out2”参数“PortDimensions”……
墨西哥人s函数包装器
只使用一个墨西哥人s函数包装器的MATLAB版本创建包装器。