このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
データ インターフェイスの構成
この例について
学習目的
モデル用に生成されたコードのデータ インターフェイスを構成します。
生成されたコードにおける信号とパラメーターの名前、データ型、データ ストレージ クラスを制御します。
前提条件
モデル内のデータと信号の表現方法や使用方法の理解。
データ構造をデータ オブジェクトとして表現する知識。
C コードを読む技能。
必要なファイル
モデル ファイル ThrottleControlDataInterface
および ThrottleControlTestHarness
データの宣言
ほとんどのプログラミング言語では、使用前にデータと関数を "宣言する" 必要があります。宣言により、以下の情報を指定します。
データ属性 | 説明 |
---|---|
スコープ | データにアクセスできるプログラムの領域 |
持続時間 | データがメモリ内に維持されている時間 |
データ型 | データに割り当てられるメモリの量 |
初期化 | 初期値、メモリのポインターまたは NULL。開始値を指定しない場合、ほとんどのコンパイラはゼロ値または null ポインターを割り当てます。 |
以下のデータ型はコード生成でサポートされます。
サポートされているデータ型
名前 | 説明 |
---|---|
double | 倍精度浮動小数点 |
single | 単精度浮動小数点 |
int8 | 符号付き 8 ビット整数 |
uint8 | 符号なし 8 ビット整数 |
int16 | 符号付き 16 ビット整数 |
uint16 | 符号なし 16 ビット整数 |
int32 | 符号付き 32 ビット整数 |
uint32 | 符号なし 32 ビット整数 |
固定小数点データ型 | 8 ビット、16 ビット、32 ビット語長 |
"ストレージ クラス" はデータ項目のスコープと期間です。ストレージ クラスの詳細については、C Data Code Interface Configuration for Model Interface Elementsを参照してください。
データ オブジェクトの使用
Simulink® モデルと Stateflow® チャートで、以下のメソッドを使用してデータを宣言することができます。"データ オブジェクト" と "直接指定"。この例ではデータ オブジェクト メソッドを使用します。いずれの方法でもデータ型とストレージ クラスを完全に制御することができます。また 1 つのモデル内で 2 つの方法を組み合わせることもできます。
MATLAB® と Simulink の環境では、データ オブジェクトをさまざまな方法で使用できます。この例では次のデータ オブジェクトのタイプに焦点を合わせて説明します。
信号
パラメーター
バス
データ オブジェクト メソッドを使用してモデルのデータ インターフェイスを構成するには、MATLAB のベース ワークスペースでデータ オブジェクトを定義します。次に、使用する Simulink モデルまたは組み込みの Stateflow チャートにデータ オブジェクトを関連付けます。モデルを作成するときに、ビルド プロセスは生成されたコード中のベース ワークスペースのデータ オブジェクトを使用します。
データ オブジェクトの次のようなプロパティの値を設定できます。
データ型
ストレージ クラス
値 (パラメーター)
初期値 (信号)
識別子 (生成コード内で別の名前を定義)
次元 (一般的にパラメーター用に継承)
実数/複素数 (パラメーター用に継承)
単位 (物理的な測定単位)
最小値
最大値
説明 (データ オブジェクトのドキュメント化に使用 — シミュレーションやコード生成には影響しない)
モデル例を開く
モデル例 ThrottleControlDataInterface
を開きます。
open_system('ThrottleControlDataInterface')
ベース ワークスペースの信号データ オブジェクトの参照
MATLAB コマンド ウィンドウでコマンドを入力するか、モデル エクスプローラーを使用して、ベース ワークスペースのデータ オブジェクトを作成し、検査することができます。ベース ワークスペースの信号データ オブジェクトを参照するには、次の手順を実行します。
モデル エクスプローラーを開きます。
[Base Workspace] を選択します。
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'
他の信号オブジェクトを表示するには、モデル エクスプローラーでオブジェクト名をクリックするか、コマンド ウィンドウ MATLAB でオブジェクト名を入力します。次の表は、このモデル内の一部のデータ オブジェクトの特性をまとめたものです。
オブジェクトの特性 pos_cmd_one
pos_rqst
P_InErrMap
ThrotComm
*ThrottleCommands
*説明 最上位出力 最上位入力 キャリブレーション パラメーター 最上位出力構造体 バス定義 データ型 double double 自動 自動 構造体 ストレージ クラス エクスポートされたグローバル エクスポートされた外部ポインター 定数 エクスポートされたグローバル なし *
ThrottleCommands
はバス オブジェクトを定義します。ThrotComm
はバスのインスタンス化です。バスが非バーチャル バスの場合、信号は C コード内に構造体を生成します。
バス定義 (ThrottleCommands
) を使用して構造体の複数のインスタンスをインスタンス化できます。モデルのブロック線図では、バス オブジェクトは次に示すように中心に点線のある幅広線で表示されます。
新しいデータ オブジェクトの追加
名前付きの信号、ステート、パラメーター用にデータ オブジェクトを作成することができます。データ オブジェクトを構造と関連付けるには、構造に名前が付いていなければなりません。
データ オブジェクトを作成する構造を検索するには、データ オブジェクト ウィザードを使用します。このツールにより構造を検索でき、必要なオブジェクトを作成できます。モデルにはデータ オブジェクトと関連付けされていない 2 つの信号、fbk_1
および pos_cmd_two
が含まれます。
信号を検索し、信号用のデータ オブジェクトを作成するには、次の手順に従います。
Simulink エディターで、[モデル化] タブの [設計] にある [データ オブジェクト ウィザード] をクリックします。[データ オブジェクト ウィザード] ダイアログ ボックスが開きます。
構造の候補を検索するには、[検索] をクリックします。構造
fbk_1
とpos_cmd_two
がダイアログ ボックスに表示されます。両方の構造を選択するには、[すべて選択] をクリックします。
テーブル内の [クラス] の下で、推奨されたそれぞれのデータ オブジェクトがクラス
Simulink.Signal
を使用することを確認します。オブジェクトのクラスを変更するには、[クラスの変更] をクリックします。データ オブジェクトを作成するには、[作成] をクリックします。構造
fbk_1
とpos_cmd_two
がダイアログ ボックスから削除されます。データ オブジェクト ウィザードを閉じます。
モデル エクスプローラーの [コンテンツ] ペインで、新しく作成されたオブジェクト
fbk_1
とpos_cmd_two
を探します。
生成コードのデータ オブジェクトの有効化
生成コードで信号の表示を有効にします。
Simulink エディターで、
pos_cmd_one
信号線を右クリックし、[プロパティ] を選択します。[信号プロパティ] ダイアログ ボックスが表示されます。[信号名を Simulink の信号オブジェクトに関連付ける] パラメーターが選択されていることを確認してください。
モデル内の信号について信号オブジェクトの関連付けを有効にします。MATLAB コマンド ウィンドウで次のように入力します。
disableimplicitsignalresolution('ThrottleControlDataInterface')
データ型に対するシミュレーションの影響
スロットル コントローラーのモデルでは、データ型は double
に設定されています。Simulink ソフトウェアは double
データ型をシミュレーションに使用するため、生成コードを実行する場合にモデルの動作に変化はありません。この影響を確認するには、テスト ハーネスを実行します。
テスト ハーネスを実行する前に更新して ThrottleControlDataInterface
を含めるようにしてください。
メモ
次の手順には Stateflow のライセンスが必要です。
テスト ハーネス
ThrottleControlTestHarness
のコピーを開きます。Unit_Under_Test
Model ブロックを右クリックし、[ブロック パラメーター (ModelReference)] を選択します。[モデル名] を
ThrottleControlDataInterface
に設定します。[OK] をクリックします。テスト ハーネス モデルのブロック線図を更新します。
テスト ハーネスをシミュレートします。
結果のプロット図は、モデルのゴールデン バージョンと計算バージョンの差がゼロであることを示しています。
データの管理
データ オブジェクトは、ベース ワークスペース内のモデルとは別のファイルに存在しています。データを手動で保存するには、MATLAB コマンド ウィンドウに save
と入力します。
データをモデルと区別しておくと、次の利点があります。
1 つのモデル、複数のデータセット:
異なるパラメーター値を使用して制御アルゴリズムの動作を変更する (たとえば、キャリブレーション値の異なる再利用可能なコンポーネント)
異なるデータ型を使用してターゲット ハードウェアを変更する (たとえば、浮動小数点ターゲット ハードウェアと固定小数点ターゲット ハードウェア)
複数のモデル、1 つのデータセット:
システム内のモデル間でデータを共有する
プロジェクト間でデータを共有する (たとえば、トランスミッション制御、エンジン制御、ホイール制御で同じ CAN メッセージ データセットを使用できる)
重要なポイント
Simulink モデルおよび Stateflow チャート内で、データ オブジェクトまたは直接指定を使用してデータを宣言できます。
モデル エクスプローラーまたは MATLAB コマンド ウィンドウのコマンド ラインで、ベース ワークスペース データを管理します (作成、表示、設定など)。
データ オブジェクト ウィザードを使用すると、信号、バス、パラメーターなどの構造のデータ オブジェクトをすばやく作成できます。
生成されたコードで名前によって表示されるように、データ オブジェクトを明示的に構成します。
データをモデルと区別しておくと、いくつかの利点があります。