1)clock
这个模块的输出是 y(t)=t。很多信号都是和时间 t 相关的,例如正弦波信号,可以写成 sin(w*t) 的形式。虽然软件也提供了正弦波模块,但如果用 clock 模块+三角运算模块,对初学者而言,也是很好的做法,至少减轻了很多负担:基于几个模块就可以建立大部分信号源。
2)constant
模块的输出是 y(t)=value,其中value的默认值是1。这里引出一个“模块参数”的概念。双击模块后,弹出的对话框里,所有可以设定的量,就称为模块参数,比如 constant 模块最重要的模块参数,就是 value。需要注意的是,这个value可以写1*1的标量,也可以写向量或者矩阵。在 signal attributes 标签下,还有其他的模块参数,比如之前一直强调的 data type,就可以设定后续信号线上的数据类型。
3)repeating sequence
只看模块图片,一般人会以为这是“锯齿波”,但其实这个模块的功能远不止如此。双击模块可以看到 time 和 output 两个 value,填入两个等长的向量即可。效果上,相当于输出一个信号 plot(time,output) 的周期延拓。和 plot 的思路一样,只要能用描点法描述的函数波形,都能用这个模块实现。
1)连续传函
自动控制原理里,会大量用到线性时不变系统,这些模块都在这个库里,用状态方程描述的state-space,用传递函数描述的 transfer Fcn,以及其中的特例,积分模块。
2)离散传函
与连续传函对应的,是离散传函。特别的,unit delay模块。这里对应1.4.2求解常微分方程组的例子,如果是求解离散系统的迭代方程 x(k+1)=f(x(k),u(k),t(k)),那么这个过程就是拖拽一堆unit delay模块,将他们的输出定义为 x(k),搭建函数 f 后,再将结果交给 unit delay 的输入。
3)比较和逻辑运算
主要是两个模块,Logical Operator用来实现与或非的运算,双击之后,除了 operator 这个模块参数外,还有一个 icon shape,用来调整模块的外观,可以让模块看起来更像逻辑门。Relational Operator是比较模块,一般使用时,先将信号线连到比较模块,然后再交给与或非运算,用来实现 MATLAB 中的 if 逻辑表达式。
4)数学运算
这个库涵盖了加减乘除、三角、指数等常用数学符号,基本上初等函数都在这里了。Add模块双击后,会有模块参数 list of signs,用于控制输入的个数和其运算的规则。例如三个加号,那么输出信号就是三个信号相加的结果。同样的逻辑也适用于divide模块。对乘除法模块有一些额外说明,就是multiplication这个模块参数,可以选择点乘,也可以选叉乘。这两种乘法与 MATLAB 中的定义一样。剩下的几个模块,都是双击后能有多种选择,都是初等函数。
暂时只需要知道 scope 就足够日常使用了。双击 scope后,有几个需要注意的地方
1)小齿轮按钮,可以调节输入个数,从而一个模块观察多个输入。
2)工具栏上有缩放,用来观察特定区域的信号
3)有个logging限制,可以只显示信号线 y(t) t=最后一段时间,的时域波形。
MATLAB里说的流程控制,一般是指for,while,if,switch这些,Simulink里要实现 for 和 while 比较少见,但实现 if 的情况还是很多的,这时,需要 switch 模块。这个模块的原理是根据第二个信号的值,来判断输出第一个信号还是第三个信号,相当于MATLAB的代码
if u2>th
Out=u1
else
Out=u3
end
在 2.3 中有讲,信号线的基本属性是采样时间、维度、数据类型,这里有两个模块可以强制信号线的采样时间和数据类型,当遇到关于信号线属性不匹配的报错时,可以用这两个模块解决。例如图中,假设左边模块输出 int8 数据类型,而右边模块希望输入是 int16 数据类型,这样直接连线会造成报错,说数据类型不匹配。此时加入一个 convert,将左边的 int8 输出,转成 int16,就满足了右边模块的要求。
Simulink提供了如此众多的模块,就如同 MATLAB提供了如此众多的函数一般,这里只是介绍了一些我自认为常用的模块,更多模块还是要边用边学。