1
私は、SIMULINKのEML(Embedded Matlab)関数ブロック内のMATLABワークスペースに形成された構造を反復しようとしています。以下はいくつかのコード例です:Simulinkの組み込みMatlab関数で構造体を反復処理するにはどうすればよいですか?
% Matlab code to create workspace structure variables
% Create the Elements
MyElements = struct;
MyElements.Element1 = struct;
MyElements.Element1.var1 = 1;
MyElements.Element1.type = 1;
MyElements.Element2 = struct;
MyElements.Element2.var2 = 2;
MyElements.Element2.type = 2;
MyElements.Element3 = struct;
MyElements.Element3.var3 = 3;
MyElements.Element3.type = 3;
% Get the number of root Elements
numElements = length(fieldnames(MyElements));
MyElementsは、SIMULINKのMATLAB Function Block(EML)のBus型パラメータです。以下は私が問題を抱えている地域です。私は私の構造体内の要素の数を知っていて、名前は知っていますが、要素の数はどのような構成でも変更できます。だから私は要素名に基づいてハードコードすることはできません。私はEMLブロック内の構造体を反復処理する必要があります。
function output = fcn(MyElements, numElements)
%#codegen
persistent p_Elements;
% Assign the variable and make persistent on first run
if isempty(p_Elements)
p_Elements = MyElements;
end
% Prepare the output to hold the vars found for the number of Elements that exist
output= zeros(numElements,1);
% Go through each Element and get its data
for i=1:numElements
element = p_Elements.['Element' num2str(i)]; % This doesn't work in SIMULINK
if (element.type == 1)
output(i) = element.var1;
else if (element.type == 2)
output(i) = element.var2;
else if (element.type == 3)
output(i) = element.var3;
else
output(i) = -1;
end
end
SIMULINKで構造体タイプをどのように反復処理することができますか?また、ターゲットシステムでコンパイルされるため、num2strのような外部関数は使用できません。