Main Content

データ インターフェイスの構成

この例について

学習目的

  • モデル用に生成されたコードのデータ インターフェイスを構成します。

  • 生成されたコードにおける信号とパラメーターの名前、データ型、データ ストレージ クラスを制御します。

前提条件

  • モデル内のデータと信号の表現方法や使用方法の理解。

  • データ構造をデータ オブジェクトとして表現する知識。

  • C コードを読む技能。

必要なファイル

rtwdemo_throttlecntrl_datainterface モデル ファイル

データの宣言

ほとんどのプログラミング言語では、使用前にデータと関数を "宣言する" 必要があります。宣言により、以下の情報を指定します。

データ属性説明
スコープデータにアクセスできるプログラムの領域
持続時間データがメモリ内に維持されている時間
データ型データに割り当てられるメモリの量
初期化初期値、メモリのポインターまたは NULL。開始値を指定しない場合、ほとんどのコンパイラはゼロ値または null ポインターを割り当てます。

以下のデータ型はコード生成でサポートされます。

サポートされているデータ型

名前説明
double倍精度浮動小数点
single単精度浮動小数点
int8符号付き 8 ビット整数
uint8符号なし 8 ビット整数
int16符号付き 16 ビット整数
uint16符号なし 16 ビット整数
int32符号付き 32 ビット整数
uint32符号なし 32 ビット整数
固定小数点データ型8 ビット、16 ビット、32 ビット語長

"ストレージ クラス" はデータ項目のスコープと期間です。ストレージ クラスの詳細については、モデル インターフェイス要素の C コード生成の構成を参照してください。

データ オブジェクトの使用

Simulink® モデルと Stateflow® チャートで、以下のメソッドを使用してデータを宣言することができます。"データ オブジェクト""直接指定"。この例ではデータ オブジェクト メソッドを使用します。いずれの方法でもデータ型とストレージ クラスを完全に制御することができます。また 1 つのモデル内で 2 つの方法を組み合わせることもできます。

MATLAB® と Simulink の環境では、データ オブジェクトをさまざまな方法で使用できます。この例では次のデータ オブジェクトのタイプに焦点を合わせて説明します。

  • 信号

  • パラメーター

  • バス

データ オブジェクト メソッドを使用してモデルのデータ インターフェイスを構成するには、MATLAB のベース ワークスペースでデータ オブジェクトを定義します。次に、使用する Simulink モデルまたは組み込みの Stateflow チャートにデータ オブジェクトを関連付けます。モデルを作成するときに、ビルド プロセスは生成されたコード中のベース ワークスペースのデータ オブジェクトを使用します。

データ オブジェクトの次のようなプロパティの値を設定できます。

  • データ型

  • ストレージ クラス

  • 値 (パラメーター)

  • 初期値 (信号)

  • 識別子 (生成コード内で別の名前を定義)

  • 次元 (一般的にパラメーター用に継承)

  • 実数/複素数 (パラメーター用に継承)

  • 単位 (物理的な測定単位)

  • 最小値

  • 最大値

  • 説明 (データ オブジェクトのドキュメント化に使用 — シミュレーションやコード生成には影響しない)

MATLAB コマンド ウィンドウでコマンドを入力するか、モデル エクスプローラーを使用して、ベース ワークスペースのデータ オブジェクトを作成し、検査することができます。ベース ワークスペースの信号データ オブジェクトを参照するには、次の手順を実行します。

  1. rtwdemo_throttlecntrl_datainterface を開いて、MATLAB パスの書き込み可能な場所に throttlecntrl_datainterface としてコピーを保存します。

  2. モデル エクスプローラーを開きます。

  3. [Base Workspace] を選択します。

  4. pos_cmd_one 信号オブジェクトを選択して表示します。

    信号オブジェクトの定義を見ることもできます。MATLAB コマンド ウィンドウで pos_cmd_one と入力します。

    pos_cmd_one =
     
    Signal with properties:
    
           CoderInfo: [1x1 Simulink.CoderInfo]
         Description: 'Throttle position command from the first PI controller'
            DataType: 'double'
                 Min: -1
                 Max: 1
                Unit: ''
          Dimensions: -1
      DimensionsMode: 'auto'
          Complexity: 'auto'
          SampleTime: -1
        InitialValue: '0'
    
  5. 他の信号オブジェクトを表示するには、モデル エクスプローラーでオブジェクト名をクリックするか、コマンド ウィンドウ MATLAB でオブジェクト名を入力します。次の表は、このモデル内の一部のデータ オブジェクトの特性をまとめたものです。

    オブジェクトの特性pos_cmd_onepos_rqstP_InErrMapThrotComm*ThrottleCommands*
    説明最上位出力最上位入力キャリブレーション パラメーター最上位出力構造体バス定義
    データ型doubledouble自動自動構造体
    ストレージ クラスエクスポートされたグローバルエクスポートされた外部ポインター定数エクスポートされたグローバルなし

    * ThrottleCommands はバス オブジェクトを定義します。ThrotComm はバスのインスタンス化です。バスが非バーチャル バスの場合、信号は C コード内に構造体を生成します。

バス定義 (ThrottleCommands) を使用して構造体の複数のインスタンスをインスタンス化できます。モデルのブロック線図では、バス オブジェクトは次に示すように中心に点線のある幅広線で表示されます。

新しいデータ オブジェクトの追加

名前付きの信号、ステート、パラメーター用にデータ オブジェクトを作成することができます。データ オブジェクトを構造と関連付けるには、構造に名前が付いていなければなりません。

データ オブジェクトを作成する構造を検索するには、データ オブジェクト ウィザードを使用します。このツールにより構造を検索でき、必要なオブジェクトを作成できます。モデルにはデータ オブジェクトと関連付けされていない 2 つの信号、fbk_1 および pos_cmd_two が含まれます。

信号を検索し、信号用のデータ オブジェクトを作成するには、次の手順に従います。

  1. Simulink エディターで、[モデル化] タブの [設計] にある [データ オブジェクト ウィザード] をクリックします。[データ オブジェクト ウィザード] ダイアログ ボックスが開きます。

  2. 構造の候補を検索するには、[検索] をクリックします。構造 fbk_1pos_cmd_two がダイアログ ボックスに表示されます。

  3. 両方の構造を選択するには、[すべて選択] をクリックします。

  4. テーブル内の [クラス] の下で、推奨されたそれぞれのデータ オブジェクトがクラス Simulink.Signal を使用することを確認します。オブジェクトのクラスを変更するには、[クラスの変更] をクリックします。

  5. データ オブジェクトを作成するには、[作成] をクリックします。構造 fbk_1pos_cmd_two がダイアログ ボックスから削除されます。

  6. データ オブジェクト ウィザードを閉じます。

  7. モデル エクスプローラーの [コンテンツ] ペインで、新しく作成されたオブジェクト fbk_1pos_cmd_two を探します。

生成コードのデータ オブジェクトの有効化

  1. 生成コードで信号の表示を有効にします。

    1. Simulink エディターで、pos_cmd_one 信号線を右クリックし、[プロパティ] を選択します。[信号プロパティ] ダイアログ ボックスが表示されます。

    2. [信号名を Simulink の信号オブジェクトに関連付ける] パラメーターが選択されていることを確認してください。

  2. モデル内の信号について信号オブジェクトの関連付けを有効にします。MATLAB コマンド ウィンドウで次のように入力します。

    disableimplicitsignalresolution('throttlecntrl_datainterface')
  3. throttlecntrl_datainterface を保存して閉じます。

データ型に対するシミュレーションの影響

スロットル コントローラーのモデルでは、データ型は double に設定されています。Simulink ソフトウェアは double データ型をシミュレーションに使用するため、生成コードを実行する場合にモデルの動作に変化はありません。この影響を確認するには、テスト ハーネスを実行します。

テスト ハーネスを実行する前に更新して throttlecntrl_datainterface を含めるようにしてください。

メモ

次の手順には Stateflow のライセンスが必要です。

  1. throttlecntrl_datainterface を開きます。

  2. テスト ハーネス throttlecntrl_testharness のコピーを開きます。

  3. Unit_Under_Test Model ブロックを右クリックし、[ブロック パラメーター (ModelReference)] を選択します。

  4. [モデル名]throttlecntrl_datainterface に設定します。[OK] をクリックします。

  5. テスト ハーネス モデルのブロック線図を更新します。

  6. テスト ハーネスをシミュレートします。

    結果のプロット図は、モデルのゴールデン バージョンと計算バージョンの差がゼロであることを示しています。

  7. throttlecntrl_testharness を保存して閉じます。

データの管理

データ オブジェクトは、ベース ワークスペース内のモデルとは別のファイルに存在しています。データを手動で保存するには、MATLAB コマンド ウィンドウに save と入力します。

データをモデルと区別しておくと、次の利点があります。

  • 1 つのモデル、複数のデータセット:

    • 異なるパラメーター値を使用して制御アルゴリズムの動作を変更する (たとえば、キャリブレーション値の異なる再利用可能なコンポーネント)

    • 異なるデータ型を使用してターゲット ハードウェアを変更する (たとえば、浮動小数点ターゲット ハードウェアと固定小数点ターゲット ハードウェア)

  • 複数のモデル、1 つのデータセット:

    • システム内のモデル間でデータを共有する

    • プロジェクト間でデータを共有する (たとえば、トランスミッション制御、エンジン制御、ホイール制御で同じ CAN メッセージ データセットを使用できる)

重要なポイント

  • Simulink モデルおよび Stateflow チャート内で、データ オブジェクトまたは直接指定を使用してデータを宣言できます。

  • モデル エクスプローラーまたは MATLAB コマンド ウィンドウのコマンド ラインで、ベース ワークスペース データを管理します (作成、表示、設定など)。

  • データ オブジェクト ウィザードを使用すると、信号、バス、パラメーターなどの構造のデータ オブジェクトをすばやく作成できます。

  • 生成されたコードで名前によって表示されるように、データ オブジェクトを明示的に構成します。

  • データをモデルと区別しておくと、いくつかの利点があります。

関連するトピック