Simulin金宝appk上的Guy

金宝appSimulink &基于模型的设计

总线阵列和S-Function Builder支持金宝app

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

MATLAB等价:结构数组

在MATLAB中,可以使用类似的代码创建结构数组
另一个等效代码可以是:
让我们看看如何在Simulink中做同样的事情。金宝app

创建总线数组

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

嵌套总线数组

让我们通过将之前创建的总线数组包含到一个更大的总线来扩展我们的示例:
要做到这一点,新总线对象的元素“z”必须是“bus1”类型和维度2。

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

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

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

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

现在轮到你了

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

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。