0

Matlab2012aとSimulinkCoder(別名Real-Time Workshop)を使用しています。Simulink Coderを使用してモデルをコンパイルしたいのですが、モデルコールバックの機能は保持しています。


次の簡単な例を考えてみましょう。SimulinkモデルがcallBackTestあります。これは定数を読み込み、sinceに出力します。PreLoadFcnモデルコールバックinput1を使用してモデルワークスペースで定義されmyValues.m、ロードされます。PreLoadFcnコールバックは、モデルが最初に開かれたときに実行されます。PreLoadFcnコールバックを使用すると、モデルが開かれるたびに自動的に定義されます。input1

Simulinkブロック

PreLoadFcn

元々myValues.mはとしてコード化されているとしinput1=1ます。シミュレーションを実行するyoutと、は1の配列になります。また、Simulinkコーダーを使用してモデルをコンパイルすると、出力も1の配列になります。ただし、そのように変更myValues.mしてinput1 = 2再コンパイルしない場合でも、リアルタイム出力は1のままです。これは間違っているので、コンパイルされたモデルを使用してファイルからモデルワークスペースに変数を読み取るにはどうすればよいですか。

4

2 に答える 2

0

これはモデルのコールバックに関する質問には答えませんが、とにかく役立つかもしれません。

[インラインパラメータ]オプションがチェックされている場合:[設定]->[最適化]->[信号とパラメータ]

すでにコンパイルされているモデルの値はハードコーディングされているため、値を変更する方法はありません。このオプションをオフにして再コンパイルしたら、たとえば、外部モードに接続してmyValues.mスクリプトを実行すると、値が更新されます(調整不可としてマークした場合を除く)。

于 2012-12-13T17:24:27.247 に答える
0

モデルコールバックのコードを生成することはできません。入力を変更するたびにコードを再生成したくない場合は、.matファイルからデータを読み取ることができる「FromFile」ブロックを使用してみてください。データを変更する場合は、MATLABコードを実行して、出力データを同じ.matファイルに保存できます。このブロックからのコード生成でサポートされるデータの種類には、いくつかの制限があります。詳細については、そのブロックのドキュメントを確認してください。

データが大きすぎない場合は、生成されたソースを編集してデータを変更することもできます。Constantブロックからのデータは通常、生成されたソースコードにインライン化されます。編集後、生成されたコードをコンパイルして新しいバイナリを生成できます。

もう1つのアプローチは、独自のデータソースから読み取ることができるカスタムCS-Functionを作成することです。このS-Functionのコード生成をサポートするには、TLCファイルを作成する必要があります。

これらが機能しない場合は、モデルを再コンパイルする必要があります。http://www.mathworks.com/help/simulink/ug/importing-signal-data-in-simulink.htmlのドキュメントには、信号データをSimulinkにインポートするさまざまな方法がリストされています。

于 2013-02-22T14:06:36.323 に答える