Matlab捡知识——S-Function再体验

S-Function 和 M-Function

作为一个学控制(越来越偏离轨道)的学生,使用simulink的小部分功能是在频繁不过的了,但是我本科到硕士一年级,用simulink调用自建函数,不是简单S函数就是复杂m-function,基本都会避开S-Function(一开始感觉贼麻烦)。其实,M-Function和S-Function同时用到复杂的地方,M-Function更麻烦…

用S-Function是在一个小型机械臂仿真的demo需求上完成,由于需要完成正逆向运动学建模以及simulink调用,所以自己写函数嵌入simulink。

这里面主要设计了一个问题:循环迭代以及判断,这是M-Function很难完成的一个任务,不是不能完成,以前试过用M-Function循环迭代求解,但是要设置许多的全局变量值,类似以前写的一个保存变量值的方法,不过要用global代替persistant以及在菜单栏上面编辑变量,这样非常麻烦,而且simulink对M-Function语法的结构非常严格,频繁报错。

S-Function实在是不得不接触才用上的(其实早该用这个了,这才是正道
S-Function主要特点是符合simulink逻辑,分为初始化阶段和执行输出阶段(细节在介绍部分),这样的好处是可以设置和simulink契合的步长,节奏一致,调用子.m子函数容易,不会像M-Function一样频繁报错。

S-Function功能介绍

S-Function可以在进入前设置外部参数,S-function parameters,可以调用形式:数据结构体,数组都行。
Matlab捡知识——S-Function再体验_第1张图片
S-function name:调用的函数的名称,在路径下edit创建
Matlab有自带的一些s-function模板,在script下写edit sfun + Tab键打开模板,2018版本simulink里面edit不会出现模板,以前的版本有的可以。

模板不变,主要是初始化以及输出函数部分
Matlab捡知识——S-Function再体验_第2张图片
如上部分代码,初始化主要初始化输入输出参数个数构成sys结构体,这里不用太在意,只要设置好离散连续变量个数,输入输出个数就可以(不要求深度开发S-function)。在case 3 是函数的输出环节,可以调用当前路径下面的功能函数,在上图中我也频繁在调用,还可以进行循环迭代,在上图同样用while和if来进行循环判断。S-function好处是可以很好的契合simulink,同时更加像是在写.m-file,不过是要定义好外部参数来调用。

你可能感兴趣的:(Matlab笔记)