MATLAB中的S-Function的用法(C语言)

本文详细介绍了MATLAB中的S-Function,包括S-Function的基本概念、与MEX函数的区别、基础知识如直接馈通、动态输入大小、采样时间和级别,以及如何创建和使用S-Function的C语言实例。通过实例展示了新建、编译和调用S-Function的过程,帮助用户理解并掌握自定义S-Function的方法。
摘要由CSDN通过智能技术生成

1. S-Function简介  

S-Function是system-function的缩写。说得简单,S-Function就是用MATLAB所提供的模型不能完全满足用户,而提供给用户自己编写程序来满足自己要求模型的接口。

 

2. MEX函数与M文件的区别

第一,  MEX 函数能实现的回调函数比M-文件能实现的回调函数要多得多;

第二,  MEX 函数直接访问内部数据结构SimStruct,SimStruct 是Simulink 用来保存关于S-function 信息的一个数据结构;

第三,  MEX 函数也可使用MATLAB MEX 文件API 直接来访问MATLAB 的工作空间。

如果一个C MEX文件与一个M文件具有相同的名字,则C MEX文件被优先使用,即在S-Function块中使用的是C MEX文件。

 

3. 基础知识

3.1 直接馈通(direct feedthrough)

 直接馈通表示系统的输出或可变采样时间是否受到输入的控制。

a.  输出函数(mdlOutputs或flag==3)是输入u的函数。即,如果输入u在mdlOutputs中被访问,则存在直接馈通。

b.  对于一个变步长S-Function的“下一个采样时间”函数(mdlGetTimeOfNextVarHit或flag==4)中可以访问输入u。

例如,一个需要其输入的系统(也就是具有直接馈通)是运算y=kXu,其中,u是输入,k是增益,y是输出。

又如,一个不需要其输入的系统(也就是没有直馈通)是一种简单的积分运算:

输出:y=x;

导数:dx/dt=u

其中,x是状态,dx/dt是状态对时间的导数,u是输入,y是输出。

正确设置直接馈通标志是十分重要的,因为它影响模型中块的执行顺序,并可用检测代数环。

3.2 dynamically sized inputs 

主要是给出:输入连续状态数目(size.NumContStates),离散状态数目(size.NumDiscStates) ,输出数目(size.NumOutputs),输入数目(size.NumInputs),Direct Feedthrough(size.Dir Feedthrough)。 

3.3 setting sample times and offsets

setting smaple times and offsets主要设置采样时间.

3.4 Level-1 和Level-2

Level 1 提供一个简单的接口,可与少部分的S函数API交互。Matlab对于这种方式的支持更多的是为了保持与以前版本的兼容,现在推荐采用的是Level 2 S函数。

 

4. S-Function实例

S-Function的仿真流程

例如要创建一个有1输入(2维),2输出(1维),3个参数,还有全局变量的S-Function。 过程如下&#x

  • 6
    点赞
  • 96
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Simulink 的 S-Function 是一种用于模拟系统不能用内置模块描述的部分的功能。它可以使用 C 或 MATLAB 编写,并在模拟过程被当作一个模块运行。S-Function 可以用来描述硬件设备、自定义算法或其他系统部分。 ### 回答2: Simulink的S-Function是一种可以允许用户使用C或C++编写的自定义函数,可用于模型的特定子系统。S-Function可用于执行多种任务,如执行用户自定义的数学操作、IO访问、系统调用和任意样板代码等。 S-Function可以实现以下功能: 1.利用C/C++的高扩展性和灵活性。利用S-Function,用户可以使用自己的函数来实现Matlab Simulink的特定应用程序。高扩展性和灵活性允许用户修正和更新已有的模型。 2.可通过自定义代码来执行特定的模型操作。用户可以使用S-Function来定义模型复合组件的处理过程。这特别适合需要进行高度定制的操作的用户。例如,用户可能需要使用自己的数据格式或算法计算缺省模型未命名的操作。 3.直接访问硬件并读写外部数据。S-Function提供了对硬件的直接访问,因此,您可以使用S-Function编写代码,直接从设备获取或向设备发送数据。例如,用户可能需要在与某种设备交互时,读取数据或执行控制操作,如放置数据在模型之外的组件上。 4.调用外部库和函数。用户可以使用S-Function来定义在模型所使用的库。这提供用户更大自由度,允许用户使用未在配置文件列出的库。 总的来说,S-FunctionMatlab Simulink非常强大的一个工具,可以帮助用户实现各种不同的功能和操作,并且还支持用户自定义的代码。虽然需要一些编程技能,但是对于需要使用自定义函数来实现复杂模型的用户,S-Function是一个不可或缺的工具。 ### 回答3: Simulink的S-Function,全称为Simulation Function Blocks,是Simulink用来扩展其本身的功能的工具箱之一。S-Function可以被认为是一种自定义的Simulink Block,允许用户使用C、C++、Assembly或Matlab语言等来编写其激活函数(S-Function可以与其他语言之间结合使用)。 与其他Simulink Block一样,S-Function也是由输入端口和输出端口组成的,但S-Function之所以与众不同,是因为其具有以下特征: 1. 自定义输入、输出信号的数据结构和处理方法; 2. 可以直接调用外部的代码(例如:C++函数,Matlab脚本等); 3. 可实现相对较为复杂的算法(例如:嵌入式系统的控制算法等); 4. 消耗的计算资源相比其他Block要更加经济。 S-Function使用方法如下: 1. 首先在Simulink打开一个新模型; 2. 然后,在Simulink库找到S-Function Block,将其拖动至模型; 3. 在S-Function Block的参数设置,用户需要指定本身实现的算法,以及输入输出信号等; 4. 可以打开S-Function编辑器,根据需要,定制自己需要的代码逻辑; 5. 保存工具箱以便在其他模型重复使用。 总之,通过S-Function的使用,用户可以在Simulink实现各种自定义算法和控制逻辑的设计,提高模型的可用性和模拟表现力。因此,熟练掌握S-Function的开发流程是Simulink基本技能之一。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值