Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

XCP 通信を使用したエクスターナル モード シミュレーション

エクスターナル モード シミュレーションでは、パラメーターをリアルタイムで調整し、ターゲット アプリケーションの信号を監視できます。[カスタム ハードウェア上で実行] アプリを使用して、開発用コンピューターで、またはカスタム ハードウェアで、XCP 通信チャネルを使用するエクスターナル モード シミュレーションを設定して実行できます。

エクスターナル モード シミュレーションについて、以下を行います。

  1. 開発用コンピューターでターゲット アプリケーションをビルドします。

  2. ターゲット アプリケーションをターゲット ハードウェアに配布します。

  3. ターゲット ハードウェア上で実行するターゲット アプリケーションに Simulink® を接続します。

  4. ターゲット ハードウェア上で生成コードの実行を開始します。

開発用コンピューターでの XCP エクスターナル モード シミュレーションの実行

XCP 通信プロトコルを使用するエクスターナル モード シミュレーションを構成して実行します。シミュレーション中に以下を行います。

  • Scope ブロック、Dashboard ブロック、およびシミュレーション データ インスペクターを使用して信号を監視する。

  • Dashboard ブロックを使用してパラメーターを調整する。

XCP の信号の監視とパラメーター調整の構成

  1. この例で使用するフォルダーを作成します。

    mkdir ext_mode_xcp_example
    cd ext_mode_xcp_example

  2. Simulink を開いて、以下のブロックを含む簡単なモデル xcpExample を作成します。

    • Sine Wave

    • Gain

    • Scope

    • Half Gauge

    • Knob

  3. Sine Wave ブロックをダブルクリックします。[サンプル時間] を 0.1 に設定してから、[OK] をクリックします。

  4. Gain ブロックをダブルクリックします。[ゲイン] を 2 に設定して [OK] をクリックします。

  5. Sine Wave ブロックを Gain ブロックに接続し、その接続に名前を付けます (たとえば Test Signal)。

  6. Gain ブロックを Scope ブロックに接続し、その接続に名前を付けます (たとえば Output Signal)。

  7. ログ記録用に Test Signal を構成します。

    1. Test Signal を選択します。

    2. [信号] タブの [モニター] セクションで [信号のログ] を選択します。

    信号のログ記録を有効にしない場合、Test Signal をシミュレーション データ インスペクターにストリーミングできません。

  8. Test Signal の値を監視するように Half Gauge ブロックを構成します。

    1. Half Gauge ブロックをダブルクリックします。

    2. Simulink エディターで、Test Signal を選択します。

    3. [ブロック パラメーター] ダイアログ ボックスで、以下を行います。

      • ブロックを Test Signal に接続します。

      • [最大値] フィールドに値を入力します (たとえば 1)。

    4. [OK] をクリックします。

  9. Sine Wave ブロックの [振幅] パラメーターを調整するように Knob ブロックを構成します。

    1. Knob ブロックをダブルクリックします。

    2. Simulink エディターで、Sine Wave ブロックを選択します。

    3. [ブロック パラメーター] ダイアログ ボックスで、以下を行います。

      • ブロックを Sine Wave ブロックの [振幅] パラメーターに接続します。

      • [最小値] フィールドと [最大値] フィールドに値を入力します (たとえば、それぞれ 0.1 と 1)。

    4. [OK] をクリックします。

  10. モデルを xcpExample として保存します。

ハードウェアの指定とモデルの準備

  1. Simulink ツールストリップの [アプリ] タブから、[ハードウェアで実行するように設定] セクションで、[カスタム ハードウェア上で実行] をクリックします。[カスタム ハードウェア上で実行] ポップアップ ダイアログ ボックスで [終了] をクリックします。

  2. [ハードウェア] セクションで、システム ターゲット ファイルを指定します。この例では、既定の [grt.tlc] を使用します。Embedded Coder® がある場合は、[ert.tlc] を指定できます。

  3. [準備] ギャラリーの [モデル コンフィギュレーション] で、[ハードウェア設定] をクリックします。[コンフィギュレーション パラメーター] ダイアログ ボックスが開き、システム ターゲット ファイルによって決定された [ハードウェア実行] 設定が表示されます。

  4. [ソルバー] ペインで以下を行います。

    1. [タイプ] フィールドで、[固定ステップ] を指定します。

    2. [ソルバーの詳細][固定ステップ サイズ] フィールドで値を指定します (たとえば 0.1)。

  5. [コード生成][最適化] ペインで、[既定のパラメーター動作][調整可能] に設定します。

  6. [コード生成][インターフェイス] ペインで、[エクスターナル モード] チェック ボックスをオンにします。

  7. [トランスポート層][XCP on TCP/IP] に設定します。これにより、[MEX ファイル名]ext_xcp に指定されます。

  8. [静的なメモリ割り当て] チェック ボックスを無効にすることはできません。[静的なメモリ バッファー サイズ] の値で、信号のロギングに割り当てられる XCP スレーブ メモリのサイズを指定します。この例では、既定値を使用します。

  9. [システム ターゲット ファイル][ert.tlc] である場合、[コード生成][テンプレート] ペインで以下を実行します。

    • [メイン プログラム例の生成] チェック ボックスをオンにします。

    • [ターゲット オペレーティング システム][BareBoardExample] に設定します。

      matlabroot\toolbox\coder\xcp\src\target\ext_mode\include\ext_mode.h で入手可能なエクスターナル モード抽象化レイヤーのドキュメント化されている API を使用して、コード ジェネレーターは、オペレーティング システムを実行していないベア ボードに対する XCP エクスターナル モードのターゲット接続性を提供できる方法を示す例を作成します。

  10. [OK] をクリックします。次に、モデルを保存します。

ターゲット アプリケーションのビルトと実行

[ハードウェアで実行] セクションで、次を行います。

  1. シミュレーション終了時間の既定以外の値を指定するには、[終了時間] フィールドで、inf などの値を指定します。

  2. をクリックします。ソフトウェアでは次が行われます。

    1. ターゲット アプリケーションをビルドします。

      • Windows® では、ビルド プロセスで以下が作成されます。

        • xcpExample.exe –– 実行可能ファイル。

        • xcpExample.pdb –– 信号およびパラメーターのデバッグ シンボル ファイル。

      • Linux® では、ビルド プロセスによって DWARF 形式のデバッグ情報が作成された ELF 実行可能ファイル xcpExample に配置されます。

    2. ターゲット アプリケーションを開発用コンピューターで別個のプロセスとして実行します。

    3. Simulink をターゲット アプリケーションに接続します。

    4. 生成されたモデル コードを実行します。

    手順を個別に実行するには、[監視および調整] をクリックします。[ステップ単位のコマンド] で、次をクリックします。

    1. [監視用のビルド]

    2. [配布]

    3. [接続]

    4. [開始]

信号の監視とパラメーターの調整

以下を使用して Test Signal を監視できます。

  • Scope ブロック –– ブロックをダブルクリックします。

  • シミュレーション データ インスペクター –– [シミュレーション データ インスペクター] ボタンをクリックします。シミュレーション データ インスペクターが開いたら、[Test Signal] チェック ボックスをオンにします。これにより、ストリーム データが表示されます。

  • Half-Gauge ブロック。

正弦波の振幅を変更するには、Knob ブロックのポインターを必要な値まで回転させます。

次の表で、シミュレーション中に調整可能なブロック パラメーターを調整するさまざまな方法を示します。

方法詳細

モデル データ エディター

モデル データ エディターを通じてパラメーターを調整するには、次のようにします。

  1. Simulink エディターの [ハードウェア] タブの [準備] セクションで、[パラメーターの調整] をクリックして、モデル データ エディターを開きます。

  2. 複数の調整可能なパラメーターを同時に更新する場合、[準備] セクションで、[バッチ モード] をクリックします。

  3. モデル データ エディターの [パラメーター] タブの [値] 列で、調整可能なパラメーターの新しい値を指定します。

  4. [バッチ モード] が選択された場合は、[すべてのパラメーターを更新] をクリックするか、Ctrl+D キーを押します。Simulink は、新しい値をターゲット アプリケーションに同時にダウンロードします。

    [バッチ モード] が選択されていない場合、新しい値を指定した直後に、Simulink は新しい値をターゲット アプリケーションにダウンロードします。

詳細については、モデル データ エディターを使用したデータ プロパティの設定を参照してください。

[ブロック パラメーター] ダイアログ ボックス

[ブロック パラメーター] ダイアログ ボックスを通じてパラメーターを調整するには、次のようにします。

  1. 更新するブロックごとに、次を実行します。

    1. ブロックをダブルクリックして [ブロック パラメーター] ダイアログ ボックスを開きます。

    2. パラメーターのフィールドで、新しいパラメーター値を指定します。

    3. [適用] または [OK] をクリックします。

  2. [バッチ モード] が選択された場合は、[すべてのパラメーターを更新] をクリックするか、Ctrl+D キーを押します。Simulink は、新しい値をターゲット アプリケーションに同時にダウンロードします。

    [バッチ モード] が選択されていない場合、[適用] または [OK] をクリックした直後に、Simulink はネットワーク値をターゲット アプリケーションにダウンロードします。

MATLAB® ワークスペース

ブロック パラメーターが MATLAB ワークスペース変数の場合、次のようにします。

  1. コマンド プロンプトで、変数に新しい値を割り当てます。

  2. Simulink エディターの [ハードウェア] タブで、[準備] セクションの [すべてのパラメーターを更新] をクリックします (Ctrl+D)。Simulink は新しい値をターゲット アプリケーションにダウンロードします。

詳細については、変数の作成と編集を参照してください。

生成されたコードでのパラメーター調整の詳細については、TCP/IP またはシリアル通信を使用するエクスターナル モード シミュレーションおよび生成されたコードにおける調整可能なキャリブレーション パラメーターの作成を参照してください。

モデルに Stateflow® チャートが含まれる場合、ステート アクティビティを表示できます。詳細については、Stateflow チャートのアニメーション化 (Stateflow)を参照してください。

ターゲット アプリケーションの停止

生成されたモデル コードの実行を StopTime に到達する前に停止し、ターゲット アプリケーションを切り離すには、Simulink エディターのツール バーで [停止] ボタン をクリックします。

コード実行を停止せずにターゲット アプリケーションを Simulink から切り離す場合、 をクリックします。次に、[ステップ単位のコマンド] で、[切断] をクリックします。

XCP エクスターナル モード シミュレーションのトリガーされた信号の監視

XCP エクスターナル モード シミュレーションについて、Simulink での信号監視のためのターゲット アプリケーション データのアップロードを開始するトリガーを構成できます。

  1.  ローカル フォルダーに簡単なモデルを作成します。

  2. Simulink エディターで、それぞれの信号を右クリックして [選択した信号のログ] を選択することで、次の信号のログ記録を構成します。

    • test_signal

    • test_carrier

    • test_output

    • cmp_output

  3. Simulink ツールストリップの [アプリ] タブから、[ハードウェアで実行するように設定] セクションで、[カスタム ハードウェア上で実行] をクリックします。[カスタム ハードウェア上で実行] ポップアップ ダイアログ ボックスで [終了] をクリックします。

  4. [準備] ギャラリーの [モデル コンフィギュレーション] で、[ハードウェア設定] をクリックします。

  5. [ソルバー] ペインの [タイプ] フィールドで、[固定ステップ] を指定します。

  6. [コード生成][インターフェイス] ペインで、[エクスターナル モード] チェック ボックスをオンにします。

  7. [トランスポート層][XCP on TCP/IP] に設定します。これにより、[MEX ファイル名]ext_xcp に指定されます。

  8. [OK] をクリックします。次に、モデルを保存します。

  9. [外部信号とトリガー] ダイアログ ボックスを開くには、[準備] ギャラリーの [信号の監視とトレース] で、[コントロール パネル] をクリックします。

  10. [コンフィギュレーション] セクションで [信号とトリガー] をクリックします。これにより [外部信号とトリガー] ダイアログ ボックスが開きます。

    このダイアログ ボックスを通じて、監視する信号を選択して、ターゲット アプリケーションからデータをアップロードするためのトリガーを構成します。この例では、既定の設定を使用します。例:

    • [すべて選択] チェック ボックスがオン — ダイアログ ボックスで [選択] 列の各行に X が表示されます。シミュレーション中、ログ記録されたすべての信号を監視できます。

    • [ソース][手動] に設定 –– エクスターナル モード コントロール パネルで [トリガーの準備] ボタンなどの、データのアップロードの手動での制御が提供されます。

    • [ターゲットへ接続時にアーム] チェック ボックスがオン — Simulink をターゲット アプリケーションに接続するときに、トリガーが準備されます。

  11. [OK] をクリックします。

  12. Simulink エディターの [ハードウェア] タブの [ハードウェアで実行] セクションで、次を行います。

    1. [終了時間] フィールドで、たとえば inf のように、値を指定します。

    2. モデルを保存します。

    3. をクリックします。ソフトウェアでは次が行われます。

      1. ターゲット アプリケーションをビルドします。

      2. ターゲット アプリケーションを開発用コンピューターで別個のプロセスとして実行します。

      3. Simulink をターゲット アプリケーションに接続します。

      4. 生成されたモデル コードを実行します。

スコープの表示を表示するには、ScopeA および ScopeB をダブルクリックします。

シミュレーション データ インスペクターで信号を監視するには、[結果の確認] セクションで [データ インスペクター] ボタンをクリックします。

[エクスターナル モード コントロール パネル] から、信号のログ記録と監視を中止したり再開したりできます。[接続とトリガー] セクションで [トリガーをキャンセル] または [トリガーの準備] をそれぞれクリックします。

ターゲット アプリケーションの実行を停止して Simulink をターゲット環境から切り離すには、[リアルタイム コードを停止] をクリックします。

信号の監視とトリガー オプションの詳細については、XCP エクスターナル モード コントロール パネルおよびXCP 外部信号とトリガー ダイアログ ボックスを参照してください。

コマンド ラインからの XCP エクスターナル モード シミュレーションの実行

コマンドを使用して、XCP エクスターナル モード シミュレーションを実行できます。モデル パラメーターの値を取得および設定するには、get_param コマンドと set_param コマンドを使用します。

これらのコマンドを実行するには、Simulink モデルを開き、ターゲット アプリケーションを実行していなければなりません。

  1. モデルのシミュレーション モードをエクスターナル モードに設定します。

    set_param(gcs,'SimulationMode','external');

  2. Simulink をターゲット アプリケーションに接続します。

    set_param(gcs,'SimulationCommand','connect')

  3. 生成されたモデル コードを実行します。

    set_param(gcs,'SimulationCommand','start');

  4. パラメーターを調整するには、そのワークスペース変数の値をライン コマンドを使用して変更します。たとえば、ブロック パラメーターの値が Simulink.Parameter オブジェクトとして指定されている場合、新しい値を Value プロパティに割り当てます。

    myParamObj.Value = 5.23;

  5. ターゲット アプリケーションに新しい値をダウンロードするには、モデルを更新します。

    set_param(gcs,'SimulationCommand','update');

  6. ターゲット アプリケーションを停止し、ターゲット環境から Simulink を切断します。

    set_param(gcs,'SimulationCommand','stop');

    生成コードの実行を停止せずにターゲット アプリケーションから Simulink を切断するには、以下のコマンドを使用します。

    set_param(gcs,'SimulationCommand','disconnect');

引数 'SimulationCommand' を使用する set_param コマンドは非同期です。スクリプトからコマンドを連続して実行すると、各コマンドは、前のコマンドの完了を待たずに開始されます。各コマンドが完了したかどうかを確認するには、スクリプトで、引数 'SimulationStatus' を指定して get_param コマンドを使用します。たとえば、手順 1 ~ 3 で、スクリプトに以下のコマンドを指定します。

set_param(gcs,'SimulationMode','external');
set_param(gcs,'SimulationCommand','connect');

isExternalSimulationActive = false;
while ~isExternalSimulationActive
    simStatus = get_param(gcs, 'SimulationStatus');
    isExternalSimulationActive = strcmp(simStatus, 'external');
end
set_param(gcs,'SimulationCommand','start');

詳細については、プログラムによるシミュレーションの実行を参照してください。

診断ビューアーに、get_param コマンドと set_param コマンドで生成されたエラー メッセージが表示されます。

ターゲット アプリケーションの引数

オプションの引数を使用してターゲット アプリケーションを実行できます。オプションの引数をカスタム起動ツールの実装を介してターゲット アプリケーションに渡します。

引数説明
-w

Simulink からメッセージを受信するまで、ターゲット アプリケーションが待機状態になり、その状態のままでいることを指定します。

-w を指定しない場合、ターゲット アプリケーションはモデル コードを即座に実行します。モデル コードは、モデルをビルドしたときのパラメーター値を使用して実行されます。

-tf time

モデル パラメーター StopTime をオーバーライドします。

次で time を指定します。

  • PurelyIntegerCode'off' に設定されている場合は秒。

  • PurelyIntegerCode'on' に設定されている場合は基本レート ステップ数。

-tf inf は、モデル コードが実行されるとモデルが無期限に実行されることを指定します。

ホストベースのエクスターナル モード シミュレーションの場合、追加の rtiostream 引数を指定できます。

引数説明

-verbose level

詳細レベルを指定します。

  • 0 –– 情報なし

  • 1 –– 詳しい情報

-port number

[XCP on TCP/IP] トランスポート層に対しては、TCP/IP サーバーのポート番号を指定します。256 と 65535 の間の整数値を使用します。既定値は 17725 です。

[XCP on Serial] トランスポート層に対しては、シリアル ポート ID を指定します。たとえば、

Windows では、COM1 に対しては 'COM1' または 1、COM2 に対しては 'COM2' または 2 など。

Linux では、'/dev/ttyS0' など。

-baud value

[XCP on Serial] トランスポート層に対しては、ボー値を指定します。1200、2400、4800、9600、14400、19200、38400、57600 (既定値)、または 115200。

XCP エクスターナル モードの制限事項

次の表で、XCP 通信を使用するエクスターナル モード シミュレーションに適用される制限事項について説明します。

機能詳細

モデル構造を変更するパラメーターの更新

以下は変更できません。

  • ブロックの状態、入力または出力の数

  • サンプル時間またはサンプル時間の数

  • 連続システムの積分アルゴリズム

  • モデルまたはブロックの名前

モデル構造を変更するパラメーターの更新を行う場合は、ターゲット アプリケーションをリビルドしなければなりません。

状態の数が変更されない場合、Transfer FcnDiscrete Transfer FcnDiscrete Filter ブロックの分子多項式パラメーターと分母多項式パラメーターを変更できます。

ユーザー指定または計算されたパラメーター (零点 - 極を状態空間に変換することで得られた行列 A、B、C、D) の State-SpaceZero-Pole、および Discrete Zero-Pole ブロックのゼロ要素は変更できません。

State-Space ブロックでは、可制御正準実現で行列を指定する場合、A、B、C、D 行列に対する、この実現と行列の次元を保持するすべての変更が許可されます。

Simulink ブロック線図がターゲット アプリケーションに一致しない場合、Simulink はチェックサムが一致しないことを通知するエラーを生成します。チェックサムは最上位モデルを考慮しますが、参照モデルは考慮しません。ターゲット アプリケーションをリビルドするには、更新されたブロック線図を使用します。

信号値の表示

シミュレーション中の信号値のグラフィカル表示はサポートされていません。たとえば、[Data Display in Simulation] のメニュー項目 [Show Value Labels When Hovering][Toggle Value Labels When Clicked] および [Show Value Label of Selected Port] は使用できません。詳細については、モデル ブロック線図での信号値の表示を参照してください。

データのアーカイブ

[エクスターナル モード コントロール パネル] で使用できる [データのアーカイブ] 機能はサポートされていません。シミュレーション データ インスペクターを使用してデータを収集してエクスポートできます。

信号のログ設定のオーバーライド

[信号ログ セレクター] を使用して信号のログ記録の設定をオーバーライドする場合、[間引き] および [データ点を制限] の設定をオーバーライドする制御はサポートされていません。

コンパイラのデバッグ シンボルの形式

ツールチェーンは以下のいずれかの形式でデバッグ情報を生成しなければなりません。

  • DWARF

  • PDB

インライン パラメーター

DefaultParameterBehavior'Inlined' に設定する場合、コード ジェネレーターは生成コード内に (シンボリック パラメーター名ではなく) 数値のモデル パラメーターを組み込みます。Simulink.Parameter オブジェクトを使用して、インラインからパラメーターを削除し、そのパラメーターを調整可能に宣言することができます。ただし、Simulink をターゲット アプリケーションに接続する場合、調整可能なパラメーターの数値は自動的にモデルにアップロードされません。Simulink によって警告が表示されます。

グローバル変数

信号、パラメーター、および状態はグローバル変数として指定しなければなりません。変数が格納されるターゲット メモリの位置は、0 ~ 4294967295 の範囲になければなりません。

パラメーター構造体

構造体であるパラメーターは調整できません。

純粋な整数コード

純粋な整数コードはサポートされます。コード生成では、PurelyIntegerCode'on' の場合、1 ミリ秒以上の分解能で FixedStep を指定します。たとえば、1.0000001 ではなく 1.000001 と指定します。

実行コマンドで -tf finalTime を指定しない場合、ターゲット アプリケーションは生成されたモデル コードを無期限に実行し、StopTime を無視します。

実行コマンドで -tf finalTime を指定する場合、次のようになります。

  • finalTime 値は基本レート ステップを表します (秒数ではありません)。

  • finalTime の最大値 (目盛り単位) は MAX_int32_T になる。

可変サイズの信号

可変サイズの信号のアップロードはサポートされていません。

コンパイラのサポート

lcc-win64 はサポートされていません。

アドレスの粒度

ワードのアドレスを使用するターゲット ハードウェアはサポートされていません。

移植可能なワード サイズ

製品ターゲット ハードウェアでワードのアドレスが指定可能である場合、移植可能なワード サイズを使用したホストベースのターゲット アプリケーションの生成はサポートされていません。製品ターゲット ハードウェアは 8 ビット、16 ビットおよび 32 ビットのネイティブ データ型をサポートしなければなりません。

Scope ブロックおよび Floating Scope ブロックとスコープ ビューアー

一部の信号データ型はサポートされていません。シミュレーションで警告が発生します。

Floating Scope ブロックとスコープ ビューアーエクスターナル モード シミュレーションで Floating Scope ブロックとスコープ ビューアーを使用して参照モデルの信号を監視することはできません。参照モデルの信号を監視するには、信号のログ記録を有効にして、シミュレーション データ インスペクターを使用します。

参照モデルのスコープ

モデルの階層構造において、最上位モデルがエクスターナル モードで実行される場合、参照モデルのスコープは表示されません。参照モデルで信号を監視するには、信号のログ記録を有効にして、シミュレーション データ インスペクターを使用します。

非ゼロのシミュレーション開始時刻

非ゼロのシミュレーション開始時間はサポートされていません。[ソルバー][開始時間] の既定値である 0.0 を使用します。

中間ステップ値

一部の Simulink ブロックは、シミュレーション タイム ステップで複数の値を生成できます。以下に例を示します。

エクスターナル モード シミュレーションのタイム ステップごとに、Simulink は、それらのブロックの最終的な値のみをターゲット アプリケーションからアップロードします。Simulink は、ステップ中に生成された中間値をアップロードしません。

ファイルスコープのデータ

ファイルスコープのデータはサポートされていません。たとえば、組み込みのカスタム ストレージ クラス FileScope を適用するデータ項目。シミュレーションで警告が発生します。

FileScope ストレージ クラスの詳細については、生成されたコードでのデータ表示を制御するストレージ クラスの選択を参照してください。

行優先のコード生成

行優先の形式で生成されたコードはサポートされていません。

同時実行

同時実行はサポートされていません。[システム ターゲット ファイル][ert.tlc] であり、[ターゲット オペレーティング システム][NativeThreadsExample] である場合、ターゲット アプリケーションを作成できません。

VxWorks® の例

[システム ターゲット ファイル][ert.tlc] であり、[ターゲット オペレーティング システム][VxWorksExample] である場合、ターゲット アプリケーションを作成できません。

シミュレーション出力の単一のオブジェクトとしての保存XCP エクスターナル モード シミュレーションの出力の単一のオブジェクトへの保存はサポートされていません。シミュレーションで警告が発生します。

関連するトピック

外部の Web サイト