【问题标题】:Simulink with if/else and different signal dimension具有 if/else 和不同信号维度的 Simulink
【发布时间】:2015-10-15 13:29:26
【问题描述】:

我需要在 simulink 中实现 if/else 来确定输入是标量值还是矩阵。请看下图:

给定:

  • Block(1) - 是一个输入,可以是标量“1”或矩阵“[[0 15];[5 10]]”

  • Block(2) - 必须返回输入的信号维度。例如:1 表示标量,>1 表示矩阵

要求是:

  • 一切都必须在解释或编译后工作(Simulink 编码器)
  • 块 (4) 和 (5) 的最终输出是标量
  • 我对 CMexSFunctions 的了解一般。因此,如果我需要实现一个来解决问题,那没关系

到目前为止,我遇到了以下问题:

  • 如果我打算做的事情是可行的,我根本不知道
  • 我不知道如何实现 Block(2) 以在编译模式下工作
  • 即使存在 if/else,simulink 也会在运行前执行预检查,以验证所有信号维度是否正常。在这个检查过程中,它给出了一个错误,说 ex: that Block(5) has a input of matrix

有什么线索吗?

【问题讨论】:

    标签: matlab simulink s-function


    【解决方案1】:

    Block(2) 是最简单的部分,可以使用 Simulink 库中的“Probe”模块来实现。您在端口 1 的输入必须是可变大小的信号,因为您需要一个标量或矩阵。

    我假设您将 Input(1) 提供给块 4 和 5。在模型编译时,Simulink 不知道根据输入大小将运行这些块中的哪一个。因此 Simulink 需要假设两个模块都可能是标量或矩阵。您需要使块 4 和 5 不会对标量和矩阵都抛出错误,即使它们在运行时仅用于一种类型。

    如果您无法做到这一点,对于标量情况,一个简单的解决方法是在块 5 之前放置一个选择器,始终选择第一个样本。这将使 Simulink 知道模块 5 的输入始终是标量。

    【讨论】:

    • 我会尝试实现它...我会保持联系:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 2015-01-06
    相关资源
    最近更新 更多