Matlab Simulink:避免非常量表达式或带有结构的空矩阵

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)

我想在结构“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.(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
,但代码生成不支持它。