总线中的可变元素
创建具有可变条件的总线
这个例子展示了如何用具有不同变化条件的元素创建总线信号。这个模型有两个信号(' a ', ' b '),合并后创建一个总线信号。这两个信号有不同的变异条件,V==1和W ==1。
总线选择器由两个具有两种不同变化条件的信号馈电(V==1和W==1)。当这个总线信号被输入到总线选择器中时,当您从总线上选择单个信号时,也会选择可变条件。
请注意
可变总线支持使用复合端口作为输入和输出端口。
要查看完成的模型,请打开slexVariantBus
模型。
用总线传播变量条件
一个变异来源块可以接受虚拟或非虚拟总线输入。
考虑这个模型。
总线在V = 1和W = 1的不同条件下创建。当条件V和W通过总线传播时,当从总线中选择单个元素时,也会选择条件。
代码生成
您可以为模型生成代码。要这样做,就应用程序单击工具条页签嵌入式编码器,然后在C代码选项卡上,单击构建.有关配置模型以生成代码的更多信息,请参见为代码生成准备包含变量的模型.
当使用预处理器条件生成代码时,所有总线输入的总线类型和层次结构必须相同。
虚拟和非虚拟总线行为
虚拟总线提供了在框图中使用总线来减少信号杂波的最简单方法。非虚拟总线支持建模组件(如S-functions或MATLAB函数块),需要显式指定接口。当变量条件通过虚拟或非虚拟总线传播时,变量条件的传播行为不会发生变化。
为虚拟总线生成的代码如下所示。
/*块状态(默认存储)为系统“根> <”* /类型结构体{#如果V == 1 real_TUnitDelay_1_DSTATE;/*< Root > /单元的延迟*/ #define D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS #endif /* V == 1 */ #如果W == 1 int32_TUnitDelay_2_DSTATE;/*< Root > /单元的延迟*/ #define D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS #endif /* W == 1 */ #ifndef D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS字符_rt_unused;# endif} D_Work_ex_bus_var_cond;
为非虚拟总线生成的代码如下所示。
/*块状态(默认存储)为系统“根> <”* /类型结构体{#如果V == 1 || W == 1 myBusUnitDelay_DSTATE;/*< Root > /单元的延迟*/ #define D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS #endif /* V == 1 || W == 1 */ #ifndef D_WORK_EX_BUS_VAR_COND_VARIANT_EXISTS字符_rt_unused;# endif} D_Work_ex_bus_var_cond;
您必须在总线中有一个相关联的总线对象,它提供了Simulink®用于验证总线信号。有关总线对象的更多信息,请参见使用Simulink指定总线属性。总线对象数据类型.总线中使用的总线对象是无条件的,它生成不受保护的代码,如下所示。
类型定义结构体{real_T一个;int32_Tb;} myBus;
带有模型块的变体总线
考虑这个模型包含一个模型块。
这个模型有两个信号(' a ', ' b '),它们有不同的变化条件,V==1和V==2。
从模型块时,总线选择器被馈送两个具有两种不同变化条件的信号(V==1和V==2)。当您从总线上选择单个信号时,也会选择不同的条件。
已知的限制
块不支持状态日志记录(例如,单位延迟),它在一个总线上,其中一些元素被删除了。