我目前正在努力实现 MATLAB 基础工作区中的变量(由 init.m 脚本创建)与我的 Simulink 方案中某些功能块中使用的一些函数之间的正确全局通信。使用这些全局变量背后的想法是在 init.m 文件中初始化它们,运行执行和模拟,然后如果我想更改一些参数,我只需在那个脚本中更改它们。我尝试了不同的东西,但它们似乎不起作用
- 我尝试使用 Data Store Memory 模块,但如果我理解正确的话,它们只能在 Simulink 函数中实现全局性,而不是在 Simulink 和 Base Workspace 之间;
- 我也尝试过一些 Simulink.Signal 类,但要么我没有正确使用它们,要么它们不起作用。
我想要实现的最终行为应该是这样的:
在 init.m 文件中
global g0 k Kp Kd;
g0 = 9.81;
k = 0;
Kp = diag([1/3,1/3]);
Kd = diag([1/3,1/3]);
然后在我想使用的任何 Simulink 函数中,我只需执行以下操作:
global Kp;
global Kd;
ddr = ddr_des + Kd*(dr_des - dr) + Kp*(r_des - r);
编辑:关于我尝试过的更多解释。正如我所说,我尝试在 Simulink 中使用 Data Store Memory 模块来尝试实现全局性,我的做法如下。
- 我像之前写的那样在 init.m 文件中初始化了全局变量
- 我通过写 global + 他们的名字来回忆功能块中的变量。
- 在 Simulink 方案中,我添加了 Data Store Memory 模块 Simulink 模块
- 然后,在功能块的编辑数据部分,我将这些全局变量的范围修改为数据存储内存 范围
我确信这种方法不起作用,因为当我硬编码函数中变量的值(而不是使用全局变量)并模拟所有内容时,我会得到一些结果,而如果我尝试用这种方法执行我得到了几个错误,我理解它们与在全局变量中看不到任何数据有关。
关于 Simulink.Signal 的事情,我真的不记得我尝试过的各种事情,所以如果有人认为这是正确的方法,请告诉我。