このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Simulink 用の PIL ターゲット接続構成の作成
PIL のターゲット接続構成
ターゲット接続構成とターゲット接続 API を使用して、プロセッサインザループ (PIL) シミュレーションをターゲット環境に合わせてカスタマイズします。
ターゲット接続構成を通じて以下を指定します。
ターゲット接続 API 実装の構成名。
互換性がある Simulink® モデルのセットを定義する設定。たとえば、特定のシステム ターゲット ファイル、テンプレート makefile、およびハードウェア実装をもつモデルのセット。
PIL シミュレーションには、以下を行うためにサードパーティ製ツールを統合するターゲット接続 API 実装が必要です。
生成コードをクロスコンパイルし、ターゲット ハードウェアで実行される PIL アプリケーションを作成する。
アプリケーションをターゲットにダウンロードして起動および停止する。
Simulink とターゲットの間で通信する。
PIL シミュレーションにはさまざまなターゲット接続構成を使用できます。sl_customization.m
ファイルを作成して MATLAB® 検索パスに配置することで、接続構成を Simulink に登録します。
PIL シミュレーションの実行時、使用可能な接続構成からどれを使用するかがソフトウェアで判別されます。テスト対象モデルと互換性がある接続構成が検索されます。互換性のある接続構成が複数見つかるか、または 1 つも見つからない場合、問題解決に関する情報を含むエラー メッセージが生成されます。
ターゲット接続 API 実装の作成
次の図は、PIL ターゲット接続 API のコンポーネントを示したものです。
3 つの API コンポーネントの実装を提供する必要があります。
ビルド API — 生成コードをビルドするための Simulink Coder™ ツールチェーンまたはテンプレート makefile のアプローチを指定します。
ランチャー API — Simulink での PIL 実行可能ファイルの起動方法と停止方法を制御します。
通信 API — Simulink と PIL ターゲットの間の接続をカスタマイズします。TCP/IP 通信とシリアル通信用のホスト側のサポートが Embedded Coder® で提供されており、他のプロトコル用に適合させることができます。
ターゲット接続 API 実装を作成する手順の概要を以下に示します。この手順で示しているコード例は、カスタム ターゲット用のプロセッサインザループ (PIL) の構成の ConnectivityConfig.m
から引用したものです。
rtw.connectivity.Config
のサブクラスを作成します。ConnectivityConfig < rtw.connectivity.Config
サブクラスで以下を行います。
ビルド プロセスを構成する
rtw.connectivity.MakefileBuilder
をインスタンス化します。builder = rtw.connectivity.MakefileBuilder(componentArgs, ... targetApplicationFramework, ... exeExtension);
サードパーティ製ツールを使ってアプリケーションをダウンロードして実行する
rtw.connectivity.Launcher
のサブクラスを作成します。launcher = mypil.Launcher(componentArgs, builder);
ホストとターゲットの通信に使用するチャネルの
rtiostream
API 実装を構成します。ターゲット側では、通信用のドライバー コードを提供する必要があります。たとえば、TCP/IP 通信やシリアル通信のコードです。このコードをビルド プロセスに統合するには、
rtw.pil.RtIOStreamApplicationFramework
のサブクラスを作成します。ホスト側では、TCP/IP 通信またはシリアル通信用の提供されているライブラリを使用できます。指定のライブラリを読み込んで初期化する
rtw.connectivity.RtIOStreamHostCommunicator
をインスタンス化します。hostCommunicator = rtw.connectivity.RtIOStreamHostCommunicator(componentArgs, ... launcher, ... rtiostreamLib);
生成コードの実行時間プロファイリングが必要な場合は、ハードウェア固有のタイマーとそれに関連するソース ファイルの詳細を提供するタイマー オブジェクトを作成します。詳細については、Specify Hardware Timer for Simulinkを参照してください。
生成コードのスタック使用量プロファイリングが必要な場合は、スタック使用量のデータをターゲット ハードウェアから取得するドライバー実装を指定します。ドライバーはスタック レジスタの値を返さなければなりません。ドライバーが指定されていない場合、既定の汎用ドライバーを使用して PIL シミュレーションが試行されます。詳細については、Implement Driver to Obtain Stack Usage Data During PIL Simulationを参照してください。
メモ
接続の実装を変更するたびに、モデルを閉じて再度開き、モデルを更新します。
接続 API 実装の登録
ターゲット接続 API 実装をターゲット接続構成として Simulink で登録するには、以下を行います。
sl_customization.m
ファイルを作成または更新します。このファイルで以下を行います。ターゲット接続 API 実装の構成名や互換性があるモデルなどを指定するターゲット接続構成オブジェクトを作成します。
registerTargetInfo
を呼び出します。
sl_customization.m
を含むフォルダーを検索パスに追加し、カスタマイズを更新します。addpath(sl_customization_path); sl_refresh_customizations;
詳細については、rtw.connectivity.ConfigRegistry
を参照してください。
ターゲット接続構成の検証
ターゲット接続構成をモデル開発やコード生成の早い段階で検証したり、それとは別に独立して検証したりするには、提供されている piltest
関数を使用します。この関数を使用して一連のテストを実行できます。テストにおいて、関数はノーマル、SIL、PIL の各種シミュレーションを実行します。それらの結果を比較し、シミュレーション モードによる相違を検出すると、関数はエラーを生成します。
ターゲット接続 API の例
詳しい手順の例については、以下を参照してください。
カスタム ターゲット用のプロセッサインザループ (PIL) の構成
この例では、ターゲット接続 API を使用してカスタム PIL 実装を作成する方法を示します。PIL をサポートするためのビルド プロセス、ダウンロードと実行のツール、およびホストとターゲットの間の通信チャネルを構成するコードを調べることができます。完全なホストベースの PIL 構成を有効にするには、この例の手順に従います。
プロセッサインザループ (PIL) シミュレーション用のターゲット通信チャネルの作成
この例では、Embedded Coder 製品と組み込みターゲットで使用する通信チャネルを実装する方法を示します。この通信チャネルは異なるプロセス間のデータ交換を可能にします。PIL シミュレーションでは、開発用コンピューター上で実行される Simulink ソフトウェアとターゲット ハードウェア上で実行される展開されたコードとの間でデータ交換が必要になります。
rtiostream
インターフェイスは、さまざまな接続タイプのターゲット接続ドライバーとして実装可能な汎用通信チャネルを提供します。この例では、既定のホスト側 TCP/IP ドライバーと共に動作する TCP/IP の独自のターゲット側ドライバーを構成する方法を示します。既定の TCP/IP 通信ではホストとターゲットの間の高帯域幅の通信が可能で、ビデオなどのデータの転送に使用できます。メモ
rtiostream
TCP/IP 実装を PIL シミュレーション用にカスタマイズする場合は、サーバー側の接続に対する Nagle アルゴリズムをオフにする必要があります。Nagle アルゴリズムをオフにしないと、PIL シミュレーションの実行速度が大幅に低下することがあります。Nagle アルゴリズムをオフにする方法については、
ファイルに示されています。matlabroot
/toolbox/coder/rtiostream/src/rtiostreamtcpip/rtiostream_tcpip.cカスタム TCP/IP 実装のコードは変更が必要な場合があります。/* Disable Nagle's Algorithm*/ option = 1; sockStatus = setsockopt(lFd,IPPROTO_TCP,TCP_NODELAY,(char*)&option,sizeof(option));
この例では、たとえば通信チャネルのホスト側とターゲット側の両方にシリアル、CAN、または USB を使用するなど、カスタム ターゲット接続ドライバーを実装する方法も示しています。
参考
piltest
| rtw.connectivity.Config
| rtw.connectivity.ConfigRegistry
| rtw.connectivity.Launcher
| rtw.connectivity.MakefileBuilder
| rtw.connectivity.RtIOStreamHostCommunicator
| rtw.pil.RtIOStreamApplicationFramework