主要内容

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

Tcp / ipまたはシリアルのエクスタ、ナルモ、ド通信のためのトランスポ、ト層の作成

この節では,ユーザー独自の下位通信層を使用するエクスターナルモードでカスタムターゲットを接続する方法を説明します。以下のトピックにいて説明します。

  • エクスタ,ナルモ,ドの設計と動作の概要

  • エクスタナルモドのソスファルの記述

  • エクスタナルモドのソスファルを修正し,既定のext_commMexファ▪▪ルのタスクを処理するための実行可能ファ▪▪ルをビルドするためのガ▪▪ドラ▪▪ン

この節では,ユ,ザ,が金宝app®编码器™プログラムの実行およびエクスタ,ナルモ,ドの基本的動作に精通していることを想定しています。

エクスタ,ナルモ,ドの設計

金宝app仿真软件エンジンとターゲットシステムとの間のエクスターナルモード通信は,クライアント/サーバーアーキテクチャに基づきます。クライアント(仿金宝app真软件エンジン)は,サーバー(ターゲット)にパラメーター変更の受け取りまたは信号データのアップロードを要求するメッセージを送信します。サ,バ,は,要求を実行することで応答します。

下位の“トランスポ,ト層”が,メッセ,ジの物理的伝送を処理します。金宝appSimulinkエンジンとモデルコ,ドの両方とも,この層から独立しています。トランスポート層とそのトランスポート層に直接接続するコードは両方とも,メッセージとデータパケットの書式設定,伝送,および受信を行う独立した複数のモジュールに分かれています。

設計がこのようになっているため,タ,ゲットごとに異なるトランスポ,ト層を使用することができます。导通,およびRSimの各ターゲットは,TCP / IP通信とrs - 232(シリアル)通信を使用することにより,ホスト/ターゲット通信をサポートします。金宝appSimulink桌面实时™タ,ゲットは共有メモリ通信をサポ,トします。风河系统公司®系统的龙卷风®タ,ゲットは,tcp / ipのみをサポ,トします。

GRT, ERT,快速模拟および龙卷风タ,ゲットと金宝appSimulink桌面实时製品および金宝app仿真软件实时™製品と同様に金宝app仿真软件编码器製品では,クライアント側とサーバー側のエクスターナルモードモジュールの両者向けにソースコード全体が用意されています。クラ▪▪アント側の主要モジュ▪▪ルはext_comm.cです。サ,バ,側の主要モジュ,ルはext_svr.cです。

これら2つのモジュールは,次のソースファイルを通じて,指定されたトランスポート層を呼び出します。

組み込みのトランスポ,ト層実装

プロトコル

クラアントかサバか

ソスファル

TCP / IP

クラ电子邮箱アント(ホスト)

サ,バ,(タ,ゲット)

シリアル

クラ电子邮箱アント(ホスト)

サ,バ,(タ,ゲット)

シリアル通信の場合,モジュ,ルext_serial_transport.crtiostream_serial.cがクラアント側のトランスポト機能を実装し,ext_svr_serial_transport.crtiostream_serial.cが対応するサ,バ,側の機能を実装します。Tcp / ip通信の場合,rtiostream_interface.cモジュ,ルとrtiostream_tcpip.cモジュルがクラアント側とサバ側両方の機能を実装します。これらのファ▪▪ルのコピを編集することができます(元のファ▪▪ルは編集できません)。ユザ独自の下位通信層を使用するエクスタナルモドをサポトすることができます。そのためには,次のテンプレ,トを使用して同じようなファ,ルを作成します。

  • クラ电子邮箱アント(ホスト)側:matlabroot/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.c(tcp / ip)またはmatlabroot/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.c(シリアル)

  • サ,バ,(タ,ゲット)側:matlabroot/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.c(tcp / ip)またはmatlabroot/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.c(シリアル)

rtiostream_interface.cファルは,エクスタナルモドのプロトコルとrtiostream通信チャネルとの間の▪▪ンタ▪▪フェ▪▪スです。rtiostream通信チャネルの実装とテストの詳細にいては,以下を参照してください。

そこで説明されている▪▪ンタ▪▪フェ▪▪スを使用してrtiostream通信チャネルを実装すれば,rtiostream_interface.cファルやその他のエクスタナルモド関連ファルを変更する必要はありません。

メモ:

作業用のソスファルを変更しないでください。/自定义フォルダ,か/ rtiostreamフォルダーに入っているテンプレートを出発点として使用して,テンプレートに記載されているコメントに従ってください。

必要なのは,下位通信機能を実装するコ,ドを書くことのみです。ホスト/タゲット間のデタ変換などの問題やメッセジの書式設定に気を遣う必要はありません。これらの機能は,金宝app仿真软件编码器ソフトウェアが処理します。

クラaapl .金宝app exe (Simulinkエンジン)側では,通信はext_comm(tcp / ipの場合)とext_serial_win32_comm(シリアルの場合)の各mexファaaplルが処理します。

サーバー(ターゲット)側では,エクスターナルモードのモジュールはターゲット実行可能ファイルにリンクされます。これがコ,ド生成時に自動的に行われるのは,[エクスタ,ナルモ,ド]を選択し,指定する[トランスポ,ト層]オプションに基づいている場合です。モジュールは,メインプログラムとモデル実行エンジンから呼び出され,生成されるモデルコードからは独立しています。

ユーザー独自のクライアント側下位トランスポートプロトコルを実装するための一般的手順は,次のとおりです。

  1. rtiostream_tcpip.cテンプレ,トを編集して,下位通信呼び出しをユ,ザ,独自の通信呼び出しに差し替えます。

  2. ユザのカスタムトランスポト用のmexファルを生成します。

  3. 新しいトランスポ,ト層をS金宝appimulinkソフトウェアに登録します。これにより,[コンフィギュレションパラメタ]ダアログボックスの[@ @ @ @ @ @ @ @ @ @ @ @]ペ▪▪ンを使用してモデルのトランスポ▪▪トを選択できるようになります。

詳細にいては,カスタムクラアント(ホスト)を参照してください。

ユーザー独自のサーバー側下位トランスポートプロトコルを実装するための一般的手順は,次のとおりです。

  1. rtiostream_tcpip.cテンプレ,トを編集して,下位通信呼び出しをユ,ザ,独自の通信呼び出しに差し替えます。通常はこの作業には,ターゲットハードウェア用のデバイスドライバーを書くか組み込むことが必要になります。

  2. テンプレトmakefileを変更し,新しいトランスポトをサポトします。

詳細にいては,カスタムサバ(タゲット)のトランスポトプロトコルの作成を参照してください。

エクスタ,ナルモ,ド通信の概要

この節では,金宝app仿真软件编码器生成プログラムが仿金宝app真软件エクスターナルモードと通信する方法のおおまかな概要を説明します。この説明では,金宝app仿真软件编码器製品に同梱されているtcp / ip版のエクスタナルモドを使用します。

通信が行われるには,サーバー(ターゲット)プログラムと仿真软金宝app件ソフトウェアの両方が実行中でなければなりません。これは,サ,バ,システムのモデルコ,ドが実行中でなければならない,という意味ではありません。サーバーは仿金宝app真软件エンジンがモデルの実行開始コマンドを発行するのを待っている状態でもかまいません。

クラアントとサバは双方向ソケット搬送パケットを使用して通信します。パケットの構成要素は,“メッセジ”(コマンド,パラメタダウンロド,および応答)か“デタ”(信号アップロド)のいずれかです。

タ,ゲットアプリケ,ションが- wコマンドラインオプションで起動された場合,ターゲットアプリケーションはホストからメッセージを受信するまで待機状態に移行します。それ以外の場合は,モデルの実行を開始します。タ,ゲットアプリケ,ションが待機状態にある間、Simulink エンジンはパラメーターをターゲットにダウンロードし、データ アップロードを設定することができます。

ユ,ザ,が[シミュレ,ション]メニュ,の[タ,ゲットに接続]をクリックすると,ホストはEXT_CONNECT消息を送信してハンドシェ@ @クを開始します。サ,バ,は自己の情報を返します。この情報は,次の項目を含みます。

  • チェックサム。ホストはモデルのチェックサムを使用して,ターゲットコードが現在の仿真金宝app软件モデルを正確に表現したものかどうかを判断します。

  • デ,タ形式情報。ホストはこの情報を使用して,ダウンロード対象データの書式を設定したりアップロード済みデータを解釈したりします。

この時点で,ホストとサ,バ,は接続されています。サ,バ,はモデルを実行しているか待機状態にあるかのいずれかです(後者の場合,ユ,ザ,は[シミュレ,ション]メニュ,の[リアルタeconp econpムコドを開始]をクリックして,モデル実行を開始することができます)。

モデル実行の間,メッセ,ジサ,バ,はバックグラウンドタスクとして実行されます。このタスクは,パラメ,タ,ダウンロ,ドなどのメッセ,ジを受信し処理します。

データアップロードは,信号パケットのフォアグラウンド実行とバックグラウンドサービス提供で構成されます。タ,ゲットはモデル出力を計算すると同時に,信号値をデ,タアップロ,ドバッファ,にコピ,します。この処理は、各タスク識別子(tid)に関連付けられたタスクの一部として実行されます。したがって,デ,タ収集はフォアグラウンドで行われます。ところが、収集データの伝送はバックグラウンド タスクとして行われます。このバックグラウンド タスクにより、コレクション バッファー内のデータがデータ パケットの形で Simulink エンジンに送信されます。

ホストは大半の交換処理をメッセ,ジとして開始します。タ,ゲットは通常は,メッセ,ジを受信し処理したことを確認する応答を返します。メッセ,ジとコマンドの例は,以下のとおりです。

  • 接続メッセジ/接続応答

  • タゲットシミュレションの開始/応答の開始

  • パラメタダウンロド/パラメタダウンロド応答

  • デタアップロド用トリガの装備/トリガ応答の装備

  • タゲットシミュレションの終了/タゲットシャットダウン応答

モデル実行が終了するのは,モデルが最終時間に達するか,ホストが終了コマンドを送信するか,または停止模拟ブロックが実行を終了したときです。サーバーはモデル実行が終了するとすぐにホストにモデル実行が停止したことを伝え,ソケットをシャットダウンします。ホストもソケットをシャットダウンし,エクスタ,ナルモ,ドを終了します。

エクスタナルモドのソスファル

クライアント(ホスト)側の墨西哥人ファイルインターフェイスのソースファイル

Mexファルンタフェスコンポネントのソスファルは,特に記載のない限り,matlabroot/工具箱/编码器/ simul金宝appinkcoder_core ext_mode /主机開く)フォルダ,にあります。

  • 常见/ ext_comm.c

    エクスタ、ナルモ、ド通信の中核を担うのは、このファ、ルです。タ,ゲットとS金宝appimulinkエンジンとの間の中継局として機能します。ext_comm.cは共有デ,タ構造体ExternalSimを使用してS金宝appimulinkエンジンと通信します。タ,ゲットとの通信には,トランスポ,ト層の呼び出しを使用します。

    ext_comm.cによって実行されるタスクには,ターゲットとの接続の確立,パラメーターのダウンロード,およびターゲットとの接続の終了があります。

  • 常见/ rtiostream_interface.c

    このファルは,エクスタナルモドのプロトコルとrtiostream通信チャネルとの間の▪▪ンタ▪▪フェ▪▪スです。rtiostream通信チャネルの実装の詳細にいては,通信程序流API(嵌入式编码)を参照してください。そこで説明されている▪▪ンタ▪▪フェ▪▪スを使用してrtiostream通信チャネルを実装すれば,rtiostream_interface.cファルやその他のエクスタナルモド関連ファルを変更する必要はありません。

  • matlabroot/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.c

    このファルは,必要とされるtcp / ipトランスポト層関数を実装します。金宝app仿真软件编码器ソフトウェアに同梱されているバ,ジョンのrtiostream_tcpip.cでは,recv ()send ()套接字()などのtcp / ip関数を使用します。

  • matlabroot/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.c

    このファ@ @ルは,必要とされるシリアルトランスポ@ @ト層関数を実装します。金宝app仿真软件编码器ソフトウェアに同梱されているバ,ジョンのrtiostream_serial.cでは,ReadFile ()WriteFile ()它仅仅()などのシリアル関数を使用します。

  • 串行/ ext_serial_transport.c

    このファ@ @ルは,必要とされるシリアルトランスポ@ @ト層関数を実装します。ext_serial_transport.cにはext_serial_utils.cが含まれます。これは,matlabroot/ rtw / c / src / ext_mode /串行開く)にあり,クラ,。

  • 常见/ ext_main.c

    このファ▪▪ルはエクスタ▪ナルモ▪ド用の▪mexファ▪▪ルラッパ▪です。ext_main.cは標準のmexFunction呼び出しを使用して,金宝app仿真软件エンジンとのインターフェイスの役割を果たします(詳細については,関数mexFunctionのリファレンスペ,ジおよび外部プログラミング言語およびシステムとmatlabの統合を参照してください。)ext_main.cには関数ディスパッチャesGetActionが含まれます。これは,Simulink エンジンからの要求をext_comm.cに送信します。

  • 常见/ ext_convert.cおよびext_convert.h

    このファイルには,データをホストでの形式からターゲットでの形式に変換(およびこの反対)するための関数が含まれます。関数としてはたとえば,バイトスワッピング(ビッグエンディアンからリトルエンディアン),非IEEE®浮動小数からieee倍精度への変換,およびその他の変換があります。これらの関数は,ext_comm.cによって呼び出され,金宝app仿真软件エンジンによっても直接呼び出されます(関数ポインターを使用)。

    メモ:

    ext_convertをカスタマ@ @ズしなくても,カスタムトランスポ@ @ト層を実装することができます。ただし,目的のタ,ゲットに合わせてext_convertをカスタマ@ @ズする場合があります。たとえば,タ,ゲットが浮动データ型を德州仪器™形式で表現している場合,德州仪器からIEEEへの変換を行うようext_convertを変更しなければなりません。

  • 常见/ extsim.h

    このファ电子邮箱ルは,ExternalSimデ,タ構造体とアクセスマクロを指定します。この構造体は,金宝appSimulinkエンジンとext_comm.cとの間の通信に使用されます。

  • 常见/ extutil.h

    このファ@ @ルには断言マクロをコンパ@ @ルするための条件のみ含まれます。

  • 常见/ ext_transport.h

    このファ▪▪ルはトランスポ▪▪ト層が実装しなければならない関数を指定します。

サバ(タゲット)側のソスファル

これらのファ@ @ルは模型. exe実行可能ファ@ @ルにリンクされます。特に記載のない限り,matlabroot/ rtw / c / src / ext_mode開く)にあります。

  • 常见/ ext_svr.c

    ext_svr.cはホスト上のext_comm.cに似ていますが,通常はより多くのタスクを担当します。ホストと生成コ,ドとの間の中継局として機能します。ext_comm.cと同様に,ext_svr.cはホストとの接続の確立と終了などのタスクを実行します。ext_svr.cにも,ダウンロードされたパラメーターをターゲットモデルに書き込むか,またはターゲットデータバッファーからデータを抽出しホストに送り返すかのいずれかを行うバックグラウンドタスク関数が含まれます。

  • 常见/ rtiostream_interface.c

    このファルは,エクスタナルモドのプロトコルとrtiostream通信チャネルとの間の▪▪ンタ▪▪フェ▪▪スです。rtiostream通信チャネルの実装の詳細にいては,通信程序流API(嵌入式编码)を参照してください。そこで説明されている▪▪ンタ▪▪フェ▪▪スを使用してrtiostream通信チャネルを実装すれば,rtiostream_interface.cファルやその他のエクスタナルモド関連ファルを変更する必要はありません。

  • matlabroot/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.c

    このファルは,必要とされるtcp / ipトランスポト層関数を実装します。金宝app仿真软件编码器ソフトウェアに同梱されているバ,ジョンのrtiostream_tcpip.cでは,recv ()send ()套接字()などのtcp / ip関数を使用します。

  • matlabroot/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.c

    このファ@ @ルは,必要とされるシリアルトランスポ@ @ト層関数を実装します。ソフトウェアに同梱されているバ,ジョンのrtiostream_serial.cでは,ReadFile ()WriteFile ()它仅仅()などのシリアル関数を使用します。

  • matlabroot/工具箱/编码器/ rtiostream / src /rtiostream.h

    このファ@ @ルはrtiostream_tcpip.cに実装される関数rtIOStream *を指定します。

  • 串行/ ext_svr_serial_transport.c

    このファ@ @ルは,必要とされるシリアルトランスポ@ @ト層関数を実装します。ext_svr_serial_transport.cには串行/ ext_serial_utils.cが含まれます。これは,クライアント側とサーバー側に共通の関数を含んでいます。

  • 常见/ updown.c

    updown.cはタ,ゲットモデルとの対話の詳細を処理します。パラメ,タ,のダウンロ,ド時に,updown.cは新しいパラメタをモデルのパラメタベクトルにンストルします。デ,タをアップロ,ドするため,updown.cにはモデルのblockioベクトルからデ,タを抽出しそのデ,タをアップロ,ドバッファ,に書き込むための関数が含まれます。updown.cext_svr.cとモデルコド(grt_main.cなど)の両方にサ,ビスを提供します。これには,ext_svr.cのバックグラウンドタスクを使用して呼び出されるコード,および優先度の高いモデル実行の一部として呼び出されるコードが含まれます。

  • matlabroot/ rtw / c / src /dt_info.h(生成されたモデルビルドファescル模型. hによって含められる)

    これらのファイルには,多様なコンピューターアーキテクチャ全体でマルチデータ型構造体にアクセスできるようにするデータ型移行情報が含まれます。この情報はホストでの形式とタ,ゲットでの形式との間でデ,タを変換するために使用されます。

  • 常见/ updown_util.h

    このファ@ @ルには断言マクロをコンパ@ @ルするための条件のみ含まれます。

  • 常见/ ext_svr_transport.h

    このファルはサバ(タゲット)のトランスポト層が実装しなければならない関数Ext *を指定します。

サバフォルダ内のその他のファル

  • 常见/ ext_share.h

    ホストモジュールとターゲットモジュールの両方が必要とするメッセージコード定義やその他の定義を含みます。

  • 串行/ ext_serial_utils.c

    シリアルプロトコル用のトランスポート層のホストモジュールとターゲットモジュールの両方が必要とする通信,墨西哥人リンク,および生成コードの関数とデータ構造体を含みます。

  • シリアルトランスポト実装には,次の追加ファルが含まれます。

    • 串行/ ext_serial_pkt.cおよびext_serial_pkt.h

    • 串行/ ext_serial_port.h

カスタムトランスポ,ト層の実装

カスタムトランスポ,ト層の要件

  • 既定の設定では,ext_svr.cupdown.cmallocを使用して,メッセ,ジ,デ,タ収集,および他の目的でタ,ゲットメモリのバッファ,を割り当てます。ただし,静的メモリをあらかじめ割り当てるオプションもあります。ターゲットが他のメモリ割り当てスキームを使用する場合は,これらのモジュールを変更しなければなりません。

  • タ,ゲットは,int32_Tuint32_Tデ,タ型の両方をサポ,トすると仮定されます。

カスタムクラアント(ホスト)

低水準のトランスポトプロトコルのクラアント(ホスト)側を実装するには以下のようにします。

  1. テンプレトファルmatlabroot/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.cを編集し,低水準の通信呼び出しを独自の通信呼び出しに置き換えます。

    1. ファrtiostream_名字. cに変更します(名字を意味のある名前に置き換えます)。

    2. 低水準の通信プリミティブを呼び出す(同じ名前の)関数で,関数rtIOStreamOpenrtIOStreamClosertIOStreamSend,およびrtIOStreamRecvを置き換えます。これらの関数は,rtiostream_interface.cを介して他のエクスタ,ナルモ,ドのモジュ,ルから呼び出されます。詳細にいては,通信程序流API(嵌入式编码)を参照してください。

    3. rtiostreamの実装を,関数rtIOStreamOpenrtIOStreamClosertIOStreamRecvおよびrtIOStreamSendをエクスポトする共有ラブラリにビルドします。

  2. MATLAB®の関数墨西哥人を使用して,カスタマesc escズされた実行可能なmexファesc escルをビルドします。墨西哥人呼び出しの例にいては,ext_comm和ext_serial_win32墨西哥文件をリビルドするMATLABコマンドを参照してください。

    機能を保持する場合は,既存のext_comm墨西哥ファ苹果苹果ルを置き換えないでください。代わりに与产出オプションを使用して新しい実行可能ファ▪▪ルに名前を付けます(たとえばmy_ext_comm)。詳細にいては,墨西哥人を参照してください。

  3. 新しいクラ转换器アントトランスポ转换器ト金宝app層をSimulinkソフトウェアに登録します。これにより,[コンフィギュレションパラメタ]ダアログボックスの[@ @ @ @ @ @ @ @ @ @ @ @]ペ▪▪ンを使用してモデルのトランスポ▪▪トを選択できるようになります。詳細にいては,カスタムクラアント(ホスト)を参照してください。

エクスタナルモドのmexファルをリビルドするためのサンプルコマンドをext_comm和ext_serial_win32墨西哥文件をリビルドするMATLABコマンドに示します。

ext_comm和ext_serial_win32 MEX-FilesをリビルドするMATLABコマンド

以下の表は,pcおよびUnix®プラットフォ,ムで標準ext_commモジュ,ルとext_serial_win32モジュ,ルをビルドするコマンドをまとめています。

プラットフォ,ム

コマンド

窗户®, TCP / IP

CD (matlabroot) mex工具箱/编码器/ simul金宝appinkcoder_core / ext_mode /主机/共同/ ext_comm.c...工具箱/编码器/ simul金宝appinkcoder_core / ext_mode /主机/共同/ ext_convert.c...工具箱/编码器/ simul金宝appinkcoder_core / ext_mode /主机/共同/ rtiostream_interface.c...工具箱/编码器/ simul金宝appinkcoder_core / ext_mode /主机/共同/ ext_util.c...-R2018a...-Itoolbox /编码器/ rtiostream / src...-Itoolbox /编码器/ rtiostream / src / utils_host...-Itoolbox /编码器/ 金宝appsimulinkcoder_core / ext_mode /主机/共同/包括...-Irtw / c / src / ext_mode /常见...-lmwrtiostreamutils-lmwsl_services...-DEXTMODE_TCPIP_TRANSPORT...-DSL_EXT_DLL与产出my_ext_comm

メモ

関数rtiostream_interface.cはrtiostream_shared_libをlibmwrtiostreamtcpipとして定義し,動的にMathWorks TCP/IPrtiostream共有ラ@ @ブラリを読み込みます。異なるrtiostream共有ラaapl . exeブラリを読み込む必要がある場合は,このファaapl . exeルを変更します。

Linux®, TCP / IP

Windowsコマンドを使用して、以下の変更を行います。

  • -DSL_EXT_DLL-DSL_EXT_SOに変更します。

  • バックスラッシュを通常のスラッシュに置き換えます。

Mac, TCP / IP

Windowsコマンドを使用して、以下の変更を行います。

  • -DSL_EXT_DLL-DSL_EXT_DYLIBに変更します。

  • バックスラッシュを通常のスラッシュに置き換えます。

Windows:シリアル

CD (matlabroot) mex工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \ \常见\ ext_comm.c...工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \ \常见\ ext_convert.c...工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \主机\系列\ ext_serial_transport.c...工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \主机\系列\ ext_serial_pkt.c...工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \主机\系列\ rtiostream_serial_interface.c...工具箱\编码器\ simul金宝appinkcoder_core \ ext_mode \ \常见\ ext_util.c...-R2018a...-Itoolbox \编码器\ rtiostream \ src...-Itoolbox \编码器\ rtiostream \ src \ utils_host...-Itoolbox \编码器\ 金宝appsimulinkcoder_core \ ext_mode \主机\常见...-Itoolbox \编码器\ 金宝appsimulinkcoder_core \ ext_mode \ \常见\包括...-Irtw \ c \ src \ ext_mode \常见...-Irtw \ c \ src \ ext_mode \系列...-lmwrtiostreamutils-lmwsl_services...-DEXTMODE_SERIAL_TRANSPORT-DSL_EXT_DLL...与产出my_ext_serial_comm

メモ

関数rtiostream_interface.cはrtiostream_shared_libをlibmwrtiostreamserialとして定義し,動的にMathWorksシリアルrtiostream共有ラ@ @ブラリを読み込みます。異なるrtiostream共有ラaapl . exeブラリを読み込む必要がある場合は,このファaapl . exeルを変更します。

Linux:シリアル

Windowsコマンドを使用して、以下の変更を行います。

  • -DSL_EXT_DLL-DSL_EXT_SOに変更します。

  • バックスラッシュを通常のスラッシュに置き換えます。

Mac,シリアル

Windowsコマンドを使用して、以下の変更を行います。

  • -DSL_EXT_DLL-DSL_EXT_DYLIBに変更します。

  • バックスラッシュを通常のスラッシュに置き換えます。

メモ

墨西哥人には,matlab APIでサポトされているコンパラが必要です。墨西哥人関数の詳細にいては,墨西哥人のリファレンスペ,ジと外部プログラミング言語およびシステムとmatlabの統合を参照してください。

カスタムクラアント(ホスト)

金宝app仿真软件ソフトウェアを使用してカスタムクライアントのトランスポートプロトコルを登録するには,MATLABパス上のsl_customization.mファ@ @ルに次の形式のエントリを追加しなければなりません。

函数sl_customization(cm) cm. extmodetransport .add('stf. txt ')tlc', 'transport', 'mexfile', 'Level1');%——sl_customization的结束

ここで

  • 月31.tlcは,トランスポ,トが登録されるシステムタ,ゲットファ,ルの名前です(“grt.tlc”など)。

  • 运输はトランスポ,トの名前です。[コンフィギュレションパラメタ]ダアログボックスの[@ @ @ @ @ @ @ @ @ @ @ @]ペereplicationンの[トランスポ,ト層]メニュに表示されます(“mytcpip”など)。

  • mexfileは,トランスポ,トの関連する外部,ルの名前です(“ext_mytcpip_comm”など)。

追加のcm.ExtModeTransports.add行を増やすことにより,複数のタ,ゲットまたはトランスポ,トを指定することができます。次に例を示します。

函数sl_customization(cm) cm. extmodetransport .add('grt. extmodetransport .add)tlc', 'mytcpip', ' ext_mytcppip_comm ', 'Level1');cm.ExtModeTransports.add(“接受方。tlc', 'mytcpip', ' ext_mytcppip_comm ', 'Level1');%——sl_customization的结束

トランスポ,ト登録情報を含むsl_customization.mファイルをMATLABパス上に配置すると,カスタムクライアントのトランスポートプロトコルが連続する仿真软件セ金宝appッションごとに登録されます。トランスポトの名前は[コンフィギュレションパラメタ]ダアログボックスの[@ @ @ @ @ @ @ @ @ @ @ @]ペereplicationンの[トランスポ,ト層]メニュ,に表示されます。モデルに対するトランスポートを選択すると,次の図に示すように,関連する外部インターフェイス墨西哥人ファイルの名前が,編集不可の[mexファemailル名]フィ,ルドに表示されます。

カスタムサバ(タゲット)のトランスポトプロトコルの作成

matlabroot/工具箱/编码器/ rtiostream / src /rtiostream.hの関数プロトタ@ @プrtIOStream *は,サーバー(ターゲット)側とクライアント(ホスト)側両方のトランスポート層の関数に対して,呼び出しインターフェイスを定義します。

  • Tcp / ip実装は,matlabroot/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.cです。

  • シリアル実装は,matlabroot/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.cです。

メモ

matlabroot/ rtw / c / src / ext_mode /共同/ext_svr_transport.hの関数プロトタ@ @プExt *は,matlabroot/ rtw / c / src / ext_mode /共同/rtiostream_interface.cまたはmatlabroot/ rtw / c / src / ext_mode /串行/rtiostream_serial_interface.cで実装されています。ほとんどの場合,カスタムtcp / ipまたはシリアルトランスポ,ト層を使用するために,rtiostream_interface.cまたはrtiostream_serial_interface.cを修正する必要はありません。

低水準TCP / IPトランスポートプロトコルまたはシリアルトランスポートプロトコルのサーバー(ターゲット)側を実装するには,次の手順に従います。

  1. テンプレ,トmatlabroot/工具箱/编码器/ rtiostream / src / rtiostreamtcpip /rtiostream_tcpip.cまたはmatlabroot/工具箱/编码器/ rtiostream / src / rtiostreamserial /rtiostream_serial.cを編集し,低水準の通信呼び出しを独自の通信呼び出しに置き換えます。

    1. ファrtiostream_名字. cに変更します(名字を意味のある名前に置き換えます)。

    2. 低水準の通信ドラバを呼び出す(同じ名前の)関数で,関数rtIOStreamOpenrtIOStreamClosertIOStreamSendおよびrtIOStreamRecvを置き換えます。

      rtiostream.hで定義した関数を実装し,実装はそのファaaplルで定義したプロトタaaplプに準拠しなければなりません。詳細は元のrtiostream_tcpip.cまたはrtiostream_serial.cを参照してください。

  2. トランスポート層のエクスターナルモードのソースファイルをモデルのビルドプロセスに組み込みます。コ,ド生成後のコマンドまたはフック関数before_makeなどのビルドプロセスのメカニズムを使用して,トランスポートファイルをビルドプロセスで使用可能にします。ビルドプロセスのメカニズムの詳細にいては,コド生成後のビルドプロセスのカスタマズSTF_make_rtw_hookファ▪▪ルによるビルドプロセスのカスタマ▪▪ズおよびsl_customization.mによるビルド プロセスのカスタマイズを参照してください。

    例:

    • 前の手順で作成したファ@ @ルをビルド情報に追加します。

      路径/rtiostream_名字. c
    • Tcp / ipにいては,次のファルをビルド情報に追加します。

      matlabroot / rtw / c / src / ext_mode /共同/ rtiostream_interface.c
    • シリアルにいては,次のファルをビルド情報に追加します。

      Matlabroot /rtw/c/src/ext_mode/serial/ext_serial_pkt.c Matlabroot /rtw/c/src/ext_mode/serial/rtiostream_serial_interface.c Matlabroot /rtw/c/src/ext_mode/serial/ext_svr_serial_transport.c Matlabroot /rtw/c/src/ext_mode/serial/ext_svr_serial_transport.c

メモ

エクスタ,ナルモ,ドの場合,rtIOStreamRecvがブロック実装ではないことを確認します。そうしないと,ホストが通讯層を通じてデ,タを送信するまで,エクスタ,ナルモ,ドサ,バ,がブロックされる場合があります。

64バト未満のシリアル受信バッファ

シリアル通信では,ターゲットのシリアル受信バッファーが64バイトより小さい場合,以下の手順を実行します。

  1. 以下のマクロを実際のタゲットバッファサズで更新します。

    定义TARGET_SERIAL_RECEIVE_BUFFER_SIZE为64

    以下のファ@ @ルに変更を実装します。

    matlabroot / rtw / c / src / ext_mode /串行/ext_serial_utils.cmatlabroot /工具箱/编码器/ simu金宝applinkcoder_core ext_mode /主机/串行/ext_serial_utils.c
  2. コマンドを実行してext_serial_win32墨西哥ファ苹果苹果ルをリビルドします。ext_comm和ext_serial_win32墨西哥文件をリビルドするMATLABコマンドを参照してください。

関連するトピック