Simulink PIL シミュレーションにおけるホストとターゲット間の通信
このセクションでは、プロセッサインザループ (PIL) シミュレーション中に開発用コンピューターとターゲット ハードウェア間で通信するために rtiostream API を使用する方法について説明します。
通信 rtiostream API
rtiostream API では、ターゲット接続 API の通信がサポートされます。rtiostream API を使用して、異なるプロセス間でのデータ交換を可能にする通信チャネルを実装します。
PIL シミュレーションには、ホストとターゲット間の通信チャネルが必要です。この通信チャネルは、ホストとターゲットで実行されるドライバー コードで構成されます。rtiostream API は、このドライバー コードで実装する必要があるターゲット側およびホスト側の関数のシグネチャを定義します。
この API は、データを送信する物理レイヤーから独立しています。可能な物理レイヤーには、RS232、イーサネット、コントローラー エリア ネットワーク (CAN) があります。
完全な rtiostream の実装には、ホスト側とターゲット側の両方のドライバーが必要です。コード生成ソフトウェアには、既定の TCP/IP 実装用のホスト側のドライバーとシリアル通信用のバージョンが含まれています。以下を使用できます。
TCP/IP
rtiostream通信チャネル。ターゲット固有の TCP/IP デバイス ドライバーを用意するか、サードパーティから入手する必要があります。シリアル通信チャネル。ターゲット固有のシリアル デバイス ドライバーを用意するか、サードパーティから入手する必要があります。
その他の通信チャネルやプラットフォームの場合、コード生成ソフトウェアでは既定の実装は提供されません。ホスト側とターゲット側の両方のドライバーを用意する必要があります。
rtiostream API は次の関数で構成されています。
以下に内容と参照先を示します。
接続実装で
rtiostream関数を使用するには、ターゲット接続 API 実装の作成を参照してください。MATLAB® コードから
rtiostream共有ライブラリ メソッドをテストするには、rtiostream_wrapperを参照してください。カスタム
rtiostreamインターフェイス実装の動作のデバッグと検証については、rtiostream ドライバーのテストおよびrtiostreamtestを参照してください。
ホストとターゲットの同期
rtiostream API を使用して通信チャネルを実装した場合、ホストとターゲットを同期する必要があります。この同期により、ターゲット アプリケーションが完全に初期化される前に Simulink® がデータを送受信しないようになります。
TCP/IP rtiostream 実装でホストとターゲットを同期するには、rtw.connectivity.RtIOStreamHostCommunicator の setInitCommsTimeout メソッドを使用します。このアプローチは、ターゲット サーバーが実行されるまで Simulink が自動的に待機するため、接続指向の TCP/IP rtiostream 実装に適しています。
シリアルなどの他の rtiostream 実装では、ターゲットが完全に初期化されるのを待つことなく、rtiostream 接続の Simulink 側が開きます。この場合、ターゲット アプリケーションが完全に初期化されるまで、Launcher 実装を待機させる必要があります。ホストとターゲットを同期するには、次のいずれかのアプローチを使用します。
Launcher実装の最後に一時停止を追加して、ターゲットの初期化が完了するまでLauncherを待機させる。Launcher実装で、ターゲットの初期化が完了するまで待機するサードパーティのダウンローダーまたはデバッガー API を使用する。Launcher/rtiostream実装に、ターゲットの初期化の完了を確認するハンドシェイク メカニズムを実装する。
rtiostream ドライバーのテスト
テスト スイートを使用して、カスタム rtiostream インターフェイス実装の動作をデバッグおよび検証します。
テスト スイートは以下に役立ちます。
組み込みの
rtiostreamサポートがないカスタム ハードウェアの統合に必要な時間を短縮する。カスタム
rtiostreamドライバーのテストに必要な時間を短縮する。カスタム
rtiostreamドライバーのパフォーマンスを解析する。
テスト スイートは 2 つの部分で構成されています。1 つの部分は、ターゲット ハードウェア上で実行されるアプリケーションです。もう 1 つの部分は MATLAB で実行されます。詳細については、rtiostreamtest を参照してください。
ホストとターゲット間の通信のトラブルシューティング
PIL シミュレーション中に診断ビューアーで通信 I/O 情報を表示するには、コマンド ウィンドウで以下を入力します。
set_param(model, 'SILPILVerboseOutput', 'on');
既定では、コンフィギュレーション パラメーター SILPILVerboseOutput は off に設定されます。
SILPILVerboseOutput を on に設定して SIL シミュレーションを実行すると、シミュレーションでは、Simulink と、開発コンピューター上で別個のプロセスとして実行されるターゲット アプリケーションとの間で発生する通信の I/O 情報が表示されます。
ワードのアドレス指定が可能なターゲット ハードウェア
[コンフィギュレーション パラメーター] ダイアログ ボックスで [デバイス ベンダー] および [デバイス タイプ] の設定を指定すると、PIL シミュレーションにターゲット ハードウェアに関するメモリ アドレス指定情報が提供されます。
たとえば、[デバイス ベンダー] が [Texas Instruments] に設定され、[デバイス タイプ] が [C5000] に設定されている場合を考えます。
設定では、ターゲット ハードウェアで 16 ビット ワード アドレスとビッグエンディアン ワード順が使用されることを指定します。rtiostream 実装は 16 ビット ワードで動作します。
ターゲット ハードウェアでは、rtIOStream 関数でサイズ 1 が指定された場合、ターゲット ハードウェアは 1 つの 16 ビット ワード (2 バイト) を送信または受信する必要があります。sizeof(char) と sizeof(short) は 1 を返します。これは 1 つの 16 ビット ワードに相当します。rtIOStream 関数は、ワード内のバイト順がリトルエンディアンである (つまり、下位バイトが上位バイトよりも先に送信される) と想定します。
rtiostreamtest はターゲット ハードウェアを識別し、16 ビット ワード単位でデータを処理します。たとえば、バイト値は 16 ビット ワード値として転送されます。
参考
rtIOStreamOpen | rtIOStreamSend | rtIOStreamRecv | rtIOStreamClose | rtiostream_wrapper | rtiostreamtest | rtw.connectivity.RtIOStreamHostCommunicator