2016-04-08 15 views
0

私はMatlab 2014bを使用しています。それは古いバージョンの問題かどうかは分かりませんが、新しい問題だと思います。Matlab-Simulink 2014 'load'エラー:MATLAB式 'load'のフィールド数が正しくありません。

私のmain関数を.mファイルとして使いたいので、ここでデータを設定したいと思います。私はSimulink Model - User Defined Functionsでこのデータを使用します。私は、次のようなデータを作成した後、Mファイルに「保存」と呼ぶ:(「engineProperties.mat」)保存

それは私の現在のフォルダ内.MATファイルを作成します。

負荷(「engineProperties.mat」)

それは通常、正常に動作します:そして、私は私がでほしいどこでもそれを使用します。

を:;:

「9 ブロックcalculateEngineLoad(#30) を見つけ実行しながら8期待されるアクション中の状態MATLAB表現 『ロード』フィールドの正しい数を持っていない:」しかし、時々私は次のエラーを取得します

エラーメッセージが示すように、データを追加または削除するとエラーが発生します。私は新しい名前付きの.matファイルを作成することでそれを解決しますが、.matファイルをたくさん作成し、時には正しいファイルを覚えていないため、実行できません。

または、データのサイズを再調整するためのダミー変数を作成して解決します。難しいことではありません。

通常、現在のフォルダから.matファイルを削除すると機能しません。しかし、時には、例えば、私はコンピュータを再起動すると動作します!

私はそれは簡単な問題だと思っていますが、ウェブで同様のエラーが見つかりませんでした。助けてください:)

答えて

1

MATLAB関数ブロックのコードは、可変サイズの構造体をサポートしていないCコードにコンパイルされています。構造体が変更されるたびに、生成し、再度コンパイルする必要があります。

修正したい場合は、解釈されたMATLAB関数ブロックに切り替えます。この結果、多くの場合、パフォーマンスが低下することに注意してください。

代わりに私はあなたのアーキテクチャを考え直すでしょう。ファイル名から、ファイルにいくつかのパラメータが含まれていると仮定します。あなたの関数ブロックにそれらをロードするのではなく、はるかに良いアーキテクチャは、ブロックパラメータを使用してそれらを設定することです。その後、MATLAB関数ブロックを使用し続けることができ、コードを再生成する必要はありません。

+0

私が理解しているように、Simulink Library Browserに示されている「Interpreted MATLAB function」を使用することをお勧めします。しかし、私のユーザー定義関数は何とか長い、約20行です。これは単なる算術演算ではありません。あなたは 'ブロックパラメータを使用する'ことを意味することはできますか?私はあなたが私のソリューションに非常に近いと思います – daltooon

+0

この方法でパラメータを追加できます。http://de.mathworks.com/help/simulink/ug/parameter-arguments-in-matlab-function-block-functions.html – Daniel

+0

私はそれに続く週にそれに取り組む。それから私はそれが私に大丈夫かどうかを知らせます。前もってありがとう – daltooon

0

上記の推奨解決策(http://www.mathworks.com/help/simulink/ug/parameter-arguments-in-matlab-function-block-functions.htmlに記載)は十分です。しかし、時々あなたはたくさんのデータを持っているかもしれませんし、あなたは機能を混雑させたくありません。だから別の解決策があります:

ダニエルの答えに基づいて、MatlabはCコードにコンパイルされています。あなたはそれを感じていませんが、いくつかの ".mexw64"ファイルを作成します。あなたのMATLABを閉じて、それらのファイルを削除します。 Thats all

関連する問題