Simulin万博1manbetxk上的家伙

万博1manbetxSimulink和基于模型的设计

总线阵列和S-Function Builder支持万博1manbetx

本周, Navid Rahbariasr 建议发表一篇关于支持万博1manbetx 总线阵列 添加到 s函数生成器 在MATLAB R2021b中。
这让我意识到我从来没有接触过Simulink中总线阵列的基础知识。万博1manbetx因此,本周我们将带您了解创建总线数组的基础知识,并通过描述如何在MATLAB R2021b中的S-Function Builder块中使用它们来结束。

MATLAB等效:结构数组

在MATLAB中,可以使用如下代码创建结构数组
另一个等价的代码可以是:
让我们看看如何在Simulink中做同样的事情。万博1manbetx

创建总线数组

在Si万博1manbetxmulink中,相当于MATLAB结构的是总线信号。因此,让我们尝试创建两个相同的总线信号,并使用Vector concatenate块将它们连接到一个数组中,下面是更新图表后的模型:
如果你熟悉 信号线样式 在Si万博1manbetxmulink中,您可能已经得出结论,这里有一些东西没有像预期的那样工作。总线创建者1和总线创建者2发出的两个信号是总线,但Vector Concatenate的输出是一个包含4个元素的向量,而不是一个总线数组。
原因是Simulink可以将总线信号视万博1manbetx为矢量。在这种情况下,Simulin万博1manbetxk决定将总线信号视为向量,因为它们是虚拟总线。只有非虚拟总线才能连接到总线数组中。
为了使总线信号是非虚拟的,可以使用 万博1manbetxSimulink.Bus.createObject 或者是 公共汽车编辑器 要创建一个 总线对象
这个总线对象可以在总线创建器块中使用,以指定输出应该是非虚拟的:
现在的信号线风格是预期的,我们正在生产两个总线的阵列。
注意:如果您想避免Simulink将总线信号作为矢量处理,而更喜欢万博1manbetx得到一个警告或错误,请查看诊断 总线信号作为矢量处理

总线嵌套数组

让我们扩展我们的例子,将之前创建的总线数组包含到一个更大的总线中:
为了实现这一点,新总线对象的元素“z”必须是类型“bus1”和维度2。

在MATLAB函数块和状态流中访问总线数组

将总线或总线数组发送给 MATLAB函数块 或者一个 Stateflow图表 ,就可以像MATLAB中的结构数组一样访问单个元素:
顺便说一下,如果你没有注意到,在MATLAB R2021b中,MATLAB函数块的代码现在在Simulink画布中打开,而不是在MATLAB编辑器中打开。万博1manbetx

在S-Function Builder中访问总线数组

正如本文开头所提到的,在MATLAB R2021b中,对总线嵌套数组的支持已添加到S-Function Builder块中万博1manbetx。
让我们用之前模型中的S-Function Builder来替换MATLAB函数块:
为了让块接受总线信号,我们首先需要在Ports and Parameters面板中指定相应的总线对象。然后,您可以在S-function Builder应用程序的Outputs部分中输入与上述MATLAB代码等价的C代码。注意 情况 是指针类型,因此我们需要使用 -> “到大自然中去。 c语言使用基于零的索引,所以z的第一个元素是z [0]:
在构建S-Function之后,你应该注意到当前目录中有一个带有总线定义的头文件:

现在轮到你了

您是否使用总线数组?你会利用s函数构建器中的这个新支持来将总线数组传递给自定义C代码吗?万博1manbetx请在下面的评论中告诉我们。
|

评论

如欲留言,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。