【问题标题】:Use value from Input Port in Parameter of block - Simulink在模块的参数中使用来自输入端口的值 - Simulink
【发布时间】:2016-03-11 03:48:37
【问题描述】:

我有一个 simulink 模型,我计划将其转换为 C 代码并在其他地方使用。我已经定义了“输入端口”,以便在 simulink 模型中设置变量。

我正在尝试找到一种将输入变量用作状态空间块的一部分的方法,但我已经尝试了所有方法,但不知道该怎么做。

如前所述,这将被转换为 C/C++ 代码,因此无论如何都没有使用 matlab 的选项。

假设我在状态空间块参数中使用矩阵 A。矩阵 A 被定义为所以 A= [Input1 0;输入2 0; 0输入3]

我希望能够通过设置 Input1 2 3 等的值来通过代码更改输入的值。

【问题讨论】:

  • 请告诉我们你尝试了什么以及你得到了什么错误信息。
  • @Daniel 我尝试过使用 inports,但它们在参数块中无法引用。我也尝试在模型工作区中创建参数,但它们没有出现在代码生成中。
  • 所以你有一个工作正常但不支持代码生成的模型?请分享一个可以满足您需求的模型的最小示例。描述生成代码后不再起作用的内容。是根本不工作的问题,还是不能修改参数的问题。
  • @Daniel 一切正常,但我无法更改值

标签: c++ matlab simulink state-space


【解决方案1】:

在 Simulink 中,参数和信号之间有非常明显的区别。参数是输入到对话框中的东西,而信号是输入或输出块的东西。

State-Space 模块中的矩阵被定义为参数,因此您永远无法将信号输入其中。

你有两个选择。

  1. 不要使用状态空间块。而是使用更基本的块(即积分器、求和和乘积块)自己开发状态空间模型。这对于小型模型是可行的,但并不真正推荐。

  2. 请注意,块的参数通常是可调的。当您生成代码时,其中一个文件将是 model_name_data.c,这将包含一个允许您更改参数的参数结构。

请注意,无论哪种情况,仅从模型设计的角度来看,您都需要确保对模型的更改有意义(例如,不要使任何循环等变得不稳定)。

【讨论】:

  • "请注意,块的参数通常是可调的。"当变量是模型工作区的一部分时也是如此吗?认为只有在基础工作区的可变部分默认情况下才可以调整。
  • 你是对的,doc 确实说模型工作区变量通常不是可调的,但是(在某些情况下)model_name_data.c 文件仍然是生成。
  • 谢谢!我最终只是自己构建了状态空间模型,因为它不是一个很大的模型。
【解决方案2】:

您不能在生成代码后调整参数,因为它内联了一个常量值,通常这样做是因为它会产生最快的代码。要完全控制行为,您必须使用tunable parameters。有一张表,有不同的代码版本,根据你想要的,你可以选择正确的参数类型。

在许多情况下实现此目的的另一种懒惰方法是使用基本工作区变量,实现起来非常简单,并且在大多数情况下都可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多