编辑推荐: |
文章主要Bus信号进行了概述,虚拟Bus信号及其代码,非虚拟Bus信号及其代码以及其他相关内容。 来自于csdn,由火龙果软件Anna译、推荐。 |
|
1 Bus信号概述
通过Bus Creater模块,可以将不同的信号线构建成Bus信号,就像将许多电线捆绑在一起一样。根据虚拟性,可以将Bus信号分为虚拟Bus信号和非虚拟Bus信号。
虚拟Bus信号只是看起来把很多信号合并成了一个,在生成代码的时候,和不用Bus信号是一样的效果。虚拟Bus信号如图所示,由三根平行直线和箭头组成。

非虚拟信号线在生成代码的时候会生成出结构体。如图所示,由两根直线和虚线组成。

2 虚拟Bus信号及其代码
打开Simulink,建立如下的简单模型,验证虚拟Bus信号的代码生成。

可以注意到,模型中把信号数据类型和维度显示出来。由于图中把Bus直接输出给一个Outport模块,虚拟Bus信号必须使用相同的数据类型,不然会报错,如下图所示。
如果是先用Bus Creater生成一个Bus信号,再用一个Bus
Selector把信号提取出来,就没有类型相同的限制了。

然后,Ctrl+B生成一下代码并分析,可以看到输出的Outport模块被定义为一个数组,这也是为什么必须类型相同的原因。

3 非虚拟Bus信号及其代码
定义非虚拟Bus对象,需要经过一些配置。
1.打开Model Explorer,选中Base Workspace

2.点击工具栏中的Add——Simulink Bus,添加一个Bus对象。

3.将Bus的名称重命名为Bus1,右侧的Data Scope选为Exported,Header
File写为Exported.h。这个操作是为了把Bus1的结构体定义保存在Exported.h文件中。

4.打开Launch Bus Editor,进入Bus编辑窗口。在Bus1中添加两个元素,a和a1。a的Datatype设为double,dimenssions为1;a1的Datatype设为single,dimenssions为2。通过该方式验证Bus元素不同类型和维度的情况下也能生成代码。然后点击Apply保存。

5.接下来回到模型中,双击打开Bus Creater,此时Output
data type的下拉框可以选则刚刚新建的Bus1。

6.选中Bus:Bus1,再勾选下方的Output as
nonvirtual bus,这样就可以将这个Bus定义为非虚拟Bus信号了。

7.把Inport1输入口的数据类型配置为double,和Bus对象的a元素相对应。然后Ctrl+D更新一下,就可以看到不同的数据类型和维度也可以组合成Bus。

8.然后再Ctrl+B生成一下代码。首先可以观察到生成的代码中有一个Exported.h文件,这个文件就是步骤3中自定义的头文件。再文件中,用typedef创建了一个名为Bus1的结构体类型,其中的成员有double类型的a和single类型的a1[2]。

打开demo.h,可以看到用Bus1这个结构体类型定义了一个结构体变量Out1,对应模型中的输出端口。

最后,到demo.c的step函数中可以看到对Out1的赋值操作。非虚拟Bus信号创建了一个结构体。

4 总结
非虚拟Bus信号生成结构体的情况,应用场景不算很多,只是暂且知道这么一回事儿就行了。
|