このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
金宝app®関数は,一連の入力が与えられた場合に一連の出力を計算する計算単位です。関数ヘッダーではMATLAB®やc++などのプログラミング言語に似た表記を使用します。金宝app仿真软件関数はいくつかの方法で定義して実装できます。
金宝app仿真软件功能ブロック- - - - - -金宝app仿真软件的功能ブロック内で仿金宝app真软件ブロックを使用して定義される関数。
エクスポートされたStateflow®グラフィカル関数——Stateflowチャート内でステート遷移で定義され,仿金宝app真软件モデルにエクスポートされる関数。
エクスポートされたStateflow MATLAB関数——Stateflowチャート内でMATLAB言語ステートメントを使用して定義され,仿真软金宝app件モデルにエクスポートされる関数。
功能- - - - - -功能ブロックを使用して定義される関数。功能の例については、sfcndemo_金宝appsimulinkfunction_getset
を開いてください。
金宝app仿真软件関数の呼び出し元は仿真软件関数の実行をモデルまたはチャート階層の任意の場所から呼び出します。
函数调用者ブロック——金宝app模型で定義された関数またはStateflowからエクスポートされた関数を呼び出します。函数调用者ブロックのリファレンスを参照してください。
Stateflowチャート遷移——Stateflowチャート内で仿真金宝app软件で定義された関数またはStateflowからエクスポートされた関数を呼び出します。
MATLAB函数ブロック——MATLAB言語スクリプトから関数を呼び出します。
s函数ブロック——システムメソッドを使用して関数を呼び出します。ssDeclareFunctionCaller
およびssCall金宝appSimulinkFunction
を参照してください。
MATLAB系统ブロック——系统对象およびMATLAB言語を使用して関数を呼び出します。
参数尺寸。ブロックや参数输出港ブロックだけでなく,金宝app仿真软件的功能ブロックもブロックのローカル環境において,轮廓尺寸ブロックまたは外港ブロックを介して信号に対するインターフェイスとして機能できます。これらの信号は呼び出し元から隠されています。端子ブロックを使用して2つの金宝app仿真软件的功能ブロックを接続し,その間の通信を行ったり,外部I / Oを表すルートの轮廓尺寸ブロックと外港ブロックに接続したりできます。
また,外港ブロックをログブロック(到文件、到工作空间)や表示ブロック(范围、显示)を含む水槽ブロックに接続することもできます。ただし,これらのブロックは他のすべてのブロックの後に実行されます。
金宝app仿真软件的功能ブロックは外港ブロックへの関数呼び出しイベントを出力できます。
モデルの階層構造にわたって再利用可能なロジックが必要なときに関数を使用します。再利用可能なロジックを使用した仿金宝app真软件関数がStateflowチャート内で定義されている例について考えます。
再利用可能なロジックはStateflowチャートから仿真软金宝app件功能ブロックに移すことができます。このロジックはその後,金宝app仿真软件サブシステム子系统(および模型ブロック)とStateflowチャートの任意のモデルの階層構造レベルで,関数呼び出しにより再利用可能になります。
その結果,再利用するためのモデル構造の自由度が高まります。
メモ
Stateflowチャートから関数を呼び出すときの入力引数と出力引数の名前(x2
、y2
)は、模金宝app型函数ブロックの関数プロトタイプの引数の名前(u
、y
)と一致している必要はありません。
金宝app仿真软件的功能ブロックの関数プロトタイプは,同じ入力引数と出力引数をもつことができます。たとえば,ノイズを除去する関数は,信号を入力し,除去した後に信号を返すことができます。
mySignal =过滤器(mySignal)
函数调用者ブロックで関数を呼び出し,ノイズをテスト信号に追加して,関数のアルゴリズムを検証できます。
このモデルにコードを生成すると,金宝app仿真软件的功能ブロックの入力引数は信号値のコピーではなく,信号にポインターを渡します。
void filter(real_T * rtuy_myssignal){…
* rtuy_mySignal = model_P。DiscreteFilter_NumCoef * DiscreteFilter_tmp;}
プリンターなどの共有リソースをモデル化する場合,関数を使用します。モデルslexPrinterExample
は,複数のコンピューターとプリンタープロセスをモデル化する単一のStateflowチャート間の共通インターフェイスとして仿真软件金宝app功能ブロックを使用します。
関数インターフェイスはMATLAB構文を使用して関数名とその入力引数と出力引数を定義します。モデル階層には特定された関数名をもつ1つの関数定義のみを含めることができます。金宝app仿真软件は次を検証します。
函数调用者ブロックの[関数プロトタイプ]パラメーター内の引数が関数に定義された引数と一致する。たとえば2つの入力引数と1つの出力引数をもつ関数は以下のように表示されます。
y = MyFunction(u1, u2)
引数のデータ型,次元および実数/複素数は一致しなければなりません。函数调用者ブロックでは,(入力引数の仕様]パラメーターと(出力引数の仕様]パラメーターを設定できますが,通常これらのパラメーターを手動で指定する必要はありません。金宝app仿真软件は関数から指定を導出します。
引数パラメーターを指定しなければならないのは,函数调用者ブロックがモデル内またはモデルが参照する任意の子モデル内で関数を見つけられない場合のみです。この状況は,函数调用者ブロックと呼び出される関数が,共通の親モデルから参照される別のモデルに含まれているときに起こる可能性があります。参照モデルにおける仿金宝app真软件功能ブロックおよび金宝app仿真软件功能ブロックの引数の指定を参照してください。
トリガーに直接信号が接続されている函数调用子系统ブロックは仿真软件功能ブロックよりも信号のトレー金宝appサビリティに優れていますが,仿真软件功能ブロックにはその他の利点があります。
信号線の経路を排除します。函数调用者ブロックでは,信号線を接続せずに仿真软件功能ブロックで定金宝app義された関数を実行できます。さらに,関数およびその呼び出しは異なるモデルまたはサブシステムに置くことができます。この方法により,階層モデル構造にまたがる信号の経路指定の問題が排除され,モデルコンポーネントをより多く再利用できます。
同じ関数に複数の呼び出し元を使用します。複数の函数调用者ブロックまたはStateflowチャートで同じ関数を呼び出すことができます。関数に状態(单位延迟ブロックなど)が含まれる場合,その状態は異なる呼び出し元の間で共有されます。
関数インターフェイスを関数定義から分離します。関数は実装と関数インターフェイス(入力引数と出力引数)を区別します。したがって,金宝app仿真软件功能ブロックを使用した関数,Stateflowからエクスポートしたグラフィカル関数,StateflowからエクスポートしたMATLAB関数を定義できます。呼び出し元は関数の実装方法または実装場所を知る必要はありません。
金宝app仿真软件的功能ブロックまたは子系统ブロックの使用に関する考慮は,関数呼び出しの間で共有される状態に基づいて行わなければなりません。金宝app仿真软件的功能ブロックは共有される状態をもちますが,子系统ブロックは再利用可能な関数として指定されている場合であっても共有される状態をもちません。
金宝app仿真软件的功能ブロックでは1つのブロックに複数の呼び出し元がある場合,コードは常に1つの関数に対して生成されます。金宝app仿真软件功能ブロックが状態をもつブロック (Delay や Memory など) を含んでいる場合、状態は永続的で関数の呼び出し元の間で共有されます。この場合、呼び出しの順序は重要な考慮事項になります。
子系统ブロックでは1つのブロックに複数のインスタンスがあり,再利用可能な関数として設定されている場合,コードは通常,最適化として1つの関数に対して生成されます。子系统ブロックに状態をもつブロックが含まれている場合でも,コードは1つの関数に対して生成されますが,異なる状態変数がその関数に渡されます。インスタンス間で状態は共有されません。
金宝app仿真软件功能ブロックでは関数をグラフィカルに実装できますが,仿真软件功能ブロックを使用することが最適なソリューションではない場合があります。
たとえば,PIDコントローラーまたはデジタルフィルターをモデル化するときに,動的システムを定義する方程式をモデル化する必要がある場合です。次の状況が発生する可能性があるため,連立方程式を実装するにはs函数,子系统または模型ブロックを使用し,仿真软件功能ブロックは使用しません。金宝app
関数呼び出し間の状態の持続性。金宝app仿真软件功能ブロックが状態をもつ任意のブロック(单位延迟や内存など)を含む場合,それらの状態の値は関数呼び出しの間で維持されます。その関数に対して複数の呼び出しがある場合,状態値は異なる呼び出し元から発信される呼び出しの間でも維持されます。
連続サンプル時間の継承。金宝app仿真软件功能ブロックは連続サンプル時間を継承できません。したがって,連続サンプル時間を使用して連続する連立方程式をモデル化するシステムではこのブロックを使用しないでください。
金宝app仿真软件関数とその呼び出し元との間の接続を,呼び出し元を関数に接続するラインを使用して視覚的に表示します。
トレースラインのオン/オフ-[デバッグ]タブで,(情報のオーバーレイ]を選択します。ドロップダウンボックスから,[関数コネクタ]
を選択します。
トレースラインの方向,ブロックの下部で接続されるラインは関数の呼び出し元からのものです。ブロックの上部で接続されるラインは Simulink 関数または関数を含むサブシステムに向かうものです。
関数への移動——関数の呼び出し元はサブシステム内に配置できます。
サブシステム内の呼び出し元から関数に移動するには,最初にサブシステムを開いて,その関数へのリンクをクリックします。
関数がモデルのルートレベルにある場合,関数が開きます。関数がサブシステム内にある場合、その関数を含むサブシステムが開きます。
[関数コネクタ]を選択すると,モデルslexPrinterExample
に呼び出し元と関数の関係が示されます。
この例では,金宝app仿真软件的功能ブロックaddPrintJob
の函数调用者はエクスポートされたStateflow関数queuePrintJob
を呼び出します。サブチャート忙
は仿金宝app真软件功能ブロックprinterInk
を呼び出します。トレースラインはStateflowチャートとの間で描画されます。
アニメーションを使用して関数呼び出しを強調表示します。
以下の例では,アニメーション化された仿金宝app真软件関数呼び出しが静止した状態を示します。
アニメーションにアクセスするには,ツールストリップの[デバッグ]タブにある[イベントアニメーション]セクションで,アニメーション速度を[低速]
、[中速]
,または[高速]
に設定します。
[イベントアニメーション]は、消息和事件ライブラリのブロック,Stateflowチャート,函数调用子系统ブロック,金宝app仿真软件関数,SimEvents®ブロックなど,モデル内にイベントブロックがある場合に表示されます。