Main Content

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

カスタム ターゲット用のプロセッサインザループ (PIL) の構成

ターゲット接続性 API を使用して、ターゲット接続性設定を作成します。ターゲット接続性設定によって、カスタムの組み込みハードウェアに対してプロセッサインザループ (PIL) シミュレーションを実行できます。

以下の方法について説明します。

  • PIL シミュレーションをサポートするようにビルド プロセスを適応させる。

  • PIL 実行可能ファイルのターゲット ハードウェアへのダウンロードと実行開始を行うツールを設定する。

  • ターゲット ハードウェア上で PIL シミュレーションをサポートするために、ホストとターゲット間の通信チャネルを設定する。

まず、ソフトウェアインザループ (SIL) シミュレーション用に設定されているモデルから始めます。この例では、PIL モードでモデルのシミュレーションを行うためのターゲット接続性設定を作成する手順について説明します。例は完全にホスト コンピューター上で実行されます。同じ手順で、独自の組み込みターゲット ハードウェア用の接続性設定を作成できます。

SIL シミュレーションと PIL シミュレーションを使用した生成コードのテストおよびプロセッサインザループ (PIL) シミュレーション用のターゲット通信チャネルの作成も参照してください。

準備のために

この例では後でフォルダーを検索パスに追加します。そのフォルダー パスを作成します。

sl_customization_path = fullfile(matlabroot,...
    'toolbox',...
    'rtw',...
    'rtwdemos',...
    'pil_demo');

このフォルダーが既に検索パスに存在する場合は削除します。

if strfind(path,sl_customization_path)
    rmpath(sl_customization_path)
end

カスタマイズをリセットします。

sl_refresh_customizations

ビルドと検査プロセス用に一時フォルダーを (システムの一時フォルダー内に) 作成します。

currentDir = pwd;
rtwdemodir();

SIL シミュレーションでの生成コードのテスト

SIL のモデル コンフィギュレーションをシミュレートします。SIL シミュレーションの動作を、ノーマル モードのシミュレーション動作と比較することにより、ホスト コンピューター用にコンパイルされた生成コードを検証します。

モデル例が新規に開いていることを確認します。

close_system('rtwdemo_sil_modelblock',0);
close_system('rtwdemo_sil_counter',0)
open_system('rtwdemo_sil_modelblock')

CounterA モデル ブロックはテキスト (SIL) を表示します。これはこの参照モデルが SIL シミュレーション用に構成されていることを示します。

システムのシミュレーションを実行します。

set_param('rtwdemo_sil_modelblock','StopTime','10');
sim('rtwdemo_sil_modelblock');
### Starting build procedure for model: rtwdemo_sil_counter
### Successful completion of build procedure for model: rtwdemo_sil_counter
### Preparing to start SIL simulation ...
Building with 'Microsoft Visual C++ 2017 (C)'.
MEX completed successfully.
### Updating code generation report with SIL files ...
### Starting SIL simulation for component: rtwdemo_sil_counter
### Stopping SIL simulation for component: rtwdemo_sil_counter

ターゲット接続性設定

PIL 用のターゲット接続性設定の作業を開始します。

ターゲット接続性設定クラスのローカル コピーを作成します。

src_dir = ...
    fullfile(matlabroot,'toolbox','coder','simulinkcoder','+coder','+mypil');
if exist(fullfile('.','+mypil'),'dir')
    rmdir('+mypil','s')
end
mkdir +mypil
copyfile(fullfile(src_dir,'Launcher.m'), '+mypil');
copyfile(fullfile(src_dir,'TargetApplicationFramework.m'), '+mypil');
copyfile(fullfile(src_dir,'ConnectivityConfig.m'), '+mypil');

コピーしたファイルを書き込み可能にします。

fileattrib(fullfile('+mypil', '*'),'+w');

ファイルの新しい場所を反映するようにパッケージ名を更新します。

coder.mypil.Utils.UpdateClassName(...
    './+mypil/ConnectivityConfig.m',...
    'coder.mypil',...
    'mypil');

フォルダー +mypil が現在のフォルダーにあり、ファイル Launcher.m、TargetApplicationFramework.m および ConnectivityConfig.m が含まれていることを確認します。

dir './+mypil'
.                             Launcher.m                    
..                            TargetApplicationFramework.m  
ConnectivityConfig.m          

PIL 実行可能ファイルを起動するコードの確認

PIL 実行可能ファイルを起動するためのツールを設定するクラスは mypil.Launcher です。このクラスをエディターで開きます。

edit(which('mypil.Launcher'))

ファイルの内容を確認します。メソッド setArgString は実行可能ファイルに追加のコマンド ライン パラメーターを供給します。これらのパラメーターには TCP/IP のポート番号を含めることができます。組み込みプロセッサの実装の場合、これらの設定をハードコーディングすることを選択できます。

全体的なターゲットの接続性設定の構成

クラス mypil.ConnectivityConfig を表示します。

edit(which('mypil.ConnectivityConfig'))

ファイルの内容を確認します。次のことがわかります。

  • ホスト側の TCP/IP 通信チャネルを設定する rtw.connectivity.RtIOStreamHostCommunicator のインスタンスの作成。

  • ターゲット側の TCP/IP 通信チャネルを設定する、Launcher の setArgString メソッドの呼び出し。

  • 実行時間の計測のためのタイマーを設定する setTimer の呼び出し。

実行時間のプロファイリングのために独自のターゲット専用タイマーを定義するには、コード置換ライブラリを使用して関数 code_profile_read_timer の置換を指定しなければなりません。コマンド ライン API を使用するか、crtool ユーザー インターフェイスを使用します。

ターゲット側通信ドライバーの確認

ファイル rtiostream_tcpip.c を表示します。

rtiostreamtcpip_dir=fullfile(matlabroot,'toolbox','coder','rtiostream','src',...
    'rtiostreamtcpip');
edit(fullfile(rtiostreamtcpip_dir,'rtiostream_tcpip.c'))

このファイルの最後まで下にスクロールします。このファイルには関数 rtIOStreamOpen、rtIOStreamSend および rtIOStreamRecv の TCP/IP 実装が含まれていることを確認します。これらの関数は、ターゲット ハードウェアがユーザーのホスト コンピューターと通信するために必要です。使用するターゲット ハードウェアおよび通信チャネル専用のこれらの関数について、実装を提供しなければなりません。

接続性設定へのターゲット側通信ドライバーの追加

ビルドに含める追加ファイルを設定するクラスは mypil.TargetApplicationFramework です。このクラスをエディターで開きます。

edit(which('mypil.TargetApplicationFramework'))

sl_customization を使用したターゲットの接続性設定の登録

新しいターゲット接続性設定を使用するには、sl_customization ファイルを指定しなければなりません。sl_customization ファイルは、新しいターゲット接続性設定を登録するとともに、それを使用するために必要な条件を指定します。このファイルで指定する条件には、システム ターゲット ファイルの名前とハードウェア実行設定を含めることができます。

sl_customization ファイルを表示できます。この例では、ファイルを変更する必要はありません。

edit(fullfile(sl_customization_path,'sl_customization.m'))

sl_customization フォルダーを検索パスに追加し、カスタマイズを更新します。

addpath(sl_customization_path);
sl_refresh_customizations;

PIL シミュレーションによる生成コードのテスト

PIL シミュレーションを実行します。

close_system('rtwdemo_sil_modelblock',0)
open_system('rtwdemo_sil_modelblock')
set_param('rtwdemo_sil_modelblock/CounterA','SimulationMode','processor-in-the-loop (pil)');
set_param('rtwdemo_sil_modelblock','StopTime','10');
sim('rtwdemo_sil_modelblock');
### Starting build procedure for model: rtwdemo_sil_counter
### Generated code for 'rtwdemo_sil_counter' is up to date because no structural, parameter or code replacement library changes were found.
### Successful completion of build procedure for model: rtwdemo_sil_counter
### Connectivity configuration for referenced model "rtwdemo_sil_counter": My PIL Example ###
EXECUTING METHOD SETARGSTRING
SETARGSTRING called from line 71 of ConnectivityConfig.m
### Preparing to start PIL simulation ...
Building with 'Microsoft Visual C++ 2017 (C)'.
MEX completed successfully.
### Updating code generation report with PIL files ...
### Starting application: 'rtwdemo_sil_counter_ert_rtw\pil\rtwdemo_sil_counter.exe'
Starting PIL simulation
Started new process, pid = 14132
Stopping PIL simulation
Terminated process, pid = 14132

上記のメッセージを確認します。エラーが発生せずにシミュレーションが実行されたことを確認します。これで、PIL のターゲットの接続性構成を実装しました。組み込みプロセッサ、ダウンロード ツールおよび通信チャネルの独自の組み合わせの接続性設定を実装するために、同じ API を使用できます。

クリーンアップ

この例の検索パスを削除します。

rmpath(sl_customization_path)

カスタマイズをリセットします。

sl_refresh_customizations

モデルを閉じます。

close_system('rtwdemo_sil_modelblock',0)
close_system('rtwdemo_sil_counter',0)

rtwdemoclean;
cd(currentDir)

関連するトピック