当前位置: 首页 > news >正文

S-Function

目录

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_wrapsfcn,S-function Parameters面板列出了S-Function Builder所包含的参数。

2.在数据属性(Data Properties)页面:指定输入(input)和输出(output)端口的名称分别为in1和out1。 3.库文件(Libraries)页面:Library/Object/Source files模板输入:doubleIt.c Includes模板输入: #include<math.h> #include<doubleIt.h>

4.输出(Outputs)页面输入:*out1=doubleIt(*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?searchHighlight=Integrate%20C%20Functions%20Using%20Legacy%20Code%20Tool&s_tid=doc_srchtitle 关于命令的使用请参阅: https://ww2.mathworks.cn/help/simulink/sfg/integrating-existing-c-functions-into-simulink-models-with-the-legacy-code-tool.html


http://www.mrgr.cn/news/59347.html

相关文章:

  • 【云原生】云原生后端详解:架构与实践
  • 鸿蒙中富文本编辑与展示
  • 什么是标准差?详解
  • 网络地址转换——NAT技术详解
  • C++类和对象(下篇)
  • django教育培训管理系统-计算机毕业设计源码46461
  • Python | Leetcode Python题解之第514题自由之路
  • Leetcode刷题笔记13
  • 安全日志里提示:C:\Windows\System32\dasHost.exe
  • mysql5.7.44 arm 源码编译安装
  • Linux常用命令1
  • python源码编译—Cython隐藏源码(windows)
  • [dasctf]howtodecompile
  • xlnt加载excel报错:‘localSheetId‘ expected
  • 【Spring】控制反转 依赖注入(本文内容由大模型生成)
  • 安卓基础001
  • HarmonyOS NEXT初级案例:网络数据请求
  • uni-app应用级生命周期和页面级生命周期
  • 动态IP是什么?
  • Qt Creator中的项目栏
  • 说说SQL调优
  • 软考系统分析师知识点二四:错题集11-20
  • 【FreeRL】TD3和SAC的实现
  • libharu 中文问题
  • 君正 T31 型号芯片架构模块介绍
  • 在平面模型上提取凹多边形的点云处理