介绍
创建模型步骤
模块集
使用模块创建框图:将需要的模块拖拽出来并连接
子系统及其封装
选中并右击,进行子系统封装
S-函数
Level-1 M文件型:创建sfuntest.m文件,实现y=-x功能
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66%sfuntest:S-函数的函数名 %t:当前仿真时间 %x:状态向量 %u:输入向量 %flag:用来标示仿真步骤,调用不同的回调函数 %sys:不同flag意义不同。0-系统描述、1-微分结果、2-更新结果、3-输出结果、4-下一个采样点、9-控制 %x0:输出状态值(只有flag为0时返回) %str:状态字符串(只有flag为0时返回) %ts:采样时间(只有flag为0时返回) %(level-1的规定格式,照做就行了,除了函数名不要去改动) function [sys,x0,str,ts,simStateCompliance] = sfuntest(t,x,u,flag) switch flag, case 0, [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes; case 1, sys=mdlDerivatives(t,x,u); case 2, sys=mdlUpdate(t,x,u); case 3, sys=mdlOutputs(t,x,u); case 4, sys=mdlGetTimeOfNextVarHit(t,x,u); case 9, sys=mdlTerminate(t,x,u); otherwise DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag)); end %初始化 function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes sizes = simsizes; sizes.NumContStates = 0; %连续状态个数 sizes.NumDiscStates = 0; %离散状态个数 sizes.NumOutputs = 1; %输出数目 sizes.NumInputs = 1; %输入数目 sizes.DirFeedthrough = 1; %有无直接反馈(输出=k*输入,表示有直接反馈;输出=k*状态,表示相反) sizes.NumSampleTimes = 1; %采样时间个数,至少一个采样时间 sys = simsizes(sizes); x0 = []; %初始状态 str = []; %状态字符串 ts = [0 0]; %采样时间,[0 0]连续采样时间、[0 1]连续采样时间并以最小步长运算、 %[period offset]采样时间Tm=m*period+offset、[-2 0]变步长离散采样时间,由flag=4设置、 %[-1 0]最小步长内改变的函数并采用驱动模块的采样时间、[-1 1]最小步长内不改变的函数并采用驱动模块的采样时间 simStateCompliance = 'UnknownSimState'; %状态导数函数 function sys=mdlDerivatives(t,x,u) sys = []; %状态表示函数 function sys=mdlUpdate(t,x,u) sys = []; %输出函数 function sys=mdlOutputs(t,x,u) sys = -1 * u; %下一步采样时间 function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime = 1; %采样步长 sys = t + sampleTime; %采样结束 function sys=mdlTerminate(t,x,u) sys = [];
最后
以上就是忧伤白开水最近收集整理的关于Simulink框图和S-函数的全部内容,更多相关Simulink框图和S-函数内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复