主要内容

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

カスタムブロックの機能の比較

カスタムブロックを作成する場合,次のことを考慮してください。

この表は,各カスタムブロックタイプにおける3つの懸念事項への対処を示しています。

モデル化における考慮事項

カスタムブロックタイプ 状態ダイナミクスのモデル化 シミュレーションの性能 コード生成
解释MATLAB函数 いいえ 高速ではない サポートなし
2级MATLAB函数 はい 高速ではない TLCファイルが必要的
MATLAB函数 いいえ 高速 サポートあり,ただし例外あり
MATLAB系统 はい 高速 サポートあり,ただし例外あり
はい 高速 TLCファイルまたは非インラインs函数のサポートが必要的
C调用者 いいえ 高速 サポートあり
C函数 はい 高速 サポートあり
はい 高速 サポートあり
金宝app仿真软件的功能 はい 高速 サポートあり
はい 高速 サポートあり

カスタムブロックの詳細設計については次を考慮してください。

状態動作のモデル化

現在の出力を計算するために以前の出力の一部またはすべてを要求するブロックの,状態動作をモデル化する必要があります。詳細については,状態変数を参照してください。

カスタムブロックタイプ メモ
解释MATLAB函数C调用者 状態動作をモデル化できない。
MATLAB函数C函数 持续的変数を使用することで離散状態をモデル化できる。
2级MATLAB®功能 ContStates実行時オブジェクトメソッドまたはDwork実行時オブジェクトメソッドをブロックコールバックメソッドと組み合わせて使用することで連続状態動作と離散状態動作の両方をモデル化できる。サポートされるメソッドのリストについては,编写二级MATLAB s函数MATLAB二级s函数回调方法を参照。
MATLAB系统 系统对象のDiscreteStateプロパティをブロックコールバックメソッドと組み合わせて使用することで離散状態動作をモデル化できる。このブロックは系统对象™メソッドを次のコールバックメソッドに対して使用する。mdlOutputsstepImploutputImpl)、mdlUpdateupdateImpl)、mdlInitializeConditionsresetImpl)、mdlStartsetupImpl)、mdlTerminatereleaseImpl)。詳細については,系统对象とはを参照。
C墨西哥人s函数s函数生成器 ブロックコールバックメソッドを組み合わせて使用することで連続状態動作と離散状態動作の両方をモデル化できる。詳細については,C MEX s -函数的回调方法を参照。
金宝app仿真软件的功能 エンジンと直接通信する。連続および離散模金宝app型ブロックライブラリにある適切なブロックを使用することで状態動作をモデル化できる。異なる呼び出し元からこの関数が複数回呼び出される場合,状態値はそれらの呼び出しの間でも維持される。詳細については,複数のサイトからの仿金宝app真软件功能ブロックの呼び出しを参照してください。
子系统 エンジンと直接通信する。連続および離散模金宝app型ブロックライブラリにある適切なブロックを使用することで状態動作をモデル化できる。

シミュレーションの性能

ほとんどのアプリケーションについて,すべてのカスタムブロックタイプは十分なシミュレーション性能を提供します。実性能の表示を得るには,金宝app仿真软件プロファイラーを使用してください。詳細については,プロファイラーによるパフォーマンスデータの取得を参照してください。

性能表示の2つのカテゴリは,インターフェイスコストとアルゴリズムコストです。インターフェイスコストは,データを仿真金宝app软件エンジンからブロックに移動するのに要する時間です。アルゴリズムコストは,ブロックで実装したアルゴリズムを実行するのに要する時間です。

カスタムブロックタイプ メモ
解释MATLAB函数 インターフェイスの関係で,性能はやや低速ながら,MATLAB関数と同じアルゴリズムコストになります。
ブロックデータ(入力や出力など)が解释MATLAB函数ブロックとの間でやり取りされるとき,金宝app仿真软件エンジンはこのデータをMATLAB配列にパッケージ化します。このパッケージ化には時間がかかり,通信時に一時的にメモリ要求が増加します。このインターフェイスでフレームや配列のような大量のデータをやり取りすると,性能がかなり低速になることがあります。
データが変換された後は,MATLAB実行エンジンがアルゴリズムを実行します。その結果,アルゴリズムコストはMATLAB関数と同じになります。
2级MATLAB函数 解释MATLAB函数ブロックと同じアルゴリズムコストが発生しますが,インターフェイスコストはわずかながら高くなります。MATLAB的s函数は複数の入力と出力を扱うので,解释MATLAB函数ブロックよりパッケージが複雑です。さらに,Simulink エンジンは実装したブロック メソッドごとに MATLAB 実行エンジンを呼び出しますが、解释MATLAB函数ブロックは输出メソッドに対してのみMATLAB実行エンジンを呼び出します。
MATLAB函数 コードを生成してシミュレーションを実行するので,コストは他の仿金宝app真软件組み込みブロックと同じになります。
このブロックのアルゴリズムコストの解析は,ブロックの実装方法のせいで難しくなっています。平均すると,このブロックの関数とMATLAB関数はほぼ同じ速度で実行されます。
MATLAB実行エンジンを呼び出すためにcoder.extrinsicを使用するコードがMATLAB函数ブロックにある場合,MATLAB函数または解释MATLAB函数ブロックで発生するすべてのコストが発生します。MATLAB実行エンジンがMATLAB函数ブロックから呼び出されると,意図しない実行を避けるために,確認の警告が出ます。
アルゴリズムコストを削減するには,すべてのMATLAB函数ブロックのデバッグを無効にします。
MATLAB系统 インタープリター型実行モードでは,モデルがMATLAB実行エンジンを使用してブロックをシミュレートするため,性能は2级MATLAB函数に類似します。コード生成モードでは、モデルが生成コードを使用してブロックをシミュレートするため、性能はMATLAB函数に類似します。詳細については,この表のMATLAB函数の項目を参照してください。
C调用者C函数 モデルを初めてシミュレートするときは,カスタムコードの解析とビルドが原因で,実行速度が遅くなる可能性があります。最初のコンパイル後にシミュレーションを高速化するには,[コンフィギュレーションパラメーター]から,コンパイルを高速化するために(高速なビルド]を選択し,シミュレーションを高速化するために(高速に実行)を選択します。
C墨西哥人s函数 コンパイルされたコードを使ってシミュレーションを実行するので,コストは仿金宝app真软件組み込みブロックと同じになります。アルゴリズムコストはs函数の複雑度によって異なります。
s函数生成器 このブロックは指定した仕様とCコードのみからs函数をビルドします。モデルで生成されたs函数のラッパーとしてこのブロックを使用することもできます。C墨西哥人s函数と比較すると、このブロックのアルゴリズム コストはラッパーからのみ発生します。
金宝app仿真软件的功能,子系统 ライブラリに含まれている場合,ブロックが通常のサブシステムとしてモデル内に存在する場合に比べて,インターフェイスやアルゴリズムの追加コストは発生しません。
性能は,サブシステム内で実行されるアルゴリズムの複雑度に比例します。サブシステムがライブラリの中にある場合,オーバーヘッドはブロック線図がはじめて更新されるときやシミュレーションの準備をするときに,まだ読み込まれていないライブラリを仿金宝app真软件が読み込むときに発生します。参照されているすべてのライブラリブロックが変更されていない場合,仿金宝app真软件はその後ライブラリを再読み込みしません。モデルがライブラリを使用しなかった場合よりも,モデルのコンパイルは速くなります。

コード生成

モデルがより大きなシステムの一部である場合,コード生成が必要です。カスタムブロックタイプの中には金宝app仿真软件编码器™でコード生成をサポートしないものがあります。

カスタムブロックタイプ メモ
解释MATLAB函数 コード生成をサポートしない。
C调用者C函数 コード生成をサポートします。
2级MATLAB函数 目标语言编译器(TLC)関数を使って実装されたアルゴリズムに対してのみコードを生成します。アクセラレータモードとエクスターナルモードのシミュレーションでは,アルゴリズムをTLCで実装することなくs函数をMATLAB実行エンジンを呼び返してインタープリターで実行するようにできます。MATLAB的s函数がSimViewingDeviceである場合,金宝app仿真软件编码器製品はコード生成時に自動的にそのブロックを除外します。
MATLAB函数MATLAB系统 コード生成をサポートします。ただし,ブロックがMATLAB実行エンジンを呼び出す場合,MATLAB実行エンジンの呼び出しがブロックの出力に影響しない場合にのみ,ビルドに金宝app仿真软件编码器製品が使用されます。この条件下では,金宝app仿真软件编码器製品は生成されたCコードからこれらの呼び出しを除外します。この機能によって,組み込みコードを生成する場合でも可視化コードをそのまま残すことができます。
C墨西哥人s函数s函数生成器

いずれもコード生成をサポートします。

  • インラインでないs函数のコード生成では,金宝app仿真软件编码器製品はC墨西哥人関数を使用。

  • C墨西哥人s函数の場合には,インライン化されたs函数が必要な場合や,手書きコードのラッパーを作成する必要がある場合は,s函数のTLCファイルを記述しなければならない。

  • s函数生成器の場合には[ラッパーTLCの生成]オプションを選択して自動的にTLCファイルを生成できる。

詳細については,s函数とコード生成(金宝app仿真软件编码器)を参照してください。

金宝app仿真软件的功能 コード生成をサポートします。
子系统 サブシステムに含まれるブロックがコード生成をサポートする限り,コード生成をサポートします。詳細については,サブシステム用の関数の生成を制御(嵌入式编码)を参照してください。

複数の入力端子と出力端子

次のタイプのカスタムブロックでは,複数の入力端子と出力端子がサポートされます。

カスタムブロックタイプ メモ
解释MATLAB函数 サポートされる入力端子と出力端子はそれぞれ1つのみ。
MATLAB函数 バス信号を含めて,複数の入力端子と出力端子をサポート。詳細については,構造体の入出力とバス信号とのインターフェイスを参照してください。
MATLAB系统 バス信号を含めて,複数の入力端子と出力端子をサポート。さらに,getNumInputsメソッドおよびgetNumOutputsメソッドを使用して,系统对象のプロパティに基づいて入力端子と出力端子の数を変更できる。
C调用者C函数 バス信号を含めて,複数の入力端子と出力端子をサポート。
MATLAB二级s函数,C MEX s函数,s函数生成器 複数の入力端子と出力端子をサポート。さらに,ユーザー定義のパラメーターに基づいて入力端子と出力端子の数を変更できる。C MEX S-Function およびs函数生成器はバス信号をサポートします。
金宝app仿真软件的功能 バス信号を含めて,複数の入力端子と出力端子をサポート。
子系统 バス信号を含めて,複数の入力端子と出力端子をサポート。さらに,ユーザー定義のパラメーターに基づいて入力端子と出力端子の数を変更できる。詳細については、自己修正可能なリンク付きサブシステムを参照してください。

金宝appブロック線図の更新速度

金宝app仿真软件は毎回のシミュレーションの前と,ユーザーに要求されたときにブロック線図を更新します。ブロックごとに,ブロック線図の更新プロセスで何らかのオーバーヘッドが発生します。

カスタムブロックタイプ メモ
解释MATLAB函数 ブロック線図の更新コストは低コストです。
MATLAB函数C调用者C函数 コードの生成を通してシミュレーションを行います。したがって,ブロックがはじめて更新されるときはかなり時間がかかる場合があります。コードの生成はインクリメンタルなので,ブロックとそれに接続する信号が変更されていないときは,金宝app仿真软件はブロックを繰り返し更新しません。
MATLAB系统 ブロック線図の更新でコードを生成しないため,MATLAB函数より高速。コードの生成はインクリメンタルなので,ブロックとそれに接続する信号が変更されていないときは,金宝app仿真软件はブロックを繰り返し更新しません。
C MEX s -函数,MATLAB二级s -函数 ブロック線図の更新で実行されるメソッドをオーバーライドするときにのみ,他の仿金宝app真软件ブロックより大きなオーバーヘッドが発生します。メソッドが複雑になると,ブロック線図を更新する時間が目に見えて長くなります。ブロック線図を更新するときに実行されるメソッドのリストは,金宝app与C - s -函数的Simulink引擎交互のプロセスの図解を参照してください。ブロック線図を更新するとき、モデルの初期化の段階で Simulink は mdlStart までのすべての関連メソッドを呼び出しますが、mdlStartはその中に含まれません。
金宝appSimulink功能,子系统 速度は,サブシステム内で実行されるアルゴリズムの複雑度に比例します。サブシステムがライブラリの中にある場合,オーバーヘッドはブロック線図がはじめて更新されるときやシミュレーションの準備をするときに,まだ読み込まれていないライブラリを仿金宝app真软件が読み込むときに発生します。参照されているすべてのライブラリブロックが変更されていない場合,仿金宝app真软件はその後ライブラリを再読み込みしません。モデルがライブラリを使用しない場合よりも,モデルのコンパイルは速くなります。

コールバックメソッド

金宝app仿真软件ブロックは(仿真软件功能ブロックを除く)ブロックの動作を完全に指定するブロックコールバックメソッドを介して仿真软件エンジンと通信します。各カスタムブロックタイプに異なるセットのコールバックメソッドを実装できます。ブロックが仿金宝app真软件エンジンとやり取りする方法については,金宝app与C - s -函数的Simulink引擎交互を参照してください。この表ではs函数回调方法の名前を同等と見なして使用します。

カスタムブロックタイプ メモ
解释MATLAB函数MATLAB函数C调用者 いずれも,入力された値から出力値を計算するためにmdlOutputsメソッドを作成する。これらのブロックの1つを使って他のコールバックメソッドを実装することはできないため,状態動作をモデル化できない。
C函数 首先,输出,および终止コールバックメソッドの実装を許可します。永続データを使用した離散状態のモデル化を許可します。
2级MATLAB函数 コールバックメソッドのより大きなサブセットを実装でき,それには連続状態および離散状態のモデル化に使用できるメソッドが含まれる。サポートされるメソッドのリストについては,编写二级MATLAB s函数MATLAB二级s函数回调方法を参照。
MATLAB系统 系统对象メソッドを次のコールバックメソッドに対して使用する。mdlOutputsstepImploutputImpl)、mdlUpdateupdateImpl)、mdlInitializeConditionsresetImpl)、mdlStartsetupImpl)、mdlTerminatereleaseImpl)。詳細については,金宝app仿真软件エンジンと系统对象メソッドとの相互作用を参照。
C墨西哥人s函数 コールバックメソッドの完全なセットを実装できる。
s函数生成器 mdlOutputsmdlDerivatives,およびmdlUpdateを実装できる。
金宝app仿真软件的功能 スタンドアロンの関数としてパッケージ化される。この関数の呼び出し元はすべて,呼び出し元の場所に基づくコールバックメソッドのいずれかの一部になる。
子系统 エンジンと直接通信する。連続および離散模金宝app型ブロックライブラリにある適切なブロックを使用することで状態動作をモデル化できる。

MATLABs函数とコード生成用MATLAB関数の比較

MATLAB的s函数とコード生成用のMATLAB関数には根本的な違いがあります。

  • 金宝app仿真软件编码器製品はMATLAB函数とコード生成用MATLAB関数の両方のコードを生成できます。ただし,MATLAB函数にはコード生成にターゲット言語のコンパイラ(TLC)ファイルが必要ですが,コード生成用MATLAB関数には必要ありません。

  • MATLAB的s函数は任意のMATLAB関数を使用できますが,コード生成用MATLAB関数はMATLAB言語のサブセットです。サポートされているコード生成用の関数のリストについては,C / c++コードの生成でサポートされている関数およびオブジェクトを参照してください。

  • MATLAB的s函数は離散状態と連続状態のダイナミクスをモデル化できますが,コード生成用MATLAB関数は状態ダイナミクスをモデル化できません。

カスタムブロックの機能拡張

コールバックとMATLABグラフィックスを使ってカスタムブロックの機能を拡張できます。

ブロックのコールバックは,シミュレーションの特定の時点でユーザー定義の動作を実行します。たとえば,コールバックはシミュレーションの前にデータをMATLABワークスペースに読み込んだり,シミュレーションの終わりにシミュレーションデータのグラフを生成したりできます。ブロックコールバックはどのカスタムブロックタイプでも使用できます。使用できるコールバックの一覧と使用方法の詳細は,ブロックのコールバックの指定を参照してください。

软件设计师(MATLABのグラフィカルユーザーインターフェイス開発環境)はカスタムユーザーインターフェイスを手軽に作成するツールを提供します。程序设计师の使用方法の詳細については,アプリの作成を参照してください。

参考

|||||||||

関連するトピック