データ転送の表現と処理
データ転送とは
データ転送は、呼び出し可能な関数を表すブロック間で発生し、信号線を経由してデータを交換します。モデルにおけるデータ転送の表現は、モデルがレートベース モデルまたはエクスポート関数モデルのどちらであるかによって異なります。モデルがレートベースの場合は、接続されているブロックが同じサンプル レートを使用しているかどうかによって表現は異なります。シングルレートのデータ転送と、エクスポート関数間のデータ転送は、関数を接続する信号線として表現されます。
この図は、Function-Call Subsystem 間のシングルレートのデータ転送を示しています。どちらの Function-Call Subsystem も、1.0 秒のサンプル レートを使用するよう設定されています。
マルチレートのデータ転送は、異なるサンプル レートを使用するよう設定された関数ブロック間のデータ転送です。モデルでデータ転送を表現するには、Simulink® を設定して Rate Transition ブロックを自動的に挿入するか、関数ブロックを接続する信号線にそのブロックを手動で挿入します。
この図は、Function-Call Subsystem 間のマルチレートのデータ転送を示しています。一方の Function-Call Subsystem は 1.0 秒のサンプル レートを使用するよう設定され、もう一方の Function-Call Subsystem は 2.0 秒のサンプル レートを使用するよう設定されています。
データ転送に関する考慮事項
マルチレート モデルを設計する場合、各データ転送について次の重要性を考慮します。
データの整合性
確定性
レイテンシ
メモリ使用量
データの整合性
データ転送のデータ整合性は、転送および処理中のデータの正確性、一貫性、および完全性に関連します。ブロックへの入力がそのブロックの実行時に変更されたときや、プリエンプションが発生したときに、データの整合性が損なわれる可能性があります。
次のサンプル シナリオについて考えます。
高速ブロックから低速ブロックに値が入力されます。
低速ブロックは高速ブロックからの入力値 V1 を読み取り、この値を使用して計算を開始します。
高速ブロックの別の実行が低速ブロックの計算をプリエンプトし、新しい出力値 V2 が計算されます。
低速ブロックが実行を再開したときに、データの整合性の問題が発生します。低速ブロックは、新しい入力値 V2 を使用して計算を続行します。
この種類のデータ転送は保護されていません。保護されていないデータ転送の説明については、Fast-to-Slow Periodic Rate Transitions During Generated Code Executionを参照してください。
保護されているデータ転送の場合、高速ブロックの出力 V1 は、低速ブロックの実行が終了するまで保持されます。
確定性
次の項目が与えられ、転送のタイミングが完全に予測可能な場合、データ転送は確定的です。
データの可用性
接続されたブロックのサンプル レート
データ転送の入力信号ソース ブロックが実行を終了する時刻に対する、データ転送の出力信号接続先ブロックが実行を開始する時刻
レイテンシ
データ転送のレイテンシは、転送されるデータが受信ブロックに到達するまでに生じる時間遅延です。アプリケーション要件によっては、データの整合性や確定性よりもデータ転送のレイテンシの最小化を優先しなければならない場合があります。
メモリ使用量
アプリケーション要件によっては、データの整合性や確定性よりもデータ転送のメモリ使用量の最小化を優先しなければならない場合があります。
コード生成のデータ転送の仮定
関数間のデータ転送用のコードを生成する場合、コード ジェネレーターは以下の内容を仮定します。
1 つの読み取り関数と 1 つの書き込み関数の間でデータ転送が発生する。
1 バイトのサイズである変数の読み取りと書き込みはアトミックである。
関数に関連付けられた 2 つのタスクがデータ転送を介して相互作用する場合、一方のタスクのみが他方をプリエンプトできる。関数をマルチコア ターゲット システムに展開する場合は、関連付けられたタスクは同時実行できる。
周期関数の場合、高速なレートの関数に関連付けられたタスクは、低速なレートの関数に関連付けられたタスクよりも優先順位が高くなり、低速なレートのタスクをプリエンプトする。
タスクは 1 つのプロセッサ上で実行される。タイム スライスは許可されない。
プロセスはクラッシュまたは再起動しない (特にデータがタスク間を転送されているとき)。
モデル、コード、およびターゲット環境がこれらの仮定に合致していることを確認します。
データ転送の制限
サービス コード インターフェイスを使用するよう設定されたエクスポート関数モデルでは、Rate Transition ブロックはサポートされません。
コード ジェネレーターは、可変サイズの信号に接続しているか、For Each Subsystem ブロック内にある Rate Transition ブロックのコードとデータを分離しません。