【问题标题】:is there a way in Simulink to use the same set of blocks on multiple signals (without copying those blocks)?Simulink 中是否有办法在多个信号上使用同一组模块(无需复制这些模块)?
【发布时间】:2021-05-19 03:29:22
【问题描述】:

我正在实施一些头部跟踪,我得到了 2 个水平速度矩阵。 (分解为垂直和水平速度的矢量场)。对于这些矩阵中的每一个,我都会做一些数学运算来计算实际的头部跟踪。

我的问题是,有没有办法在两个矩阵上进行数学运算(这是一组块)而不将数学块复制到每个信号上?

很难解释,所以这里是我的模型的屏幕截图:

您可以看到“complex to real-imag”块有 2 个输出(这是中间的小输出)。然后,平均块和积分器电路计算实际矩阵的磁头速度和位置(水平位置)。我想在虚矩阵(垂直方向)上做完全相同的例程。显然我可以只复制块,但肯定有更好的方法吗?在某种程度上,我正在寻找类似 C 之类的“正常编程”中的循环的类似物,其中一段代码在不同的输入上执行多次。

【问题讨论】:

    标签: matlab simulink


    【解决方案1】:

    您可以在 Simulink 中创建一个库,其中包含可以多次引用的代码。

    转到文件 -> 新建 -> 库。在打开的模型窗口中,您可以使用所需的任何代码创建任意数量的子系统。然后,只需将一个子系统从库中拖到您的模型中。该子系统现在将出现在您的模型中,左下角有一个小箭头图标。这表明模型中的子系统是一个链接。您可以将任意数量的库子系统实例拖入您的模型中,就像您可以在任何其他编程语言中多次调用函数一样。

    如果您右键单击模型中的子系统,您可以选择“Link Options -> Go To Library Block”返回库。您可以对模型进行更改并将它们传播回库。

    【讨论】:

    • 这是一个有点晚的问题,但是如果我在 Level-2 MATLAB S-Function 回调方法中使用了全局变量怎么办。否,块的两个副本都使用全局变量,因此第二个块覆盖了第一个块的结果。我希望变量仅在块回调中是全局的,而不是在完整的 Simulink File 中。有人有想法吗?
    【解决方案2】:

    轻松重用一组块的一种方法是从它们中取出create a subsystem。在您的情况下,您可以create a subsystem by grouping existing blocks,然后简单地复制并粘贴您的子系统以将其用于您的想象输出。

    虽然可能更复杂,但您也可以考虑使用 mux signals 以避免复制模型的某些部分。

    【讨论】:

    • 有没有办法链接这些子系统,以便一个更改会传播到它的所有克隆?
    • @codenoob:我不知道,这就是为什么我在我的答案(多路复用信号)中列出了您可能想要查看的另一个选项。
    • 您可以尝试在工作空间中创建一个变量,并使您在 simulink 模型中的值指向该变量,即添加一个增益块并在它要求一个值的地方插入名称 K,然后设置 K = 0.5 在工作空间中
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多