カスタム ターゲット用のプロセッサインザループ (PIL) の構成
ターゲット接続 API を使用して、ターゲット接続構成を作成します。ターゲット接続構成によって、カスタムの組み込みハードウェアに対してプロセッサインザループ (PIL) シミュレーションを実行できます。
以下の方法について説明します。
PIL シミュレーションをサポートするようにビルド プロセスを適応させる。
PIL 実行可能ファイルのターゲット ハードウェアへのダウンロードと実行開始を行うツールを設定する。
ターゲット ハードウェア上で PIL シミュレーションをサポートするために、ホストとターゲット間の通信チャネルを設定する。
まず、ソフトウェアインザループ (SIL) シミュレーション用に設定されているモデルから始めます。この例では、PIL モードでモデルのシミュレーションを行うためのターゲット接続構成を作成する手順について説明します。例は完全に開発用コンピューター上で実行されます。同じ手順を使用して、独自の組み込みターゲット ハードウェア用の接続構成を作成できます。
SIL シミュレーションと PIL シミュレーションを使用した生成コードのテストおよびプロセッサインザループ (PIL) シミュレーション用のターゲット通信チャネルの作成も参照してください。
準備のために
この例では後でフォルダーを検索パスに追加します。そのフォルダー パスを作成します。
sl_customization_path = pwd;
このフォルダーが既に検索パスに存在する場合は削除します。
if contains(path,sl_customization_path) rmpath(sl_customization_path) end
カスタマイズをリセットします。
sl_refresh_customizations
SIL シミュレーションでの生成コードのテスト
SIL のモデル コンフィギュレーションをシミュレートします。SIL シミュレーションの動作を、ノーマル モードのシミュレーション動作と比較することにより、開発用コンピューター用にコンパイルされた生成コードを検証します。
モデル例が新規に開いていることを確認します。
close_system('SILModelBlock',0); close_system('SILCounter',0) open_system('SILModelBlock')
CounterA モデル ブロックはテキスト (SIL) を表示します。これはこの参照モデルが SIL シミュレーション用に構成されていることを示します。
システムのシミュレーションを実行します。
set_param('SILModelBlock','StopTime','10'); sim('SILModelBlock');
### Starting build procedure for: SILCounter ### Successful completion of build procedure for: SILCounter Build Summary Top model targets built: Model Action Rebuild Reason ============================================================================================ SILCounter Code generated and compiled. Code generation information file does not exist. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 14.936s ### Preparing to start SIL simulation ... Building with 'gcc'. MEX completed successfully. ### Updating code generation report with SIL files ... ### Starting SIL simulation for component: SILCounter ### Application stopped ### Stopping SIL simulation for component: SILCounter
ターゲット接続構成
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'
. .. ConnectivityConfig.m Launcher.m TargetApplicationFramework.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('SILModelBlock',0) open_system('SILModelBlock') set_param('SILModelBlock/CounterA','SimulationMode','processor-in-the-loop (pil)'); set_param('SILModelBlock','StopTime','10'); sim('SILModelBlock');
### Starting build procedure for: SILCounter ### Generated code for 'SILCounter' is up to date because no structural, parameter or code replacement library changes were found. ### Successful completion of build procedure for: SILCounter Build Summary Top model targets built: Model Action Rebuild Reason ===================================================================== SILCounter Code compiled. Compilation artifacts were out of date. 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 3.8883s ### Connectivity configuration for component "SILCounter": My PIL Example ### EXECUTING METHOD SETARGSTRING SETARGSTRING called from line 65 of ConnectivityConfig.m ### Preparing to start PIL simulation ... Building with 'gcc'. MEX completed successfully. ### Updating code generation report with PIL files ... ### Starting application: 'SILCounter_ert_rtw/pil/SILCounter' Starting PIL simulation Started new process, pid = 68609 Stopping PIL simulation Terminated process, pid = 68609
上記のメッセージを確認します。エラーが発生せずにシミュレーションが実行されたことを確認します。これで、PIL のターゲットの接続構成を実装しました。組み込みプロセッサ、ダウンロード ツールおよび通信チャネルの独自の組み合わせの接続構成を実装するために、同じ API を使用できます。
クリーンアップ
この例の検索パスを削除します。
rmpath(sl_customization_path)
カスタマイズをリセットします。
sl_refresh_customizations
モデルを閉じます。
close_system('SILModelBlock',0) close_system('SILCounter',0)