文档

从公共汽车开始

您可以将信号组合成一个总线信号,然后作为一个整体访问总线,或者从总线中选择特定的信号。这些例子展示了在模型和生成的代码中创建和使用总线的基础知识。有关其他信息,请参见公共汽车

例子 描述

创建和使用虚拟总线

虚拟总线提供了在框图中使用总线来减少信号杂波的最简单方法。
创建和使用非虚拟总线 非虚拟总线支持建模组件(如s函数或万博1manbetxMATLAB函数块),需要显式指定接口。
为公交车生成代码 为虚拟总线和非虚拟总线生成的代码是不同的。非虚拟总线的代码生成将生成一个结构,该结构有助于跟踪模型及其生成的代码之间的对应关系。
slexBusExample 简单的例子介绍了使用总线相关的块,包括用于智能编辑总线信号的动画。

提示

对于包含由馈电子系统的许多总线元素组成的总线信号的模型,可以考虑使用总线元件而且输出总线元件块。您可以使用这些总线元素端口块来代替轮廓尺寸总线选择器块用于输入,和外港总线的创造者用于输出的块。这些总线元素端口块:

  • 减少框图中的信号线复杂性和杂波。

  • 使增量式更改接口变得更容易。

  • 允许访问靠近使用点的总线元素,避免使用总线选择器而且转到块配置。

有关更多信息,请参见简化子系统总线接口

这些示例很简单,主要关注创建和使用总线的基本步骤。当您有许多有意义的信号组合以降低视觉复杂性时,总线是最有用的。示例还包括标记块和信号的步骤,以澄清信号和总线之间以及块之间的关系。如果您选择逐步构建示例模型,您可以跳过这些步骤。

创建和使用虚拟总线

这个例子展示了如何将信号组合成虚拟总线。该模型从虚拟总线中选择单独的信号(总线元素),并将这些总线元素用作单独的信号。

提示

更改总线元素值而不添加总线选择器而且总线的创造者块选择总线元素并将它们重新组装为总线,则可以使用总线分配块。详细信息请参见给总线分配信号值

要查看完成的模型,请打开ex_bus_tutorial_virtual模型。在模拟模型时,总线信号线表明总线是虚拟的。

执行以下步骤可获得创建和使用虚拟总线的经验。

  1. 来自Simulin万博1manbetxk®“开始页”,选择一个空白模型模板。

  2. 在“Simul万博1manbetxink编辑器”中添加线性调频信号Block和a正弦波块。

  3. 为来自两个块的信号创建一个总线。拖动以选择块,然后在出现的操作栏中单击创建总线

    万博1manbetxSimulink添加总线的创造者块,并将输入信号连接到该块。

  4. 默认情况下,总线的创造者块名称不显示。若要添加块名称,请选择该块,并从出现的操作栏中选择显示块名称.然后编辑名称,将其从总线的创造者subbu

  5. 您不必在总线中标记信号。但是,标记使我们更容易看到总线元素信号和总线信号之间的关系。标记输出信号线性调频信号块。右键单击信号并选择属性.在信号的名字属性,输入尖声地说.类似地,设置正弦波信号名称正弦

    请注意

    输入总线的创造者块必须有唯一的名称。如果有重复的名称,则总线的创造者块附加(信号#)到所有输入信号名称,其中输入端口索引。

    不要使用小于字符(<)开始一个信号名称。

  6. 添加一个一步块下方的正弦波块。

  7. 要创建嵌套总线,请添加总线的创造者块在当前块的右侧。连接信号从subbu块和信号来自一步Block到秒总线的创造者块。

  8. 标签输出信号从subbusubbu信号来自一步一步

  9. 控件的块名称总线的创造者块,它创建嵌套总线。将名称更改为NestedBus

  10. 附加一个范围块到nestedBus信号。

  11. 在右边NestedBusBlock,添加一个子系统块和连接NestedBus向子系统输出信号。

  12. 连接子系统阻塞输出端口到a范围块。

  13. 在子系统中,断开轮廓尺寸而且外港块,并插入总线选择器块的右边轮廓尺寸块。连接轮廓尺寸块到总线选择器块。

  14. 显示了总线选择器块的名字。将名称更改为BusSelector

  15. 在右边总线选择器Block,添加一个饱和块,并设置其下限参数

  16. 结合尖声地说信号和饱和块输出信号到总线。

  17. 把总线信号和一步信号进入嵌套总线。

  18. 将嵌套总线连接到外港块。

  19. 若要查看仿真结果,请模拟模型并打开范围块。

创建和使用非虚拟总线

类中使用的虚拟总线ex_bus_tutorial_virtual模型到非虚拟总线。要查看完成的模型,请打开ex_bus_tutorial_nonvirtual模型。某些建模情况需要非虚拟总线。为非虚拟总线生成代码将总线表示为结构。有关何时使用非虚拟总线的详细信息,请参见非虚拟总线使用指南

在模拟模型时,总线信号线表明虚拟总线被转换为非虚拟总线。

执行以下步骤可获得创建和使用非虚拟总线的经验。

  1. 打开ex_bus_tutorial_virtual模型。

  2. 总线信号不指定它们是虚拟的还是非虚拟的;它们从它们所在的块继承该规范。每个创建或需要非虚拟总线的块都必须有一个相关联的总线对象。

    subbu块,指定生成非虚拟总线输出。在“块参数”对话框中设置输出数据类型总线:subbu.此设置使用subbu对象,该对象提供Simulink用于验证总线信号的总线属性。万博1manbetx

    另外,选择输出为非虚拟总线参数。

    请注意

    当您使用总线对象创建非虚拟总线时,在模拟模型之前,总线对象必须在基本工作区中。您需要定义总线对象或使用已经定义的总线对象。为了简化这个例子,当您打开模型时,模型回调将必要的总线对象加载到基本工作区中。要查看回调,请打开文件>模型属性>模型属性打开回调选项卡。

    有关创建总线对象的信息,请参见创建总线对象

  3. NestedBus块,设置输出数据类型总线:topBus并选择输出为非虚拟总线参数。

  4. subbu总线对象期望调用总线中的第二个输入信号正弦.虽然总线选择器块选择正弦信号来自总线,默认名称为输出信号饱和Block不是正弦.使用信号特性对话框来命名饱和块输出信号正弦

  5. topBus总线对象期望调用总线中的第一个输入信号subSignal.使用信号特性对话框来命名公共汽车信号subSignal

  6. 若要查看仿真结果,请模拟模型并打开范围块。结果与模拟的结果相同ex_bus_tutorial_virtual您用作此模型基础的模型。

为公交车生成代码

使用虚拟总线的模型的仿真结果相同(ex_bus_tutorial_virtual)和使用非虚拟总线的模型(ex_bus_tutorial_nonvirtual).但是,生成的代码是不同的。

添加一个单位延迟Block和外港块后的子系统块有助于突出所生成代码中的差异。

为虚拟总线模型生成的代码

ex_bus_tutorial_virtual_code_gen模型。

虚拟总线不会影响生成的代码。例如,在生成的文件中ex_bus_tutorial_virtual_code_gen.c,模型中的算法一步功能有效地实现了三个单位延迟块(一个用于每个有意义的信号,例如尖声地说,穿过街区)。

/* UnitDelay: '/Unit Delay' */ rtb_chirp = ex_bus_tutorial_virtual_code_DW.UnitDelay_1_DSTATE;/* UnitDelay: '<根>/单位延迟' */ rtb_signal2 = ex_bus_tutorial_virtual_code_DW.UnitDelay_2_DSTATE;/* unitdelay_3_dstate: '/Unit Delay' */ rtb_step = ex_bus_tutorial_virtual_code_DW.UnitDelay_3_DSTATE;

为非虚拟总线模型生成的代码

对于非虚拟总线模型,使用输出数据类型设置为总线:topBus而且范围块被注释掉,因为范围生成的代码不需要块,也不支持代码生成。万博1manbetx

ex_bus_tutorial_nonvirtual_code_gen模型。

非虚拟总线以结构的形式出现在生成的代码中。每一个万博1manbetx仿真软件。公共汽车对象显示为结构类型。类型定义出现在ex_bus_tutorial_nonvirtual_code_gen_types.h

typedef struct {real_T chirp;real_T正弦;} subbu;typedef struct{子总线子信号;real_T步骤;} topBus;

模型中的算法一步函数可以实现单位延迟块作为一行代码。块状态和输出是类型结构topBus

/* UnitDelay: '<根>/单位延迟' */ rtb_UnitDelay = ex_bus_tutorial_nonvirtual_c_DW.UnitDelay_DSTATE;

另请参阅

功能

相关的话题

这个话题有用吗?