122
第十章 用 S-函数扩展 Simulink
通过第八、第九章的学习,用户对用 Simulink 建模的基本思想已经有了清晰的认识,Simulink 为用
户提供了许许多多的内置库模块,用户只需使用这些库模块构建系统即可。但在实际应用中,用户通常
会发现有些过程用 Simulink 的库模块不容易建模。这时,可以使用 S-函数来扩展 Simulink。S-函数
结合了 Simulink 框图图形化的特点和 MATLAB 编程灵活方便的优点,从而给用户提供增强和扩展 Simulink
的强大机制,同时它也是使 RTW(Real Time Workshop)实现实时仿真的关键。
10.1 S-函数概述
10.1.1 S-函数的基本概念
S-函数是 System function 系统函数的简称,是指采用非图形化(即计算机语言,而非 Simulink
系统模块)的方式描述的功能模块。在 MATLAB 中,用户除了可以使用 MATLAB 代码编写 S-函数以外,还
可以使用 C、C++、FORTRAN 或 Ada 语言编写 S-函数,只不过用这些语言编写程序时需要用编译器生成
动态连接库(DLL)文件,然后在 Simulink 中直接调用。
S-函数是由一种特殊的语法构成的,用来描述并实现动态系统的。它采用一种特殊的调用语法,使
函数和 Simulink 求解器进行交互。这种交互与求解器和 Simulink 仿真模型间的交互相类似:S-函数接
受来自 Simulink 求解器的相关信息,并对求解器发出的命令做出适当的响应。
S-函数作为与其它语言结合的接口,可以使用这个语言所提供的强大功能。例如,使用 MATLAB 语
言编写的 S-函数称为 M 文件 S-函数,它可以充分利用 MATLAB 所提供的丰富资源,方便地调用各种工
具箱函数和图形函数;而使用 C 语言编写的 S-函数被称为 C-MEX 文件 S-函数,则可以实现对操作系
统和外部设备等的访问,也可以提供与操作系统的接口。另外,S-函数可以使用其他多种语言编写,因
此可以实现代码的移植,即将已有的代码结合进来,而不需在 Simulink 中重新实现算法。
S-函数中采用非图形化的方式描述系统,其内部采用文本方式输入描述系统的公式、方程,这种方
式非常适合复杂动态系统的数学描述,且可以在仿真过程中对仿真进行精确的控制。
10.1.2 如何使用 S-函数
在动态系统仿真中,要想将 S-函数加入 Simulink 仿真模型中,用户需要将 User Defined Functions
模型库中的 S-Function 模块拖进该模型中。S-Function 模块是一个单输入单输出模块,如果有多个输
入与输出信号,用户需要使用 Mux 模块和 Demux 模块对信号进行组合或分离。S-Function 模块仅仅是以
图形的方式提供给用户一个 S-函数的使用接口,在它的参数设置对话框中仅包含 S-函数的名称及函数
所需的参数列表(见图 10.1),而 S-函数所实现的功能则由 S-函数源文件描述,S-函数源文件必须由
用户自行编写。
使用 S-函数的步骤如下:
一、在系统的 Simulink 仿真框图中添加 S-function 模块,并进行正确的设置;
二、创建 S-函数源文件。创建 S-函数源文件的方法有多种。用户可以按照 S-函数的语法格式自行编
写代码,但是这样做很麻烦,且容易出错。Simulink 在 S-function Examples 模型库中为用户提供了针
对不同语言的很多 S-函数模板和例子,用户可以根据自己的需要修改相应的模板或例子即可完成 S-函
数源文件的编写工作;
三、在系统的 Simulink 仿真框图中按照定义好的功能连接输入输出端口。
这里需要说明的是,S-function 模块中 S-函数名称必须和用户建立的 S-函数源文件的名称完全
相同,S-function 模块中的 S-函数参数列表必须按照 S-函数源文件中的参数顺序赋值,且参数之间
需要用逗号隔开。另外,用户也可以使用子系统封装技术对 S-函数进行封装,这样做的好处是可以增强
系统模型的可读性。
评论3