Simulink におけるデータ型について
「データ型」という用語は、コンピューターがどのような方法でメモリ上の数値やテキストを表現するかを指します。データ型は、数字または文字に割り当てられるストレージの量を決定し、2 進数の型として数値をエンコードするために使用される理論体系を決定し、型を操作するために有効な演算を決定します。ほとんどのコンピューターは、数を表現するためのデータ型を選択することができ、精度とダイナミック レンジ、パフォーマンス、メモリ使用量の面で明確な利点をもっています。MATLAB® 技術計算環境で使用されている変数のデータ型を指定すると、パフォーマンスを最適化できます。Simulink® は、Simulink 信号とブロック パラメーターのデータ型の指定を可能にすることによって、この機能を実現しています。
モデルの信号とブロック パラメーターのデータ型を指定することは、特にリアルタイム制御アプリケーションに有効です。たとえば、Simulink モデルでは、Simulink Coder™ 製品のような自動コード生成ツールを使用してモデルから生成されたコードにおいて、信号やブロック パラメーターを表現するために最適なデータ型を指定できます。モデルの信号とパラメーターに対して最も適切なデータ型を選択することによって、パフォーマンスを大幅に向上させ、モデルから生成されるコードのサイズを小さくすることができます。
Simulink は、シミュレーションの実行前や実行中に、モデルが確実に「型安全」であること、つまり、モデルから生成されたコードがオーバーフローやアンダーフローせず確実に正確な結果を出力するための検査を広範囲にわたって実行します。既定のデータ型 (double
) を使用している Simulink モデルは、本質的に型安全です。したがって、モデルからコード生成をしたり、既定以外のデータ型を使用する予定がない場合、この節の残りは読み飛ばしてかまいません。
一方、モデルからコードを生成したり、既定以外のデータ型を使用するつもりであれば、この節の残り、特にデータ型の法則に関する節(データ型のガイドラインを参照)を注意深く読んでください。これにより、データ型エラーによってモデルの完成までの実行やシミュレーションができなくなることを避けることができます。
データ型のガイドライン
次のルールを確認することは、型安全なモデルを作成するのに役立ち、その結果、エラーなしで実行できます。
一般的に信号のデータ型はパラメーターのデータ型に影響せず、逆も同様です。
このルールにおける重要な例外は、出力のデータ型がパラメーターのデータ型によって決定される Constant ブロックです。
ブロックの出力が入力とパラメーターの関数の場合に、その入力とパラメーターが異なるデータ型を使用している場合、Simulink は、出力を計算する前にパラメーターの型を入力の型に変換します。
一般的に、ブロックは入力のデータ型で出力します。
重要な例外は、Constant ブロックと、出力のデータ型がブロック パラメーターによって決定される Data Type Conversion ブロックです。
バーチャル ブロックは、その入力に関してあらゆる型の信号を受け入れます。
バーチャル ブロックの例は、Mux ブロックと Demux ブロック、条件なしで実行されるサブシステムです。
非バーチャル ブロックの端子に接続される信号ベクトルの要素は、同じデータ型でなければなりません。
非バーチャル ブロックの入力データ端子に接続される信号は、同じ型でなければなりません。
制御端子 (たとえば、Enable および Trigger 端子) は、任意のデータ型を受け入れます。
Solver ブロックは、
double
型の信号のみを受け入れます。ブロックに
double
型でない信号を接続すると、そのブロックに対するゼロクロッシングの検出は無効になります。
データ型の伝播
シミュレーションを実行したり、端子のデータ型の表示を有効にしたり、端子のデータ型の表示を更新したりすると、Simulink によって、データ型の伝播と呼ばれる手順が実行されます。この手順では、データ型が特に指定されていない信号のデータ型を決定し、信号と入力端子のデータ型が矛盾しないことを確認するための検査をします。型の矛盾が検出された場合、データ型の矛盾がある信号と端子を特定するエラー ダイアログが表示されます。また、その型の矛盾を発生する信号のパスも強調表示されます。
メモ
矛盾を解決するために、モデルに型変換 (データ型の変換) ブロックを挿入することができます。詳細については、Data Type Conversion を参照してください。
参考
Simulink.AliasType
| Simulink.NumericType