Matlab Simulink掩码:我可以获得变量以保存在内存中吗?

Matlab Simulink掩码:我可以获得变量以保存在内存中吗?,matlab,simulink,Matlab,Simulink,我的simulink掩码中有一个参数:refName。在Mask Initialization选项卡中,我首先将其初始化为类型为double的1 x 300向量。我必须这样做,因为这个向量被进一步传播到C++的S函数,数组不能(很容易)是可变大小的。 之后,在同一初始化选项卡中,根据用户输入的另一个参数refType为其分配一个值。因此,例如,如果refType为“R32”,则refName可能为[1 2 3](未使用所有300个单元格),如果refType为R410A,则refName可能为[

我的simulink掩码中有一个参数:
refName
。在Mask Initialization选项卡中,我首先将其初始化为类型为
double
的1 x 300向量。我必须这样做,因为这个向量被进一步传播到C++的S函数,数组不能(很容易)是可变大小的。 之后,在同一初始化选项卡中,根据用户输入的另一个参数
refType
为其分配一个值。因此,例如,如果refType为“R32”,则refName可能为[1 2 3](未使用所有300个单元格),如果refType为R410A,则refName可能为[4 5 6],依此类推

我遇到的问题是在模拟开始之前尝试将此变量发送到工作区(作为变量
refNameU
)。我尝试在CloseFcn、InitFcn和LoadFcn块回调中设置
refNameU=get_param(gcb,'refName')
,但由于某些原因,无论从哪个回调调用,工作区中的值始终为零。不是一个大小为300的向量,全是零,只有零

为了便于参考,我选中了refName参数的“Evaluate”、“Enable Parameter”和“Tunable”选项。有人能给我解释一下我做错了什么以及我如何解决这个问题吗?提前感谢。

CloseFcn
回调中使用,在基本工作区中分配变量

assignin('base', 'refNameU', refName);

为什么说用s函数处理不同大小的数组不容易?您应该能够使用
mxGetNumberOfDimensions
mxGetM
mxGetN
等获得所需的所有信息。@Praetorian您可能是对的。然而,我在Simulink方面的经验并不丰富,所以我只使用了我所知道的最直接的方法。基本上,我有一些Matlab代码,我首先使用MATLAB编码器转换成C++函数,然后使用遗留代码编译过程。谢谢你的帮助。不幸的是,它似乎仍然将其赋值为0。此外,我还了解到,
CloseFcn
回调仅在函数以编程方式关闭时有效,而不是通过掩码GUI以交互方式关闭。@UnaEngineer已在基本工作区中定义了
refNameU
,初始值为0,或者添加
赋值创建了它吗?我手头没有Simulink,无法亲自试用,因此您能否在
assignin
之前添加一个
disp
语句来显示
refName
的值?另外,添加
evalin('base','disp(refNameU)')assignin
之后的code>可能有助于跟踪变量在赋值后是否被覆盖。看来您对关闭FCN的看法是正确的。根据变量何时可用,
StartFcn
回调可能会起作用。它起作用了!对于将来阅读的任何人,诀窍是在掩码的初始化选项卡中执行此操作,而不是在回调中。澄清一下,你的答案已经起作用了,即使没有评论。再次感谢!