Matlab Simulink:避免非常量表达式或带有结构的空矩阵
我想在结构“A”和“B”中获取一些数据,这是结构“S”中的字段。例如:Matlab Simulink:避免非常量表达式或带有结构的空矩阵,matlab,function,structure,simulink,Matlab,Function,Structure,Simulink,我想在结构“A”和“B”中获取一些数据,这是结构“S”中的字段。例如: data = S.A.data; % Predefined in workspace structureNames(1).name = 'A'; structureNames(2).name = 'B'; % Simulink Matlab-Function function y = doSomething(S, structureNames) for i = 1:size(structureNames,2)
data = S.A.data;
% Predefined in workspace
structureNames(1).name = 'A';
structureNames(2).name = 'B';
% Simulink Matlab-Function
function y = doSomething(S, structureNames)
for i = 1:size(structureNames,2)
data = S.(structureNames(i).name).data;
% Process data and set output y ...
end
字段“A”和“B”应在循环中访问。为了访问不同的命名字段,我想使用第二个结构“structureNames”,其中指定了名称“a”和“B”。代码必须在Simulink中的Matlab函数中运行。“S”和“structureNames”定义为不可调参数。例如:
data = S.A.data;
% Predefined in workspace
structureNames(1).name = 'A';
structureNames(2).name = 'B';
% Simulink Matlab-Function
function y = doSomething(S, structureNames)
for i = 1:size(structureNames,2)
data = S.(structureNames(i).name).data;
% Process data and set output y ...
end
执行此操作时,我会收到以下错误消息:
非常量表达式或空矩阵。此表达式必须是常量,因为其值决定了某些表达式的大小或类
是否有此错误的解决方案或解决方法
我尝试了fieldnames函数,它创建了一个包含字段名的单元格数组。它工作了一次,但第二次Simulink崩溃,我不得不重新启动它。我猜Simulink不支持单元格(请参阅)
编辑
simulink块和端口的图像以及Matlab函数的数据类型管理器。simulink模型仅包含此matlab功能块。
我用eval函数尝试了建议的解决方案。不幸的是,代码生成不支持“eval”。有没有可能在Simulink中发布它是如何连接的/函数是如何调用的?您是否尝试过使用
eval
?类似于eval(['data=S',structureNames(i.name,'.data;'))
i添加了两个图像。我希望这有助于理解模型。如前所述,它只是模型中的matlab函数。没有嵌套的子系统等。我尝试了eval
,但代码生成不支持它。