主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

最上位モデルからの再呼び出し可能なコ,ドの生成

既定では,コ,ドジェネレ,タ,は,最上位モデルに対して再呼び出し可能でないコ,ドを生成します。エントリポ▪▪ント関数にはvoid-void▪▪ンタ▪フェ▪▪スがあります。コードは,共有メモリ内にあるグローバルデータ構造体へのアクセスを共有して他のコードとやりとりします。

再利用によってメリットがあり,コードの使用またはインスタンスごとに独自で固有なデータを維持する必要のあるアプリケーションの場合は,コードジェネレーターで再呼び出し可能なコードが生成されるようにモデルを設定します。再呼び出し可能なコ,ドを生成するには,モデルコンフィギュレ,ションパラメ,タ,コドンタフェスのパッケジ化[再利用可能な関数]に設定します。嵌入式编码器®コ,ドを使用して,c++コ,ドを生成している場合は,パラメ,タ,を[c++クラス]に設定できます。どらの場合でも,コドジェネレタは以下を実行します。

  • ブロックI / O, DWorkベクトル,パラメーターなどのモデルデータをリアルタイムモデルデータ構造体(rtModel)にパッケ,ジ化する。

  • リアルタイムモデルデータ構造体を入力引数として,生成されたモデルのエントリポイント関数に参照渡しする。

  • ルトレベルの入力引数と出力引数を,生成されたモデルのエントリポント関数に個々の引数として渡す。

  • モデルデ,タ構造体にメモリを静的に割り当てる。

  • リアルタ▪▪ムモデルデ▪▪タ構造体を生成された模型. hヘッダファルにエクスポトする。

以下のモデルコンフィギュレーションパラメーターを設定して,追加の診断およびコード生成制御を適用します。

  • モデルがマルチインスタンスコードの要件を満たしていない場合にコードジェネレーターに表示される診断メッセージの重大度のレベルを選択するには,パラメーターマルチンスタンスコドのエラの診断[なし][警告],または[エラ]に設定する。モデルがマルチインスタンス コードの生成に対する要件に違反した場合に、表示される診断の重大度レベルを変更する必要がある場合を除き、パラメーターを[エラ]に設定します。

  • 生成されたコードでルートレベルのモデルの入力および出力を再利用可能な実行(ステップ)関数に渡す方法を制御するには(嵌入式编码器が必要),パラメータールトレベルI/Oを以下として渡す(嵌入式编码)[個々の引数][構造体参照],または[モデルデ,タ構造体の一部]に設定する。

    コドンタフェスのパッケジ化[再利用可能な関数]に設定した場合,コードジェネレーターはモデルデータ(ブロックI / O, Dwork,パラメーターなど)をリアルタイムモデルデータ構造体にパッケージ化して,生成されたモデルのエントリポイント関数にモデル構造体を渡します。ルトレベルI/Oを以下として渡す(嵌入式编码)[モデルデ,タ構造体の一部]に設定した場合,コードジェネレーターはルートレベルのモデル入力と出力をリアルタイムモデルデータ構造体にパッケージ化します。

  • メモリの使用量を削減するため,リアルタイムモデルデータ構造体からエラーステータスフィールドを省略して(嵌入式编码器が必要),モデルコンフィギュレーションパラメーター[リアルタムモデルデタ構造のエラステタスフィルドを削除]を選択します。

  • mallocを使用してモデル▪▪ンスタンスデ▪▪タにメモリを動的に割り当てる関数を生成ファ▪▪ル模型. cに含めるには(嵌入式编码器が必要),モデルコンフィギュレーションパラメーター[モデルの初期化に動的メモリ割り当てを使用]を選択します。このパラメーターを選択していない場合,生成されたコードはモデルデータ構造に対してメモリを静的に割り当てます。

再呼び出し可能なマルチ▪▪ンスタンスコ▪▪ドの生成

この例では,再呼び出し可能なマルチ。複数のプログラムで再呼び出し可能なコ,ドを同時に使用できます。再入用のモデルを設定すると,実行(步骤)エントリポイント関数では,グローバルデータ構造体ではなく,ルートレベルの入力引数と出力引数が使用されます。コンフィギュレ,ション設定を検査した後に,コ,ドを生成し,生成されたコ,ドを確認します。

モデルを開く

モデルrtwdemo_reusableを開きます。このモデルには,ルートの尺寸ブロックが2つとルートの外港ブロックが1つ含まれます。

模型=“rtwdemo_reusable”;open_system(模型);

書き込み可能な場所にモデルのコピ,を保存します。

currentDir = pwd;[~,cgDir] = rtwdemodir();

関連するモデルコンフィギュレ,ションパラメ,タ,設定の確認

1.嵌入式编码器アプリを開きます。

2.[モデルコンフィギュレションパラメタ]ダアログボックスを開きます。

3.モデルコンフィギュレションパラメタ[システムタゲットファル]ert.tlcに設定されています。[システムタゲットファル]grt.tlcに設定して構成したモデルに対して再呼び出し可能なコードを生成できますが,ERTおよびERTベースのシステムターゲットファイルでは,コード内のルートレベルI / Oの受渡し方法をより細かく制御できます。

4.[コ,ド生成],[e,ンタ,フェe,ス]ペンを開き,関連するモデルコンフィギュレションパラメタ設定を確認します。

  • [コドンタフェスのパッケジ化]が[可重用的功能]に設定されていることを確認する。このパラメーター設定は,コードジェネレーターに対して再利用可能なマルチインスタンスコードを生成するよう指示します。

  • 可重用的功能の設定にパラメタ[マルチeconp econpンスタンスコドのエラの診断]が表示されます。このパラメ,タ,は错误に設定されます。この値は,モデルがマルチインスタンスコードを生成するための要件に違反した場合,コードジェネレーターが中断することを示します。

  • [ル,トレベルI/Oを以下として渡す]が[部分模型数据结构]に設定される。この設定では、ル、トレベルのモデル入力と出力をリアルタ、ムモデルデ、タ構造体(rtModel)にパッケ,ジ化します。この構造体は,SimStructをモデルの最上位デ,タ構造体として置き換える最適化されたデ,タ構造体です。

  • [リアルタムモデルデタ構造のエラステタスフィルドを削除]が選択されている。このパラメーター設定では,生成されたリアルタイムデータモデル構造体からエラーステータスフィールドを削除することでメモリ使用量を削減します。

コドの生成とレビュ

slbuild(模型);
###开始构建过程:rtwdemo_reusable构建过程成功完成:rtwdemo_reusable构建摘要构建的顶级模型目标:模型动作重建原因================================================================================================= rtwdemo_reusable生成和编译的代码生成信息文件不存在。构建1 / 1模型(0个模型已经更新)构建时间:0h 0m 12.235s

生成コドのレビュ

  • ert_main.cはモデル用の主プログラムの例(実行フレ,ムワ,ク)を示す。このコドは,エントリポント関数rtwdemo_reusable_stepを呼び出してモデルのコ,ド実行を制御します。このファルを,実行フレムワクのコディングの開始点として使用します。

  • rtwdemo_reusable.cには,モデルのアルゴリズムを実装するコ,ドのエントリポ,ントが含まれる。このファルには,レトスケジュリングコドが含まれています。

  • rtwdemo_reusable.hは,モデルエントリポイントとデータ構造にモデルデータ構造体とパブリックインターフェイスを定義する。

  • rtwtypes.hは,生成コ,ドが必要とするデ,タ型,構造体およびマクロを定義する。

コドンタフェス

コドンタフェスレポトを開いてレビュします。このレポトの情報を使用して,実行フレムワクのンタフェスコドを記述します。

1.命令# include rtwdemo_reusable.hを追加することによって,生成されたヘッダファルをンクルドします。

2.モデルの输入ブロックの生成コ、ドへの入力デ、タを記述します。

3.生成されたエントリポ@ @ント関数を呼び出します。

4.モデルの输出端口ブロックの生成コ,ドからデ,タを読み取ります。

入力端子:

  • < Root > /三机一体:次元1のデ,タreal_T

  • < Root > / In2:次元1のデ,タreal_T

エントリポ电子邮箱ント関数:

  • 初期化エントリポ电子邮箱ント関数,void rtwdemo_reusable_initialize(RT_MODEL * rtM)。開始時にこの関数を一度呼び出します。

  • 出力と更新(步骤)エントリポ(RT_MODEL *const rtM)。この関数を,モデルの最速レ,トで定期的に呼び出します。このモデルでは,関数を毎秒呼び出します。リアルタ@ @ムの実行を実現するには,この関数をタ@ @マ@ @に接続します。

出力端子:

  • < Root > /着干活:次元1のデ,タ型real_T

ステップ関数の確認

检查|rtwdemo_reusable_step|中的|rtwdemo_reusable_step|函数代码。
cfile = fullfile(cgDir,“rtwdemo_reusable_ert_rtw”“rtwdemo_reusable.c”);rtwdemodbtype(用'/*模型阶跃函数'/*模型初始化函数, 1, 0);
/*模型步长函数*/ void rtwdemo_reusable_step(RT_MODEL *const rtM) {D_Work *rtDWork = rtM->dwork;外部输入*rtU =(外部输入*)rtM->输入;ExternalOutputs *rtY = (ExternalOutputs *) rtM->outputs;* UnitDelay: '/Delay' */ rtY->Out1 = rtDWork->Delay_DSTATE;/*增益:'<根>/增益'合并:*输入:'<根>/In1' *输入:'<根>/In2' * Sum: '<根>/Sum' * UnitDelay: '<根>/Delay' */ rtDWork->Delay_DSTATE = (rtU->In1 + rtU->In2) * rtP.k1;}

コドジェネレタはモデルデタをリアルタムモデルデタ構造体の一部として関数rtwdemo_reusable_stepに渡します。モデルコンフィギュレーション パラメーター[コドンタフェスのパッケジ化][ル,トレベルI/Oを以下として渡す]の設定を変えて,コ,ドを再生成してみてください。関数プロトタイプがどのように変化するか確認します。

モデルとレポ,トを閉じる

モデルおよびコ,ド生成レポ,トを閉じます。

bdclose rtwdemoclean(模型);cd (currentDir)

ンスタンス間でのデ,タの共有

コードで再呼び出し可能なモデルのエントリポイント関数を複数回呼び出す場合,各呼び出しはモデルの1つのインスタンスを表します。既定では,コードジェネレーターは,各インスタンスがモデルの信号,ブロック状態,およびパラメーターの個別のコピーに対して読み込み/書き込みを実行することを前提とするコードを生成します。

  • インスタンス間でパラメーターデータの一部を共有するには(再利用可能なPID制御アルゴリズムの設定点を共有するなど),金宝app仿真软件。参数などのパラメ,タ,オブジェクトを使用します。次に,汽车以外のストレージクラスを使用するか,またはコードマッピングエディターでパラメーターを設定し,パラメーターデータの対応するカテゴリの既定のストレージクラス(默认)(既定の設定)を(默认模式)に設定します。パラメーターオブジェクトは,グローバル変数など,関数が直接アクセスするグローバルシンボルとしてコードに表示されます。詳細にいては,モデルンタフェス要素のcコド生成の構成を参照してください。

  • インスタンス間で非パラメーターデータの一部を共有するには(障害指標やアキュムレーターを共有するなど),データストアを使用します。データストアを設定することで,関数が直接アクセスするグローバル変数のように,グローバルシンボルとしてコードに表示させるようにできます。金宝app仿真软件。信号オブジェクトを使用してグロ,バルデ,タストアを作成するか,数据存储内存ブロックを使用して,ブロックパラメ,タ,[モデル电子邮箱ンスタンス間で共有する]を選択します。詳細にいては,デ,タストアの作成によるグロ,バルデ,タのモデル化および数据存储内存を参照してください。

関連するトピック