建设网站设计公司,郑州易站通网站公司,在线图片编辑像素,企业网站设计价格目录 S-Function介绍
生成S-Function的三种常用手段
使用手写S-函数合并定制代码
使用S-Function Builder块合并定制代码
使用代码继承工具合并定制代码 S-Function介绍
我们可以使用S-Function扩展Simulink对仿真和代码生成的支持。例如#xff0c;可以使用它们#xf…目录 S-Function介绍
生成S-Function的三种常用手段
使用手写S-函数合并定制代码
使用S-Function Builder块合并定制代码
使用代码继承工具合并定制代码 S-Function介绍
我们可以使用S-Function扩展Simulink®对仿真和代码生成的支持。例如可以使用它们 表示自定义算法 将现有外部代码集成到Simulink和代码生成器中 表示与硬件对接的设备驱动程序 为嵌入式系统生成高度优化的代码 在Simulink仿真过程中验证为子系统生成的代码 通过S-Function的应用程序编程接口可以非常灵活地在Simulink环境中实现通用算法。 以下情形适合用S-Function来实现仿真和代码生成 “我不关心效率我只想让我的算法能够自动在Simulink和代码生成器产品中工作。” “我想在Simulink和代码生成器产品中实现一种高度优化的算法它看起来就像是一个内置模块并且能生成高效的代码。” “我有很多人工代码需要集成。我希望高效地从Simulink和代码生成器产品中调用我的函数。”
生成S-Function的三种常用手段
下面以Mathworks官方的一个实例来简单介绍Simulink中生成S-Function的三种常用手段。
1 使用S-Function Builder块。使用此方法可以将S-函数的特征输入到块对话框中.这种方法不需要任何有关编写S-函数的知识。但是对S-Function结构的基本理解可以使S-Function Builder对话框更易于使用。
2 使用代码继承工具(Legacy Code Tool)。使用此命令行方法在MATLAB工作区中的数据结构中定义S-函数的特征。这种方法所需的S-函数知识最少。
3 手写wrapper S-function。使用这种方法您可以手动编写一个新的C、S-函数和相关的TLC文件.这种方法需要对C S-函数的结构有更多的了解。 使用手写S-函数合并定制代码
第一步首先确保wrapsfcn.c、doubleIt.c和doubleIt.h在该路径下再打开sfcndemo_choosing_sfun.mdl。 第二步编译wrapsfcn.c S-function请运行以下mex命令。当前文件夹下生成一个mex64文件。 mex wrapsfcn.c doubleIt.c 使用S-Function Builder块合并定制代码
在S-Function Builder对话框中进行如下操作
1.在S-function name输入S-Function的名称builder_wrapsfcnS-function Parameters面板列出了S-Function Builder所包含的参数。
2.在数据属性(Data Properties)页面指定输入(input)和输出(output)端口的名称分别为in1和out1。 3.库文件(Libraries)页面Library/Object/Source files模板输入doubleIt.c Includes模板输入 #includemath.h #includedoubleIt.h
4.输出(Outputs)页面输入*out1doubleIt(*in1);
5.编译信息(Build Info)页面选择Generate wrapper TLC option。 当你完成以上操作后点击“Build”S-Function Builder会生成三个文件。 使用代码继承工具合并定制代码
确保doubleIt.c和doubleIt.h文件位于您的工作文件夹中然后在MATLAB命令提示符下键入lct_wrapsfcn运行脚本或者双击打开lct_wrapsfcn.m然后在编辑器工具栏下方点击运行run。脚本通过以下命令创建和编译S函数legacy_wrapsfcn.c并创建TLC文件Legal_Wrapsfcn.tlc。
% Create the Legacy Code Tool data structure
def legacy_code(initialize);% Populate the data struture
def.SourceFiles {doubleIt.c};
def.HeaderFiles {doubleIt.h};
def.SFunctionName legacy_wrapsfcn;
def.OutputFcnSpec double y1 doubleIt(double u1);
def.SampleTime [-1,0];% Generate the S-function
legacy_code(sfcn_cmex_generate, def);% Compile the MEX-file
legacy_code(compile, def);% Generate a TLC-file
legacy_code(sfcn_tlc_generate, def);关于命令的解释请参阅 https://ww2.mathworks.cn/help/simulink/slref/legacy_code.html?searchHighlightIntegrate%20C%20Functions%20Using%20Legacy%20Code%20Tools_tiddoc_srchtitle 关于命令的使用请参阅 https://ww2.mathworks.cn/help/simulink/sfg/integrating-existing-c-functions-into-simulink-models-with-the-legacy-code-tool.html