没有合适的资源?快使用搜索试试~ 我知道了~
matlab中s-function的编写.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 7 浏览量
2021-09-14
16:04:46
上传
评论
收藏 46KB DOCX 举报
温馨提示
试读
4页
。。。
资源推荐
资源详情
资源评论
s 函数是 system Function 的简称,用它来写自己的 simulink 模块。(够简单吧,^_^,
详细的概念介绍大伙看帮助吧)可以用 matlab、C、C++、Fortran、Ada 等语言来写,这儿我
只介绍怎样用 matlab 语言来写吧(主要是它比较简单) 先讲讲为什么要用 s 函数,我觉得用
s 函数可以利用 matlab 的丰富资源,而不仅仅局限于 simulink 提供的模块,而用 c 或 c++
等语言写的 s 函数还可以实现对硬件端口的操作,还可以操作windows API等的
先介绍一下 simulink 的仿真过程(以便理解 s 函数),simulink 的仿真有两个阶段:
1。初始化:这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样
时间等;
2.运行阶段:这个阶段里要进行计算输出、更新离散状态、计算连续状态等等。这个阶
段需要反复运行,直至结束.
在 matlab 的 workspace 里打 edit sfuntmpl(这是 matlab 自己提供的 s 函数模板),我
们看它来具体分析 s 函数的结构。
它的第一行是这样的:function [sys,x0,str,ts]=sfuntmpl(t,x,u,flag) 先讲输入与
输出变量的含义:t 是采样时间,x 是状态变量,u 是输入(是做成 simulink 模块的输入),flag
是仿真过程中的状态标志(以它来判断当前是初始化还是运行等);sys 输出根据 flag 的不
同而不同(下面将结合 flag 来讲 sys 的含义),x0 是状态变量的初始值 ,str 是保留参数
(mathworks 公司还没想好该怎么用它,嘻嘻,一般在初始化中将它置空就可以了,str=[]),ts
是一个 1×2 的向量,ts(1)是采样周期,ts(2)是偏移量.
下面结合 sfuntmpl。m 中的代码来讲具体的结构:
switch flag, %判断 flag,看当前处于哪个状态
case 0, [sys,x0,str,ts]=mdlInitializeSizes;
flag=0 表示处于初始化状态,此时用函数 mdlInitializeSizes 进行初始化,此函数在
sfuntmpl。m 的 149 行我们找到他,在初始化状态下,sys 是一个结构体,用它来设置模块的
一些参数,各个参数详细说明如下:
size = simsizes;%用于设置模块参数的结构体用 simsizes 来生成
sizes.NumContStates = 0;%模块连续状态变量的个数
sizes.NumDiscStates = 0;%模块离散状态变量的个数
sizes.NumOutputs = 0;%模块输出变量的个数
sizes.NumInputs = 0;%模块输入变量的个数
sizes。DirFeedthrough = 1;%模块是否存在直接贯通(直接贯通我的理解是输入能 %
直接控制输出)
举个例子,考虑如下模型: dx/dt=fc(t,x,u) 也可以用连续状态方程描述:
dx/dt=A*x+B*u x(k+1)=fd(t,x,u)
x(k+1)=H*x(k)+G*u(k) y=fo(t,x,u)
也可以用输出状态方程描述:
y=C*x+D*u
设上述模型连续状态变量、离散状态变量、输入变量、输出变量均为 1 个,我们就只
需改上面那一段代码为:(一般连续状态与离散状态不会一块用,我这儿是为了方便说明)
sizes.NumContStates=1;sizes.NumDiscStates=1
;
资源评论
苦茶子12138
- 粉丝: 1w+
- 资源: 6万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功