在模块的参数中使用输入端口的值 - Simulink

Use value from Input Port in Parameter of block - Simulink

我有一个 simulink 模型,我计划将其转换为 C 代码并在其他地方使用。我定义了 'input ports' 以便在 simulink 模型中设置变量。

我正在尝试找到一种将输入变量用作状态 Space 块的一部分的方法,但我已经尝试了所有方法,但不确定如何去做。

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

假设我在 state-space 块参数中使用矩阵 A。矩阵 A 被定义为 A= [Input1 0;输入2 0; 0 输入 3]

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

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

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

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

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

你有两个选择。

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

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

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