从函数创建基础工作区中的结构(从2D工作区的工作区块中添加)

时间:2017-02-08 18:25:50

标签: matlab simulink

我需要在我的一个函数内部创建基础工作区内的结构并用值填充它们,问题是我没有明确知道结构的名称。为什么?我的模型使用工作区块,2D数组需要结构形式,根据Mathworks文档。见下文。

%some function
function [SimulationData,Error,Warnings] = ExtractTestCaseData(TestCaseFile,TestCase,OutputType)
.
.
[NumericData,TextData,RawData] = xlsread(TestCaseFile,TestCase);
.
.
%logic to create and populate simulationData structure with data from excel file
.
.
if regularVector
   assignin('base',SimulationData.Input(InputIndex).Name,SimulationData.Input(InputIndex).Values(1,:)); %no problem
elseif 2DArray
   %now what? I need in the base workspace
   %var.time=[TimeValues]
   %var.signals.values=[DataValues]
   %var.signals.dimensions=[DimValues]
   assignin('base',SimulationData.Input(InputIndex).Name,'1');%create signal name with random value, I don't know the value of Name, need to convert to structure form as in the comments
   evalin('base','nameIDontKnow.time=SimulationData.Time;'); %two problems actually, referencing a name I don't know in base workspace and base workspace has no concept of what SimulatinData.Time is, and so on if you catch my drift.
.
.
end

有没有人知道如何使这项工作?

1 个答案:

答案 0 :(得分:0)

我的解决方案

for InputIndex
    %2D arrays must be in structure form for from workspace blocks (Mathworks)
    %make structure in base workspace and populate with values
    assignin('base','InputIndex',InputIndex);                  
    assignin('base',SimulationData.Input(InputIndex).Name,'[]');%create the signal/structure name give random value for now                    
    evalin('base', sprintf('%s.time=Time;',SimulationData.Input(InputIndex).Name));
    assignin('base','Values',SimulationData.Input(InputIndex).Values);
    evalin('base', sprintf('%s.signals.values=Values;',SimulationData.Input(InputIndex).Name));
    assignin('base','Dimensions',[size(SimulationData.Input(InputIndex).Values,1) size(SimulationData.Input(InputIndex).Values,2)]);
    evalin('base', sprintf('%s.signals.dimensions=Dimensions;',SimulationData.Input(InputIndex).Name));
end
相关问题