Main Content

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

エクスターナル モードを使用したパラメーターの調整と信号の監視

エクスターナル モード シミュレーションは、ラピッド プロトタイピングに使用できます。エクスターナル モード シミュレーションでは、開発用コンピューター (ホスト) の Simulink® と、コードの生成およびビルド プロセスにより作成された実行可能ファイルを実行するターゲット ハードウェアの間に、通信チャネルが確立されます。

この通信チャネルでは次のことが可能です。

  • ブロック パラメーターのリアルタイムでの変更または調整。モデルのパラメーターを変更すると、Simulink により新しい値が実行中のターゲット アプリケーションにダウンロードされます。

  • 実行中のターゲット アプリケーションからの信号データの監視と保存。

チャネルの下位トランスポート層により、メッセージの送信が処理されます。Simulink と生成されるモデル コードは、この層に依存しません。トランスポート層とそのインターフェイス コードは、メッセージとデータ パケットの形式設定、送信、および受信を行う個別のモジュールに分離されています。

TCP/IP またはシリアル (RS-232) 通信チャネルを使用するエクスターナル モード シミュレーションを設定して実行します。

  1. 単純なモデルを作成して構成します。

  2. ターゲットの実行可能ファイルをビルドします。

  3. ターゲット アプリケーションを実行します。

  4. パラメーターを調整します。

例:マンデルブロ集合

説明

チュートリアルを完了するためにこの例のアルゴリズムを熟知している必要はありません。

マンデルブロ集合とは、下記の方程式で定義された軌跡が k→∞ のときに有限の範囲内にとどまる値 z0 で構成された複素平面の領域です。

zk+1=zk2+z0,k=0,1,

マンデルブロ集合の全体的な幾何形状を図に示しています。この図には、集合の境界の外側周辺における詳しい構造を十分に示すための解像度がありません。拡大率を上げていくと、マンデルブロ集合の詳細な境界が示され、そこでは徐々に細かくなりながら細部が繰り返されていることがわかります。

アルゴリズム

このチュートリアルでは、メインのカージオイドとその左側にある p/q 球状部との谷間にある、マンデルブロ集合の大きく拡大された部分を指定する一連の範囲を選択します。これらの 2 つの範囲間に、実数部 (x) と虚数部 (y) の 1000x1000 のグリッドを作成します。次に、マンデルブロ アルゴリズムを各グリッド位置で反復します。完全な解像度のイメージをレンダリングするには 500 回の反復回数で十分です。

maxIterations = 500;
gridSize = 1000;
xlim = [-0.748766713922161,-0.748766707771757];
ylim = [0.123640844894862,0.123640851045266];

このチュートリアルでは、CPU で実行される標準の MATLAB® コマンドを使ったマンデルブロ集合の実装を使用します。この実装は、電子書籍『Experiments with MATLAB』(Cleve Moler 著) で提供されているコードに基づきます。この計算はすべての場所が同時に更新されるようにベクトル化されています。

マンデルブロ モデルの作成

  1. 新しい Simulink モデルを作成し、[ユーザー定義関数] ライブラリから MATLAB Function ブロックを挿入します。

  2. MATLAB Function ブロックの 1 つをダブルクリックします。既定の関数シグネチャが MATLAB Function ブロック エディターに表示されます。

  3. マンデルブロ アルゴリズムを実装する関数 mandelbrot_count を定義します。関数ヘッダーは、maxIterationsxGrid、および yGridmandelbrot_count 関数の引数として宣言し、また count を戻り値として宣言します。エディター ドキュメントをファイルに保存します。

    function count = mandelbrot_count(maxIterations, xGrid, yGrid)
    % mandelbrot computation
    
    z0 = xGrid + 1i*yGrid;
    count = ones(size(z0));
    
    % Map computation to GPU
    coder.gpu.kernelfun;
    
    z = z0;
    for n = 0:maxIterations
        z = z.*z + z0;
        inside = abs(z)<=2;
        count = count + inside;
    end
    count = log(count);
    

  4. MATLAB Function ブロックを右クリックし、[ブロック パラメーター (Subsystem)] を選択します。

  5. [コード生成] タブで、[関数のパッケージ化] について [再利用可能な関数] を選択します。

  6. [Sources] および [Sinks] ライブラリから Inport (Simulink) ブロックと Outport (Simulink) ブロックを追加します。

  7. これらのブロックを、次の図に示すように接続します。モデルを mandelbrot_top.slx として保存します。

    Simulink model showing connection between the blocks.

ターゲットの実行可能ファイルのビルド

エクスターナル モード ターゲット アプリケーションに必要なモデルおよびコード生成パラメーターを設定します。次に、コードを生成してターゲット アプリケーションをビルドします。

  1. Simulink ツールストリップの [アプリ] タブの [ハードウェアで実行するように設定] セクションで、[ハードウェア ボードで実行] をクリックします。

  2. [ハードウェア ボード] セクションの [ハードウェア ボード] リストから、[NVIDIA Jetson] を選択します。

  3. [準備] セクションで [ハードウェア設定] をクリックします。[コンフィギュレーション パラメーター] ダイアログ ボックスが開き、[ハードウェア実行] 設定が表示されます。この設定は、選択したボードに応じて決まります。

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

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

    2. [ソルバー] フィールドで [離散 (連続状態なし)] を選択します。

    3. [ソルバーの詳細] をクリックします。[固定ステップ サイズ] フィールドで [0.1] と指定します(このようにしないと、コードの生成時に GPU Coder™ ビルド プロセスにより警告が出力され、値が指定されます)。

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

  5. [データのインポート/エクスポート] ペインで [時間] および [出力] チェック ボックスをオフにします。この例では、データのログはワークスペースまたは MAT ファイルに記録されません。[適用] をクリックします。

  6. [コード生成][最適化] ペインで、[既定のパラメーター動作][調整可能] に設定します。変更が完了したら、[適用] をクリックします。

  7. [コード生成][インターフェイス] ペインの [データ交換インターフェイス] セクションで [エクスターナル モード] を選択します。

  8. [エクスターナル モード構成] セクションで、[トランスポート層] パラメーターの既定値 [tcpip] が選択されていることを確認します。

    [MEX ファイル名] には、ホスト ターゲット通信を実装する MEX ファイルの名前が示されます。TCP/IP の場合の既定値は [ext_comm] です。これは、Simulink Coder™ ソフトウェアに付属の MEX ファイルです。

    [MEX ファイルの引数] フィールドには、外部インターフェイス プログラムに渡す引数 (TCP/IP サーバーのポート番号など) を指定できます。これらの引数は、使用している外部インターフェイスに固有です。

    このチュートリアルでは既定の引数を使用しています。[MEX ファイルの引数] フィールドは空白のままにします。

    [静的なメモリ割り当て] チェック ボックスは、ターゲットのエクスターナル モード通信バッファーへのメモリの割り当て方法を制御します。このチュートリアルでは、このチェックボックスはオフにしておきます。

  9. [適用] をクリックして、エクスターナル モード設定を保存します。

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

  11. [コード生成] ペインを選択します。[コード生成のみ] がオフになっていることを確認します。

  12. コードを生成してターゲット アプリケーションを作成するには、モデル ウィンドウで Ctrl+B を押します。あるいは [ハードウェア] タブの [ハードウェアで実行] セクションで [監視と調整] をクリックします。次に [ステップ単位のコマンド][監視用のビルド] をクリックします。

    作業フォルダーに mandelbrot_top 実行可能ファイルが作成されます。

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

mandelbrot_top ターゲット実行可能ファイルを実行し、実行中のターゲット アプリケーションの対話型フロント エンドとして Simulink を使用します。この実行可能ファイルは作業フォルダーにあります。ターゲット アプリケーションを実行して、Simulink とターゲットの間の通信を確立します。

ターゲット アプリケーションを実行するには、次を行います。

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

    1. [終了時間] フィールドに inf を指定します。これにより、ターゲット アプリケーションが Simulink から停止メッセージを受信するまで、モデルが実行されます。

    2. [監視と調整] をクリックします。次に [ステップ単位のコマンド][配布] をクリックします。

    ターゲット アプリケーションが実行を開始し、待機状態になります。

  2. [ハードウェア] タブの [ハードウェアで実行] セクションで、[監視と調整] をクリックします。次に [ステップ単位のコマンド][接続] をクリックします。このアクションにより、Simulink とターゲット アプリケーションの間でハンドシェイクが開始されます。Simulink とターゲットが接続されたら、[接続] ボタンが [切断] に変わります。

  3. [ハードウェアで実行] セクションで をクリックします。生成されたモデル コードの実行が開始されます。

これで、Simulink と実行中のターゲット アプリケーションの間で通信が確立されました。

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

ホスト/ターゲット通信から Simulink を切断する操作とターゲット アプリケーションの実行を終了する操作を同時に実行するには、[ハードウェア] タブの [ハードウェアで実行] セクションで [停止] をクリックします。

参考

関数

関連するトピック