主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

S-Function 示例

这些示例向您展示如何使用各种 S-Function 或使用 S-Function 的程序,包括 C/C++ S-function、Fortran S-Function、S-Function 生成器、Level 2 MATLAB® S-Function 和 Blockset Designer。每个部分都解释了如何打开文件以及文件的内容。这些都是在学习基础知识之后继续加深对 S-Function 的理解的好地方。这些并不代表 S-Function 的所有可用示例,而只是相关的小节。

访问 S-Function 示例

大多数 S-Function 示例都是通过 sfundemos 运行的。此示例库包含 S-Function 模型,并按编码类型分组,例如 C S-Function 或 C++ S-Function。

要从 sfundemos 运行示例:

  1. 在 MATLAB 命令行窗口中,输入 sfundemos

    S-Function 示例库打开。

    每个模块代表一类 S-Function 示例。

  2. 双击某个类别即可显示其包含的示例。例如,点击 C 文件

  3. 双击一个模块以打开并运行它所代表的示例。

在阅读下一章时,检查一些示例 S-Function 可能会有所帮助。示例代码存储在 MATLAB 根文件夹下的以下文件夹中。

MATLAB 代码

toolbox/simulink/sfuntemplates

C、C++ 和 Fortran 代码

toolbox/simulink/sfuntemplates/src

2 级 MATLAB S-Function 示例

matlabroot/toolbox/simulink/sfuntemplates 文件夹(打开)包含许多 2 级 MATLAB S-Function。考虑先查看这些文件。有关 2 级 MATLAB S-function 的更多信息,请参阅 编写 2 级 MATLAB S-Function

文件名模型名称描述
msfcn_dsc.mmsfcndemo_sfundsc1实现具有继承采样时间的 S-Function。
msfcn_limintm.mmsfcndemo_limintm实现一个连续有限积分器,其中输出受下限和上限的限制,并包括初始条件。
msfcn_multirate.mmsfcndemo_multirate实施多速率系统。
msfcn_times_two.mmsfcndemo_timestwo实现一个使其输入加倍的 S-Function。
msfcn_unit_delay.mmsfcndemo_sfundsc2实现单位延迟。
msfcn_varpulse.mmsfcndemo_varpulse通过调用 2 级 MATLAB S-Function 中的 set_param 函数来实现可变脉冲宽度发生器。还演示了如何使用自定义设置和获取模块操作点的方法。
msfcn_vs.mmsfcndemo_vsfunc实现一个可变采样时间模块,其中第一个输入延迟由第二个输入决定的时间量。

C S-Function 示例

matlabroot/toolbox/simulink/sfuntemplates/src 文件夹(打开)包含 C MEX S-Function 的示例,其中许多都有 MATLAB S-Function 对应项。下表列出了 C MEX S-Function。有关 C S-Function 的更多信息,请参阅 C/C++ S-Function 基础知识Build S-Functions Automatically Using S-Function Builder

文件名模型名称描述
csfunc.csfcndemo_csfunc实行连续制度。
dlimintc.c无可用模型实现离散时间有限积分器。
dsfunc.csfcndemo_dsfunc实施离散系统。
limintc.c无可用模型实现有限积分器。
mixedm.csfcndemo_mixedm实现一个由连续积分器(1/s)和单位延迟(1/z)串联组成的混合动态系统。
mixedmex.csfcndemo_mixedmex实现具有单输出和双输入的混合动态系统。
slexQuantizeSFcn.csfcndemo_sfun_quantize实现向量化量化器。按照量化间隔参数 q 的指定步骤对输入进行量化。
sdotproduct.csfcndemo_sdotproduct计算两个实数或复数向量的点积(乘法累加)。
sfbuilder_bususage.csfbuilder_bususage使用总线输入和输出访问 S-Function Builder。
sfbuilder_movingAverage.csfbuilder_movingAverage使用 StartTerminate 实现简单的时间窗口移动平均值。
sftable2.csfcndemo_sftable2实现二维表查找。
sfun_atol.csfcndemo_sfun_atol为每个连续状态设置不同的绝对容差。
sfun_cplx.csfcndemo_cplx为具有一个输入端口和一个参数的 S-Function 添加复杂数据。
sfun_directlook.c无可用模型实现直接一维查找。
sfun_dtype_io.csfcndemo_dtype_io实现一个使用 Simulink® 数据类型作为输入和输出的 S-Function。
sfun_dtype_param.csfcndemo_dtype_param实现一个使用 Simulink 数据类型作为参数的 S-Function。
sfun_dynsize.csfcndemo_sfun_dynsize实现动态大小的输出。
sfun_errhdl.csfcndemo_sfun_errhdl使用 mdlCheckParameters S-Function 例程检查参数。
sfun_fcncall.csfcndemo_sfun_fcncall在第一个和第二个输出元素上执行函数调用子系统。
sfun_frmad.csfcndemo_frame实现基于帧的 A/D 转换器。
sfun_frmda.csfcndemo_frame实现基于帧的 D/A 转换器。
sfun_frmdft.csfcndemo_frame实现基于多通道帧的离散傅里叶变换(及其逆变换)。
sfun_frmunbuff.csfcndemo_frame实现基于帧的非缓冲模块。
sfun_multiport.csfcndemo_sfun_multiport配置多个输入和输出端口。
sfun_manswitch_mode.c无可用模型实现手动开关。
sfun_matadd.csfcndemo_matadd在具有一个输入端口、一个输出端口和一个参数的 S-Function 中添加矩阵。
sfun_multirate.csfcndemo_sfun_multirate演示如何指定基于端口的采样时间。
sfun_port_constant.csfcndemo_port_constant演示如何指定基于端口的恒定采样时间。
sfun_port_triggered.csfcndemo_port_triggered演示如何在触发子系统中使用基于端口的采样时间。
sfun_runtime1.csfcndemo_runtime为所有可调参数实现运行时参数。
sfun_runtime2.csfcndemo_runtime注册单独的运行时参数。
sfun_runtime3.csfcndemo_runtime将对话框参数注册为运行时参数。
sfun_runtime4.csfcndemo_runtime将运行时参数作为多个对话框参数的函数来实现。
sfun_zc.csfcndemo_sfun_zc演示使用非采样零交叉来实现 abs(u)。此 S-Function 设计用于变步长求解器。
sfun_zc_sat.csfcndemo_sfun_zc_sat演示饱和度的零交叉。
sfun_zc_cstate_sat.csfcndemo_sfun_zc_cstate_sat实现具有饱和限制和过零检测的连续积分器。
sfun_integrator_localsolver.csfcndemo_sfun_localsolver演示一个连续积分器,其中使用单独的局部求解器而不是模型使用的求解器来解决连续状态。
sfun_angle_events.csfcndemo_angle_events实现一种稳健且有效的检测旋转体跨越指定角度的方法。
sfun_angle_events.c无可用模型演示角度检测并结合 Stateflow® 来安排函数调用。
sfunmem.csfcndemo_sfunmem实现单积分步延迟并保持 memory 函数。
simomex.c sfcndemo_simomex

实现由状态空间方程描述的单输入、双输出状态空间动态系统:

dx/dt = Ax + Bu
y = Cx + Du
其中 x 是状态向量,u 是输入向量,y 是输出向量。

stspace.c sfcndemo_stspace实现一组状态空间方程。您可以使用 S-Function 模块和封装工具将其转换为新模块。此示例 MEX 文件执行与内置 State-Space 模块相同的功能。这是 MEX 文件的一个示例,其中输入、输出和状态的数量取决于从工作区传入的参数。
stvctf.c sfcndemo_stvctf实现连续时间传递函数,其传递函数多项式通过输入向量传入。这对于连续时间自适应控制应用很有用。
stvdtf.csfcndemo_stvdtf实现离散时间传递函数,其传递函数多项式通过输入向量传入。这对于离散时间自适应控制应用很有用。
stvmgain.csfcndemo_stvmgain实现时变矩阵增益。
table3.c无可用模型实现三维查找表。
timestwo.csfcndemo_timestwo实现一个使其输入加倍的 C MEX S-Function。
vdlmintc.c无可用模型实现离散时间向量化有限积分器。
vdpmex.csfcndemo_vdpmex实现范德波尔方程。
vlimintc.c 无可用模型实现向量化有限积分器。
vsfunc.csfcndemo_vsfunc说明如何创建可变采样时间模块。该模块实现了变步长延迟,其中第一个输入延迟的时间量由第二个输入决定。
sfun_pwm.csfcndemo_pwm说明如何创建可控的采样时间模块。
sfun_d2csfcndemo_d2c说明如何将离散输入信号转换为平滑的连续输出信号
sfun_pulse_delay.csfcndemo_vco说明如何实现一种算法,以使用可变的采样时间有效地将离散值输入信号延迟可变的量。

Fortran S-Function 示例

下表列出了 matlabroot/toolbox/simulink/sfuntemplates/src 文件夹(打开)中可用的示例 Fortran® S-Function。有关 Fortran S-Function的更多信息,请参阅 Create Level-2 Fortran S-Functions

文件名模型名称

描述

sfun_atmos.c
sfun_atmos_sub.F
sfcndemo_atmos使用 Fortran 子程序计算 1976 年标准大气至 86 公里。

C++ S-Function 示例

下表列出了 matlabroot/toolbox/simulink/sfuntemplates/src 文件夹(打开)中可用的示例 C++ S-Function。有关 C++ S-Function 的更多信息,请参阅 C/C++ S-Function 基础知识Build S-Functions Automatically Using S-Function Builder

文件名模型名称描述
sfun_counter_cpp.cppsfcndemo_counter_cpp将 C++ 对象存储在指针向量 PWork 中。
sfbuilder_permute.cppsfbuilder_permutation通过使用 Start 和 Terminate 调用外部 C++ 类来实现排列。
sfbuilder_linfilt.cppsfbuilder_upsampling使用 C++ STL 算法实现线性滤波,对符号波进行上采样。

在工程中组织 S-Function

以下示例显示如何将 S-Function 工件安排到工程中。这是使用 Blockset Designer 功能实现的。有关 Blockset Designer 的更多信息,请参阅 Create a Blockset Project

文件名描述
slexBlocksetDesignerExample使用 Blockset Designer 将 S-Function 工件组织到单个工程中。

另请参阅

| | |

主题