ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

信号のデータ型の制御

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 データ オブジェクトを使用すると、出力データ型をモデル全体で変更するタスクを簡素化したり、データ型のカスタム エイリアスを使用できるようになります。Simulink データ オブジェクトの詳細は、データ オブジェクトを参照してください。

一括編集のためのモデル データ エディターの使用

モデル データ エディターを使用すると (モデル データ エディターを使用したデータ プロパティの設定を参照)、複数の信号に同じデータ型を同時に指定できます。この手法を使用して同時に複数の Inport ブロックと Outport ブロックのデータ型や他の属性を設定することで、モデルのインターフェイスを設計できます (コンポーネントのデータ インターフェイスの構成を参照)。また、ブロック アルゴリズム内の任意の信号のデータ型を詳細に制御することもできます。

たとえば、Simulink 製品に付属している slexAircraftExample モデルには多数の Gain ブロックが含まれています。モデルのルート レベルにある 3 つの Gain ブロックの出力データ型を single に指定するとします。以下のようにします。

  1. モデル データ エディター ([ツール表示][モデル データ エディター]) で [信号] タブを調べます。

  2. [コンテンツのフィルター] ボックスの横にある [選択を使用してフィルター処理します] ボタンを切り換えます。

  3. モデルの最上位レベルで 3 つの Gain ブロックの出力を表す信号線を選択します (ZwMw および Mq のラベルが付けられています)。モデル データ エディターに 3 つの信号に対応する 3 つの行が表示されます。

  4. モデル データ エディターで 3 つの信号 (行) をすべて選択します。たとえば、Ctrl + A を押すか、Shift キーを押したまま [ソース] 列の一番上と一番下の行をクリックできます。

  5. 3 つの信号のいずれかについて [データ型] 列のセルをクリックします。ドロップダウン リストから [single] を選択します。モデル データ エディターによってこの選択が選択したすべての行に適用されます。

モデルを厳密な単精度の設計に変換するには、浮動小数点組み込みモデルの検証を参照してください。

個別のアルゴリズム、データ パス、モデルおよびバス要素間でのデータ型の共有

場合によっては、データ型の継承 (データ型の継承ルールを参照) に基づいて異なるデータ項目 (パラレル データ パスの信号線や Simulink.Bus オブジェクトのバス要素など) のデータ型間で等価性を確立できないことがあります。代わりに、Simulink.NumericType オブジェクトまたは Simulink.AliasType オブジェクトをワークスペースまたはデータ ディクショナリに作成できます。

エイリアスを作成して共有データ型の名前を変更しないようにする場合は、Simulink.NumericType オブジェクトを作成します。IsAlias プロパティを false (既定) に設定します。

この例では、Simulink.NumericType オブジェクトを使用して同じモデル内の 2 つの Lookup Table ブロック間で出力データ型を共有する方法を示します。

  1. モデル例 sldemo_fuelsys を開きます。

    sldemo_fuelsys

    モデルによって Simulink.NumericType オブジェクトがベース ワークスペースに作成されます。オブジェクトの 1 つに s16En15 という名前が付けられます。

  2. コマンド プロンプトで、s16En15 のプロパティを検査します。

    s16En15
    s16En15 = 
    
      NumericType with properties:
    
        DataTypeMode: 'Single'
             IsAlias: 0
           DataScope: 'Auto'
          HeaderFile: ''
         Description: ''

    このオブジェクトは組み込みの Simulink データ型 single を表します。

  3. モデルで fuel_rate_control/airflow_calc サブシステム内に移動します。

  4. [ツール表示][モデル データ エディター] を選択します。モデル データ エディターの [信号] タブを確認します。

  5. モデルで、Pumping Constant ブロックの出力信号をクリックします。モデル データ エディターの [Data Type] 列に、信号のデータ型が s16En15 に設定されていることが示されます。

  6. Ramp Rate Ki ブロックの出力信号をクリックします。このブロックの出力データ型も s16En15 に設定されています。

  7. ブロック線図を更新し、必要な場合は [Data Type] 列の幅を広げます。列の右側に、2 つのルックアップ テーブル ブロックが single データ型を使用していることが表示されます。

  8. コマンド プロンプトで、データ型 double を表すように s16En15 を設定します。

    s16En15.DataTypeMode = 'Double';

  9. ブロック線図を更新します。

    2 つの Lookup Table ブロックの出力信号でデータ型 double が使用されるようになりました。データ型の継承により、e0e1 などのその他の信号は同じデータ型を取得します。

あるいは、同じモデル内のアルゴリズム間またはデータ パス間でデータ型の等価性を確立するには、Data Type PropagationData 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 ブロックの場合)、およびシミュレーション用カスタム C/C++ コードの統合 (Stateflow)、およびStateflow チャートでのカスタム構造体の統合 (Stateflow)(チャートの場合) を参照してください。

継承された設定を使用する信号のデータ型の判別

信号が、[継承: 内部ルールによる継承] (ほとんどのブロックの既定の設定) などの継承されたデータ型設定を使用する場合、信号がシミュレーションに使用する意味のあるデータ型を判別するために、ブロック線図を更新して、次の手法のいずれかまたは両方を使用します。

  • Simulink エディターで [情報表示][信号と端子][端子のデータ型] を選択します。ブロック線図の各信号の横にデータ型が表示されます。詳細については、端子のデータ型を参照してください。

  • モデル データ エディター ([ツール表示][モデル データ エディター]) の [データ型] 列の右側を確認します。モデル データ エディターの詳細については、モデル データ エディターを使用したデータ プロパティの設定を参照してください。

これらの手法を使用してデータ型を調べると次の役に立ちます。

  • モデルのデータ型手法を大まかに設計する。

  • 量子化やオーバーフローが原因の数値的問題をデバッグする。

  • モデルを共有時にわかりやすいものにする。

詳細については、端子のデータ型を参照してください。

設定を変更してもデータ型が double のままになる

[出力データ型] などのブロック パラメーターの設定後に、モデル内のデータ項目 (信号、パラメーターおよび状態) の多くで引き続きデータ型 double が使用されている場合は、モデルがデータ型をオーバーライドするように設定されていないことを確認してください。データ型オーバーライドの制御を参照してください。

参考

| |

関連するトピック