このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
信号のデータ型の制御
Simulink® モデル内の信号のデータ型を制御するには、対応するブロック出力に対してデータ型を指定します。
特定のデータ型をもつ新しい信号を次のいずれかの方法でモデル内に導入することもできます。
ルートレベルの Inport ブロックまたは From Workspace ブロックを使用して、目的のタイプの信号データを MATLAB® ワークスペースからモデルに読み込みます。
モデル内に Constant ブロックを作成し、パラメーターを希望するタイプに設定します。
Data Type Conversion ブロックを使って信号を希望するデータ型に変換します。
Simulink ブロックは、既定の設定でその出力のデータ型を決定します。多くのブロックでは、ユーザーによる既定のデータ型オーバーライドと明示的な出力データ型の指定ができます。このオーバーライドと指定には、通常「出力データ型」という名前が付けられたブロック パラメーターが使用されます。たとえば、[出力データ型] パラメーターは、[Constant ブロック] ダイアログ ボックスの [信号属性] ペインに表示されます。
詳細は、以下のトピックを参照してください。
内容 | 参照先 |
---|---|
ユーザーが指定できる有効なデータ型の値 | |
有効なデータ型の値の指定を支援するアシスタント | |
有効なデータ型の値を複数のブロックに同時指定 |
有効なデータ型の値の入力
一般的に、出力データ型の指定は以下のいずれかで指定できます。
データ型を継承するルール (データ型の継承ルールを参照)
組み込みデータ型の名前 (組み込みデータ型を参照)
データ型を評価結果とする式 (データ型式を参照)
有効なデータ型の値は、ブロックによって異なります。ブロックのデータ型パラメーターに関連付けられているドロップダウン メニューを使用すると、特定のブロックがサポートしているデータ型を表示できます。たとえば、Data Store Memory ブロックのダイアログ ボックスにある [データ型] ドロップダウン メニューには、以下のようにこのブロックがサポートしているデータ型がリストされています。
特定のブロックがサポートしているデータ型についての詳細は、Simulink ドキュメンテーションの該当ブロックのドキュメンテーションを参照してください。
データ型の継承ルール
ブロックは、そのブロックが接続されている信号や特定のブロック パラメーターなど、さまざまなソースからデータ型を継承できます。データ型パラメーターの値は、出力信号がそのデータ型をどのように継承するかを規定するルールとして指定できます。ブロックがサポートしている継承ルールを表示するには、そのブロックのダイアログ ボックスにあるデータ型ドロップダウン メニューを使用します。以下の表には、選択可能な典型的なルールがリストされています。
継承ルール | 説明 |
---|---|
[継承: 逆伝播による継承] | Simulink は、データ型伝播中に自動的にブロックの出力データ型を決定します (データ型の伝播を参照)。この場合、そのブロックは、下流のブロックまたは信号オブジェクトのデータ型を使用します。 |
[継承: 入力と同じ] | ブロックは、ブロックの出力信号に対して単一入力信号のデータ型を使用します。 |
[継承: 1 番目の入力と同じ] | ブロックは、ブロックの出力信号に対してその最初の入力信号のデータ型を使用します。 |
[継承: 2 番目の入力と同じ] | ブロックは、ブロックの出力信号に対してその 2 番目の入力信号のデータ型を使用します。 |
[継承: 内部ルールによる継承] | ブロックは、内部ルールを使用してその出力データ型を決定します。内部ルールに基づいて、組み込みターゲットのハードウェア特性を考慮して、数値精度、パフォーマンスおよび生成されるコード サイズを最適化するデータ型が選択されます。ソフトウェアで常に処理効率と数値精度の両方を同時に最適化できるわけではありません。 |
継承されたデータ型を信号に適用すると、ブロック線図の更新後にのみ、Simulink によって信号の特定のデータ型が判別されます。
ブロック線図にこの特定のデータ型を表示するには、端子のデータ型を参照してください。
複数の信号の具体的なデータ型を検索や並べ替えが可能なテーブルで調べるには、モデル データ エディターを使用します ([モデル化] タブで [モデル データ エディター] をクリック)。[Data Type] 列の右側に各信号の具体的なデータ型が表示されます。詳細については、モデル データ エディターを参照してください。
組み込みデータ型
データ型パラメーターの値は、single
または boolean
など、組み込みデータ型の名前として指定できます。ブロックがサポートしている組み込みデータ型を表示するには、そのブロックのダイアログ ボックスにあるデータ型ドロップダウン メニューを使用します。サポートされているすべての組み込みデータ型の一覧は、Simulink でサポートされているデータ型を参照してください。
データ型式
データ型パラメーターの値は、評価結果が数値データ型オブジェクトになる式として指定できます。ブロック ダイアログ ボックスにあるデータ型のフィールドに式を入力します。通常、以下の式のいずれかを入力します。
fixdt
コマンドデータ型パラメーターの値を関数
fixdt
を呼び出すコマンドとして指定します。この関数を使用すると、固定小数点または浮動小数点データ型を記述するSimulink.NumericType
オブジェクトを作成できます。データ型オブジェクト名
データ型パラメーターの値をデータ型を表現するオブジェクトの名前として指定します。
Simulink.NumericType
、Simulink.AliasType
、Simulink.ValueType
、およびSimulink.BusElement
の各オブジェクトを使用すると、出力データ型をモデル全体で変更するタスクが簡素化されます。Simulink.AliasType
オブジェクトを使用すると、データ型のカスタム エイリアスを使用できます。Simulink.ValueType
オブジェクトとSimulink.BusElement
オブジェクトを使用すると、データ型とその他のパラメーター (単位、最小値、最大値など) を指定できます。
一括編集のためのモデル データ エディターの使用
モデル データ エディターを使用すると、複数の信号に同じデータ型を同時に割り当てることができます。この手法を使用して同時に複数の Inport ブロックと Outport ブロックのデータ型や他の属性を設定することで、モデルのインターフェイスを設計できます (データ インターフェイスの構成を参照)。また、ブロック アルゴリズム内の任意の信号のデータ型を詳細に制御することもできます。
たとえば、航空機の縦運動の飛行制御例の slexAircraftExample
モデルには多数の Gain ブロックが含まれています。モデルのルート レベルにある 3 つの Gain ブロックの出力データ型を single
に指定するとします。以下のようにします。
モデル データ エディター ([モデル化] タブで [モデル データ エディター] をクリック) で [信号] タブを調べます。
[コンテンツのフィルター] ボックスの横にある [選択を使用してフィルター処理します] ボタンを切り換えます。
モデルの最上位レベルで 3 つの Gain ブロックの出力を表す信号線を選択します (
Zw
、Mw
およびMq
のラベルが付けられています)。モデル データ エディターに 3 つの信号に対応する 3 つの行が表示されます。モデル データ エディターで 3 つの信号 (行) をすべて選択します。たとえば、Ctrl + A を押すか、Shift キーを押したまま [ソース] 列の一番上と一番下の行をクリックできます。
3 つの信号のいずれかについて [データ型] 列のセルをクリックします。ドロップダウン リストから
[single]
を選択します。モデル データ エディターによってこの選択が選択したすべての行に適用されます。
モデルを厳密な単精度の設計に変換するには、浮動小数点組み込みモデルの検証を参照してください。
個別のアルゴリズム、データ パス、モデルおよびバス要素間でのデータ型の共有
場合によっては、データ型の継承 (データ型の継承ルールを参照) に基づいて異なるデータ項目 (パラレル データ パスの信号線や Simulink.Bus
オブジェクトのバス要素など) のデータ型間で等価性を確立できないことがあります。代わりに、Simulink.NumericType
オブジェクトまたは Simulink.AliasType
オブジェクトをワークスペースまたはデータ ディクショナリに作成できます。
エイリアスを作成して共有データ型の名前を変更しないようにする場合は、Simulink.NumericType
オブジェクトを作成します。IsAlias
プロパティを false
(既定) に設定します。
この例では、Simulink.NumericType
オブジェクトを使用して同じモデル内の 2 つの Lookup Table ブロック間で出力データ型を共有する方法を示します。
フォールトトレラント燃料制御システムのモデル化のモデル例
sldemo_fuelsys
を開きます。openExample('simulink_automotive/ModelingAFaultTolerantFuelControlSystemExample') sldemo_fuelsys
モデルによって
Simulink.NumericType
オブジェクトがベース ワークスペースに作成されます。オブジェクトの 1 つにs16En15
という名前が付けられます。コマンド プロンプトで、
s16En15
のプロパティを検査します。s16En15
s16En15 = NumericType with properties: DataTypeMode: 'Single' IsAlias: 0 DataScope: 'Auto' HeaderFile: '' Description: ''
このオブジェクトは組み込みの Simulink データ型
single
を表します。モデルで
fuel_rate_control/airflow_calc
サブシステム内に移動します。[モデル化] タブで [モデル データ エディター] をクリックします。モデル データ エディターの [信号] タブを確認します。
モデルで、Pumping Constant ブロックの出力信号をクリックします。モデル データ エディターの [Data Type] 列に、信号のデータ型が
s16En15
に設定されていることが示されます。Ramp Rate Ki ブロックの出力信号をクリックします。このブロックの出力データ型も
s16En15
に設定されています。ブロック線図を更新し、必要な場合は [Data Type] 列の幅を広げます。列の右側に、2 つのルックアップ テーブル ブロックが
single
データ型を使用していることが表示されます。コマンド プロンプトで、データ型
double
を表すようにs16En15
を設定します。s16En15.DataTypeMode = 'Double';
ブロック線図を更新します。
2 つの Lookup Table ブロックの出力信号でデータ型
double
が使用されるようになりました。データ型の継承により、e0
やe1
などのその他の信号は同じデータ型を取得します。
あるいは、同じモデル内のアルゴリズム間またはデータ パス間でデータ型の等価性を確立するには、Data Type Propagation や Data Type Conversion Inherited などのブロックを使用できます。これらのブロックを使用する場合は、データ型オブジェクトを作成して永続的に保存する必要はありません。ただし、モデルが同じモデル参照階層に存在しない限り、これらのブロックを使用して異なるモデル内の信号間でデータ型を共有することはできません。
信号データのカスタム C データ型の再利用
モデルで、既存の C コードで定義されている構造体などのカスタム C データ型に適合する信号を作成できます。この信号を使用して以下を実行します。
既存の C コードを Simulink モデルで置き換える。
Simulink でのシミュレーション用の C コードを統合する (たとえば、レガシ コード ツールを使用)。
既存のコードと統合できるコードの生成を準備する (Simulink Coder™)。
以下の手法を使用してカスタム データ型を一致させます。
構造体型の場合は、
Simulink.Bus
オブジェクトを作成します。このオブジェクトをバス信号のデータ型として使用します。バスのデータ型を参照してください。列挙型の場合は、列挙型クラスを作成して信号のデータ型として使用します。Simulink モデルでの列挙型データの使用を参照してください。
プリミティブ数値データ型のエイリアスを表す
typedef
ステートメントを一致させるには、Simulink.AliasType
オブジェクトを信号のデータ型として使用します。Simulink.AliasType
を参照してください。
これらのクラスとオブジェクトを作成するには、関数 Simulink.importExternalCTypes
を使用します。
モデル内の MATLAB Function ブロックまたは Stateflow® チャートに、インポートされた列挙型または構造体型が使用されている場合、モデル コンフィギュレーション パラメーターが外部ヘッダー ファイルから型定義をインクルードする (#include
) ように構成します。インポートされたバスと列挙型定義の制御(MATLAB Function ブロックの場合)、およびStateflow チャート内のカスタム コードの変数および関数へのアクセス (Stateflow)、およびStateflow チャートのカスタム構造体の統合 (Stateflow)(チャートの場合) を参照してください。
継承された設定を使用する信号のデータ型の判別
信号が、[継承: 内部ルールによる継承]
(ほとんどのブロックの既定の設定) などの継承されたデータ型設定を使用する場合、信号がシミュレーションに使用する意味のあるデータ型を判別するために、ブロック線図を更新して、次の手法のいずれかまたは両方を使用します。
Simulink エディターの [デバッグ] タブで、[情報のオーバーレイ] を選択して、端子セクションに移動します。表示する端子のデータ型を選択します。ブロック線図の各信号の横にデータ型が表示されます。詳細については、端子のデータ型を参照してください。
モデル データ エディター ([モデル化] タブで [モデル データ エディター] をクリック) の [データ型] 列の右側を確認します。詳細については、モデル データ エディターを参照してください。
これらの手法を使用してデータ型を調べると次の役に立ちます。
モデルのデータ型手法を大まかに設計する。
量子化やオーバーフローが原因の数値的問題をデバッグする。
モデルを共有時にわかりやすいものにする。
詳細については、端子のデータ型を参照してください。
設定を変更してもデータ型が double
のままになる
[出力データ型] などのブロック パラメーターの設定後に、モデル内のデータ項目 (信号、パラメーターおよび状態) の多くで引き続きデータ型 double
が使用されている場合は、モデルがデータ型をオーバーライドするように設定されていないことを確認してください。データ型オーバーライドの制御を参照してください。
参考
Simulink.AliasType
| Simulink.NumericType
| Simulink.Bus