概述
目录
- 前言
- 准备
- 参考视频
- 参考文章
- 搭建模型
- 过程
- 初始化函数
- 连续状态求导(微分)
- 输出函数
- 仿真模型
前言
最近在学习利用MATLAB来搭建s函数,记录一下。
准备
- MATLAB R2020a
参考视频
S-Function/S函数,一个实例带你直接上手
参考文章
S-Function 入门
S函数的学习
关于 matlab 的 s 函数的 DirFeedthrough
搭建模型
过程
打开matlab,在命令行输入
edit sfuntmpl.m
然后弹出一个s函数的模板,如下图所示
然后再创建3个M文件,分别命名为plant、ctrl和parameters。暂时是空白的,如下图所示
然后把模板的代码复制一下,分别粘贴到plant和ctrl的M文件里。
接下来把函数名更改成文件名
更改后
ctrl的文件类同。
在parameters的M文件输入下列参数,也就是结构体,可以将其视为常数。
把pa结构体加载进工作区(执行一下M文件,struct就是结构体的意思)
接着,把结构体传入函数
—t:当前时间
—x:状态向量(列向量),形如
x
=
[
x
1
,
x
2
,
⋅
⋅
⋅
⋅
,
x
n
]
T
x=[x_1,x_2,····,x_n]^mathsf{T}
x=[x1,x2,⋅⋅⋅⋅,xn]T
—u:输入向量
—flag:标志位,标志指示S函数要执行的任务的整数值,不同的整数值调用不同的函数,如下图所示,值是0就选择初始化函数,是1就选择求导函数
—pa:传入的结构体
初始化函数
记得把结构体pa传入函数
—NumContStates:连续状态数(模型有两个状态变量
d
x
1
mathrm{d}x_1
dx1,
d
x
2
mathrm{d}x_2
dx2)
—NumDiscStates:离散状态数(连续模型)
—NumOutputs:输出数量(
x
1
x_1
x1,
x
2
x_2
x2)
—NumInputs:输入数量u
—DirFeedthrough:直接馈通标志(输出是否由输入u控制,1是,0否)
比如,用输出状态方程描述:y=Cx+Du,如果D不是零,那么输出就是由输入控制
—NumSampleTimes:采样次数(一般情况下填1)
—x0 = [0 0]:初始状态变量设置为零
—str = []:保留参数,变量设置为空(未来可能使用)
—ts = [0 0]:ts = [Ts, To],其中 Ts 是采样期间,To 是初始时间偏移量。表示从零时刻开始,每隔零秒进行采样,也就是连续系统。一个离散模型每隔两秒生成一次输出,ts = [2, 0]。如下图所示
连续状态求导(微分)
记得把结构体pa传入函数
x(1)和x(2)指的是传入x中的
x
1
和
x
2
x_1和x_2
x1和x2,sys是返回dx1和dx2,也就是搭建模型。
输出函数
输出函数输出向量x,也就是
x
1
和
x
2
x_1和x_2
x1和x2
仿真模型
因为我们只是写了plant的M文件,所以点击simulink的库浏览器选择s函数模型,然后双击模型,更改如下图所示,名字为函数的名字plant,参数为结构体pa。
因为搭建的模型是为了比较x1d趋近于x1的程度,整个模型的搭建可以参考视频,下面是加入ctrl的M文件后,模型的最终结果
- plant:被控对象
- ctrl:控制器
- x1d: x 1 d 的导数 x_1d的导数 x1d的导数
- dx1d:
x
1
d
的二阶导
x_1d的二阶导
x1d的二阶导
最后
以上就是活力小霸王为你收集整理的MATLAB搭建s函数前言准备参考视频参考文章过程仿真模型的全部内容,希望文章能够帮你解决MATLAB搭建s函数前言准备参考视频参考文章过程仿真模型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复