2.1 Simulink模块的组成要素
用户构建系统模型时无需直接面对成千上万行的代码,而是通过模块化图形界面以模块化的方式构建,能够使理解变得容易,让大脑减负。通过层次化模块分布将系统功能模块化,而将每个功能的细节隐藏在模块内部。
模块的构成元素:
- 输入/输出端口:作为模块之间传递数据的纽带,连接输入信号和输出信号。
- 模块外观:通常为矩形或圆形,上面带有说明文字或图像并显示有输出/输出端口名。
- 模块对话框:双击模块外观后弹出的参数GUI,可以在参数控件上进行参数设置。
Ctrl+R顺时针旋转90°
模块的属性及参数:
- gcb:获取当前被选中的模块
- gcbh:获取当前被选中的模块的句柄
- get(handle):获取模块的属性信息
- inspect(handle):通过属性观察器方式罗列模块的属性信息
- get_param(block,prop_string):获取block模块的prop_string属性值
- set_param(block,prop_string,prop_value):将block模块的prop_string属性的值设为prop_value。prop_string,prop_value可以多对出现
>> new_system('mymodel') >> open_system('mymodel') >> gcb ans = 'mymodel/Constant' >> get(gcbh) Path: 'mymodel' Name: 'Constant' Tag: '' Description: '' Type: 'block' Parent: 'mymodel' Handle: 1.8170e+03 HiliteAncestors: 'none' RequirementInfo: '' FontName: 'auto' FontSize: -1 FontWeight: 'auto' FontAngle: 'auto' Selected: 'on' MaskType: '' ......
常用属性列表
属性名 | 作用说明 |
Path | 模块在模型中的路径 |
Name | 模块的名字 |
ShowName | 模块的名字是否显示出来 |
BlockType | 模块的类型名 |
Handle | 模块的句柄,double数据表示 |
Position | 模块的边框在当前模型中的位置 |
ForegroundColor | 模块的前景色 |
BackgroundColor | 模块的背景色 |
Sample Time | 模块的采样时间 |
FontAngle | 字体斜度 |
FontName | 字体名 |
FontSize | 字体大小 |
FontWeight | 字体粗度 |
...... |
>> set_param(gcbh,'BackgroundColor','yellow') >> set_param(gcbh,'ForegroundColor','red')
set_param/get_param的第二个参数使用的不是提示标签,而是参数的变量名。
提示标签 | 参数的变量名 |
Constant value | Value |
Interpret vector parameters as 1-D |
VectorParams1D |
Sampling mode | SamplingMode |
Sample time | SampleTime |
常数模块、加减乘除四则运算和增益模块及输入输出端口都拥有Signal Attributes属性配置界面。
Output minimum和Output maximum中默认为空,不对数据输出进行任何检测。一旦设置了数值,模块就会对输出值进行检查,当数值小于Output minimum或者大于Output maximum时就会报错来提醒用户。
Output data type对输出数据的类型提供了一些选项。
模块的注解
右击模块选择Properties选项(以Integrator为例),双击以%<>标示的变量,可以将其转入右边的编辑框中,从而以悬浮文字的方式显示到模型中去。
合理使用模块注解功能能够增强模块的可读性,使得所建立的模型更容易被理解。
2.2 Simulink常用模块库
这些模块不仅存在于Commonly Used Blocks子库中,也分别存在于各自所属的类别库中,它们被集中在Commonly Used Blocks子库中是为了方便用户使用,建模时可以免去从各个分类库繁多的模块中搜寻这些常用模块的繁琐。
2.2.1 输入/输出模块
In
当它存在于子系统模型中时,将为子系统模型增加一个输入端口,是连接上层模型与当前层次模型的接口,将父层模型的信号传递到当前层次模型中来。
当子系统中存在In模块时,子系统模块框图将按照In模块的编号生成端口。
当将Workspace的数据导入模型时,对没有对应数据点的采样时刻进行线性插值的开关选项。
数据导入需要In模块结合Configuration Parameter版面中提供的数Data Import/Export功能共同实现。
注意t是表示时间的列向量。
>> t=[1:0.1:5]'; >> u=sin(3*t);
Out
当它存在于子系统模型中时,为子系统增加一个输出端口,是连接上层模型与当前层次模型的桥梁,将当前层次模型的信号传递到父层模型中去。
2.2.2 常数模块
常数模块在仿真过程中通常输出恒定的数值。
常数模块不仅支持scalar数据作为参数输入,也支持向量、矩阵等多维数据。
2.2.3 波形显示模块
Scope是模型中的示波器,能够显示模型中的信号波形。
可以连接任何类型的实数信号线,不支持复数。
输入端口数,默认值为1,表示仅有一个输入端口,当输入其他正整数N时可以产生对应个数的输入端口。
Structure With Time将Scope获取到的采样信号存储在结构体中,这个结构体包括:
- 存储时间序列的time
- 存储对应采样时间点的采样数据以及相关信息的结构体signals
- 存储模块全路径及名字的变量blockName
signals本身也是一个结构体,访问采样数据的方式是ScopeData.signals.values,采样数据按列排布。
plot(ScopeData.time,ScopeData.signals.values)
Structure存储类型少了time这个时间序列的存储,其他成员相同。
Array为列向量方式存储。
右击图形界面,选择style,可以设置显示风格
右击图形界面,选择Print Display to Figure,可以将波形输出到图窗显示
2.2.4 四则运算模块
Sum
推荐用法:当Sum模块的输入都是同一个时刻的输入时,采用矩形图标;当输入有来自输出的延时反馈时,采用圆形图标。
Product
Multiplication提供两种乘法,Element-wise表示点乘,Matrix表示矩阵乘法。
Divide
Gain
支持标量、向量或矩阵形式的增益。
2.2.5 延时模块
Delay
Delay length和Initial condition分别表示延时的采样点数和输出的初始值。
模块总的延时时间由延时的采样点数和模块采样时间间隔共同决定。
例如,Delay length为3,Sample time设置为0.6,则模块的输出将在1.8s时开始更新,在0~1.8s之间,模块的输出值由Initial condition中指定的初始值决定。
Source中Dialog表示参数在对话框里输入,Input port表示增加一个输入端口,通过信号线传递参数。
External reset选择None以外的选项时为Delay增加一个输入端口,通过此端口的输入信号达到某种条件而将Delay模块的输出值复位,所谓复位即Delay模块的状态值恢复初始状态值。
Level hold表示当前采样时刻的值非零时即复位。Level则包含了Level hold的情况,另外还包括信号从非零跳变到零的采样点。
Input processing包括Element as channels(基于采样)和Columns as channels(基于帧)以及Inherited3个选项,基于采样和基于帧的采样方式区别在于采样数据的组织方式。
勾选Use circular buffer for state选项时,将使用环形缓存存储仿真或代码生成时使用的状态变量,当Delay length值比较大时,勾选此选项有助于提高执行效率。
Unit Delay
是Delay模块的一个特例,即只延时一个采样时间,其参数对话框比较简单,不需要设置Delay length,不需要考虑缓存区使用环形或线性区域,没有复位功能。
设计示例:十进制累加计数器
2.2.6 关系操作模块
9种关系操作符
启用过零检测功能
2.2.7逻辑运算模块
7种逻辑操作
与(AND)、或(OR)、非(NAND)、或非(NOR)、异或(XOR)、异或非(NXOR)、非(NOT)
Icon shape用于选择模块图标的形状。选择rectangular时,模块形状不变,只是在框图中央显示当前所选择的逻辑操作。
选择distinctive时,模块会以IEEE图像符号标准所规定的形式展现出来。
有了逻辑运算模块,Simulink就可以进行数字门电路的逻辑仿真。
2.2.8 Switch模块
Switch模块是一个选择开关模块,可根据判断条件选择多个输入端口中的某个进行输出。
若由第2个端口决定的判断条件为真,则输出口输出第1个端口的信号;否则输出第3个端口的信号。
多路选择:
2.2.9 积分模块
Integrator
External reset:增加一个输入端口,通过外部输入信号的电平或脉冲上下沿进行状态变量的复位。
Initial condition source:初始值的获取方式选择。
Initial condition:模块的初始值。
Limit output:勾选时对输出值的上下限进行限定。
Show saturation port:使能饱和输出端口。1表示输出值超出上限但被上限饱和值限制住,0表示上下限均未达到,-1表示超出下限但被下限饱和值限制住。
Show state port:使能状态输出端口。用于消除代数环。
示例:
示例:求解微分方程
y''(t)+5y'(t)+6y(t)=2x'(t)+8x(t)
x(t)=exp(-t)×u(t)
y(0-)=5,y'(0-)=-4
Discrete-Time Integrator
离散积分模块
Integrator method提供了3中算法和2种工作模式。
- Integration模式下Ts表示采样时间间隔
- Accumulation模式下Ts被固定为1
- Forward Euler:y(n)=t(n-1)+K×Ts×u(n-1),并非直接馈入,输入输出信号之间存在延时
- Backward Euler:y(n)=t(n-1)+K×Ts×u(n),直接馈入
- Trapezoidal:y(n)=t(n-1)+K×Ts×[u(n-1)+u(n)]/2,直接馈入
2.2.10 限幅模块
示例:半波整流
2.2.11 接地模块
此模块没有参数,用于避免仿真时某些模块出现输入端口未连接的警告。
2.2.12 终止模块
用来接收未使用的输出信号。
2.2.13 信号合并与分解模块
Mux模块是一个虚拟模块,虽然视觉上将多个信号合并为一个信号,但是实际上并没有改变其内部数据结构,只是视觉上看起来简洁并且可以同一管理。
在仿真模型中,往往可以使用Mux模块将多个信号汇聚之后显示到同一个scope的同一个坐标系中,这样scope就不需要提供多个输入输出端口了。
Demux模块能将多维信号分解为单维或维数较少的多维信号。
2.2.14 总线创建与总线选择模块
Bus creator模块将输入的一系列信号合并为一个总线。
当Output data type选择为Bus:<object name>,勾选Output as nunvirtual bus时,表示输出信号是非虚拟信号,在C代码生成时将输出总线信号定义为结构体。
a=Simulink.Bus; a.DataScope='Exported'; a1=Simulink.BusElement; a2=Simulink.BusElement; a1.Name='a1'; a2.Name='a2'; a.Elements=[a1,a2];
#ifndef RTW_HEADER_a_h_ #define RTW_HEADER_a_h_ #include "rtwtypes.h" typedef struct { real_T a1; real_T a2; } a; #endif /* RTW_HEADER_a_h_ */
Bus Selector可从总线中选择出一个或一组成员,这个总线信号可来自于Bus Creator、Bus Selector或其他输出Bus object的模块。
2.2.15 向量连接模块
来源:https://www.cnblogs.com/dingdangsunny/p/12235689.html