Simulink基于level 2 的s-function编写

simulink基于level 2 的s-function编写

在MATLAB中有时候用模块搭建实现一个功能不是十分方便,可以通过编写程序来实现,simulink模块库提供了很不错的编程模板供用户使用。我们只需要简单的进行配置就能够利用模板来像C语言一样编写程序了。主要步骤如下

  1. 打开simulink,新建一个空白的blank,在library browser(即搜索模块的地方)simulink分支下有user-defined,点击并在右侧选择S-Function Examples
    Simulink基于level 2 的s-function编写

  2. 然后选择c file S-functions
    Simulink基于level 2 的s-function编写

  3. 选择basic c-mex
    Simulink基于level 2 的s-function编写

  4. 打开以后就能看到如下模板
    Simulink基于level 2 的s-function编写
    那么我们需要操作的部分有哪些呢,概括起来主要分以下几部分:(和写C语言差不多)
    1给自己的s-function起一个函数名称,方便在模型中调用,这里默认是sfuntmpl_basic,如上图所示,我们可以改成自己想要的名字,比如test,作为一个测试来写,在修改这个文件之前先另存一下,不然原来的模板就会被我们改掉了。
    2包含所需的头文件,这里默认是simstruc.h,这个是包含了这个模板所需要的一些结构体变量,但是不要被结构体给吓到。我们并不需要管这个结构体的概念。只要选择自己需要的头文件包含进去就好,比如我需要进行相关的数学计算,需要求sin(x),那么我就需要#include “math.h”,需要注意一下,这里include后面需要有一个空格,不然会报错,其实这个模板里面的英文解释比较详细,有兴趣的可以仔细看一下。
    Simulink基于level 2 的s-function编写
    3设置这个函数的参数个数,比如有两个,就把下面的0换成2,这并不是输入的自变量,要分清楚。这里的参数就像是直线的斜率一样,是我们用来对函数进行形容的一些定义量,比如周期时间,特定的含义如恒定加速度为多少之类的。
    Simulink基于level 2 的s-function编写
    4设置输入的变量个数和维数。这里的个数实际上是列数m,维数是行数n,构成一个m*n的列向量,一般是一列。比如我要输入x0,x1两个数,那么就设置(s,1)和(s,0,2),可以自己试一下
    Simulink基于level 2 的s-function编写
    5.设置输出变量个数和维数,这个和输入其实是一样的
    Simulink基于level 2 的s-function编写
    6.接下来就是需要重点关注的内容,输出函数的编写,实际上就是对输入变量进行处理后输出,体现我们的控制思路.第一行实际上是对输入变量做了一下指针操作,u[0]就是表示x0,同理指针加1就是u[1]就表示x1.第二行是对输出变量的指针操作,y[0]就是y0,y[1]就是y1.这两行一定不要删掉哦,否则你的函数就不起作用了。我们从y[0]这行开始编写,假如按照刚才的输入,x0,x1.我输出也设置为1 乘2的,也是输出两行一列,分别取2倍和3倍输出,那么就写成:
    y[0]=u[0] * 2;
    y[1]=u[1] * 3;
    Simulink基于level 2 的s-function编写
    到这里输出函数就写好了,然后就是应用,我们从user-defined库中选择,system,如下,添加到空白模型中
    Simulink基于level 2 的s-function编写
    然后双击,把设置的s-function name填写为test
    Simulink基于level 2 的s-function编写
    拖动响应的模块输入进去,因为输入设置的1列2行,就需要一个mux(设置为2,1),输入两个不同的常数,然后输出需要加一个demux(设置为1,2),接入1个scope观察一下,假如输入1和2,是不是输出的2和6
    为什么选择level2的原因是因为,level2可以多输入多输入出,这个可以百度。
    到这里相信你已经会使用基于level 2的s-function编写模块了
    编辑:Eric_anxuanxuan