Simulink从0搭建模型06-P7模型中结构体的使用
- 本节课学习内容
- 1. 结构体的创建 Bus Creator(多输入单输出)
- 2. 结构体的引用 Bus Selector(单输入多输出)
- 3. 结构体的赋值 Bus Assignment
- 4. 结构体对象的创建 Bus object
- 5. 结构体数组的创建 Vector Concatenate(多输入单输出)
- 6. 结构体数组的保存
本节课学习内容
b站视频【Simulink 0基础入门教程 P7 模型中结构体的使用 Bus Creator/Selector/Assignment】
1. 结构体的创建 Bus Creator(多输入单输出)
对比数组和结构体的模块,看起来很像,区别在于数组模块的输入必须为相同的数据类型,而结构体的数据类型可以不同。如下图为结构体的创建:
输入一个学生结构体的4个信号:
- id
- mathScore
- EnglishScore
- ChineseScore
双击Bus Creator模块,可以看到线上默认的名字为signal1~signal4:
如何修改名字呢?用鼠标双击
该线更改名称:
再次双击Bus Creator模块,发现线上名称已经更改了:
2. 结构体的引用 Bus Selector(单输入多输出)
我们输入有4个不同类型的数据,如果直接用一个Display显示结果会报错。
验证:
报错原因:Display的输入口不能接收混合数据类型。
也就是说,一个Display不能显示不同的数据类型,那好办,我们就用多个Display显示。但是Bus Creator只有一个输出,怎么办?
所以就用到了Bus Selector模块(单输入多输出),来选择输出信号:
用Select把左边的信号添加到右边:
再比如:
3. 结构体的赋值 Bus Assignment
现在想要修改学生的信息。
- 添加Bus Assignment模块:
- 修改参数mathScore=100:
eg2:
4. 结构体对象的创建 Bus object
把一个学生的信息(id、mathScore、EnglishScore、ChineseScore)放在一个结构体对象里面。
为啥这么做?
双击打开Bus Selector模块,选择结构体对象输出类型:
先修改名称后再点Edit进入工作界面:
添加一个结构体对象,右侧更名为"StudentInfo"(点工具栏的+,Add Bus
):
在结构体对象下面加成员:
最后创建的结构体对象如下:
关闭退出。
再更新一下"Refresh data types",同时记得勾选上Output as nonvirtual bus(作为非虚拟总线输出):
结构体对象创建效果图:
在Bus Creator模块的输出线上显示了对象名称为StudentInfo。
遇到bug:
我创建好了名为MyInfo的结构体对象,运行报错:
查找问题发现,在结构树下我所创建的输入顺序错了,导致上面的数据类型不匹配:
调整顺序:
再次运行就不报错了:
5. 结构体数组的创建 Vector Concatenate(多输入单输出)
还记得前面我问的为啥要创建结构体对象了吧,在这里我们就明白了创建结构体对象的作用了,多个结构体对象可以构成一个结构体数组,方便我们管理学生信息。
创建5个学生的结构体(复制粘贴),然后用一个Vector Concatenate模块打包成一个5维结构体数组。
接下来,我们想要查看学生X的信息,也就是说先选择哪个学生,再选择该学生的信息。
- 用Selector模块选择是哪个学生:
- 用bus selector模块显示该学生的信息:
eg2:
6. 结构体数组的保存
最后,我们好不容易创建了一个结构体数组,把它保存一下,直接可以调用的。
存为.mat文件格式,自命名。
回到matlab打开的界面,就可以载入我们保存好的模型了。
-END-