我们有一个在dSPACE盒子上编译和运行的Simulink模型。我们需要能够
(1)可以使用常量块,只需输入一个数字即可。您可以在dSPACE中更改常量块的值。也可以在常量块中输入变量名称,如FOO,并将该值更改为可调参数。
到目前为止,(2)还不可能。像'set_param'这样的东西似乎不起作用,因为所有东西都是用Simulink Coder编译的。任何能够从模型内部更改参数FOO的方法都适用于我们。
应用程序/为什么?:我们有“目标x机器人位置”这样的值。有时,这个值是手动设置的,但有时,它是由不同的演员自动设置的('直线驱动','驱动曲线',等等)。很高兴看到当前目标x位置在一个明确的位置而不必担心手动将控制从手动模式切换到演员1,演员2等等(当然我们需要确保只有一个演员活跃在每一步)。如果需要并且我们的想法是不可能的,我们至少会喜欢一种优雅的方式来切换控制。
当前解决方法(有问题):
我们当前的方法检测设定值的变化(可能来自不同的演员)。 Actor 1设置值u1 = 10,然后y = u1 = 10。然后,演员2设定值u2 = 30,则y = u2 = 30。但是如果演员1再次设置u1 = 10,则没有检测到变化,y仍然是u2 = 30.
答案 0 :(得分:2)
您可以使用"数据存储内存",您可以在运行期间从MATLAB功能块中更改。
在M-Function中,您将FOO声明为global
变量。
function fcn(u)
%#codegen
global FOO
% Do something foo...
if u < 10
FOO = 1;
else
FOO = 2;
end
为了能够这样做,您必须首先通过&#34;端口和数据管理器&#34;将此全局变量附加到M-Function。
然后你还必须双击&#34;数据存储内存&#34;在模型和&#34;信号属性&#34;部分中在块参数中,您必须将以下参数设置为定义的值 - 此处不允许自动检测:
但我仍然建议使用M-FUNCTION的输出来驱动输出26!