-2

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

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

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

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

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

4

2 回答 2

3

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

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

你有两个选择。

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

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

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

于 2016-03-11T17:04:49.997 回答
1

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

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

于 2016-03-11T17:00:54.983 回答