TCP/IPおよびUDPでLabVIEWを使用する



LabVIEW 2018ヘルプ


発行年月: 2018年3月
製品番号: 371361R-0112
製品情報を参照

ダウンロード (Windowsのみ)


LabVIEW 2016ヘルプ
LabVIEW 2017ヘルプ
LabVIEW 2018ヘルプ
LabVIEW 2019ヘルプ
LabVIEW 2020ヘルプ

インターネットプロトコル(IP)、ユーザデータグラムプロトコル(UDP)、および転送制御プロトコル(TCP)は、ネットワーク通信の基本ツールです。TCP/IPという名前は、よく知られている2つのインターネットプロトコル群である転送制御プロトコル(TCP)およびインターネットプロトコル(IP)から来ています。

TCP/IPを使用して、単一ネットワークまたは相互接続されたネットワーク上で通信を行うことができます。個々のネットワークが地理的に大きく離れていても通信は可能です。TCP/IPは、ネットワークまたはインターネットに接続しているコンピュータから他のコンピュータにデータを転送します。TCP/IPはほとんどのコンピュータで使用可能なため、多種多様なシステム間で情報を転送することができます。

LabVIEWとTCP/IP

TCP/IPプロトコルは、すべてのプラットフォームのLabVIEWで使用することができます。LabVIEWには、クライアントまたはサーバVIを作成するのに使用することができる、TCPとUDP VIおよび関数が含まれています。

IP

IPは、コンピュータ間のデータを移動する低レベルサービスを実行します。IPは、データグラムと呼ばれるコンポーネントにデータをまとめます。データグラムには、データおよび送信元と送信先アドレスを示すヘッダが含まれています。IPは、データグラムがネットワークまたはインターネットを介してデータを指定された送信先アドレスに送信する正しいパスを決定します。

IPは、送信を保証できません。実際に、IPはデータグラムが転送中に複製された場合に、単一のデータグラムを数回送信する場合があります。プログラムは、IPを使用することはほとんどありませんが、TCPまたはUDPを代わりに使用します。

UDP

UDPは、コンピュータ上のプロセス間での簡単で低レベルな通信を提供します。プロセス間の通信は、送信先のコンピュータやポートにデータグラムを送信することによって行われます。ポートは、データを送信する場所です。IPは、コンピュータ間の配信の処理を行います。データグラムが送信先のコンピュータに到着すると、UDPはデータグラムを送信先ポートに移動します。送信先ポートが開かれていない場合、UDPはデータグラムを破棄します。UDPはIPと同じ配信問題を共有します。

UDPは、信頼性が重要でないアプリケーションで使用します。たとえば、あるアプリケーションで送信先に頻繁に情報データを転送しているため、データの一部のセグメントが失われても問題にならない場合などです。

LabVIEWでUDPを使用する

UDPはTCPのような接続ベースのプロトコルではないため、データを送信または受信する前に送信先と接続を確立する必要はありません。代わりに、各データグラムを送信するときにデータの送信先を指定します。オペレーティングシステムは、転送エラーを報告しません。

UDPを開く」関数を使用してUDPソケットをポート上で開きます。同時に開かれるUDPポートの数はオペレーティングシステムによって異なります。「UDPを開く」関数は、UDPソケットを固有に識別するネットワーク接続Refnumを返します。後続のVI呼び出しでこのソケットを参照するには、この接続refnumを使用します。

UDP書き込み」関数を使用して送信先にデータを送信し、「UDP読み取り」関数を使用してデータを読み取ります。各書き込み操作には、送信先アドレスとポートが必要です。各読み取り操作には、送信元アドレスとポートが含まれます。UDPは、送信する各コマンドに指定されたデータグラムバイトを保持します。

UDPデータグラムのサイズは操作環境によって異なりますが、最大値は65535バイトです。UDPを使用してデータグラムを送信する場合、サイズを1 KB未満にして基本のIPパケットが通信中に分割され再度アセンブリされる可能性を最低限に抑えます。そうしない場合、パケットを損失する可能性が増大します。

ポート上の通信がすべて完了したら、「UDPを閉じる」関数を使用してシステムのリソースを解放します。

UDPマルチキャスト

UDP関数を使用して、単一のクライアント(シングルキャスト)またはブロードキャストを介してサブネット上のすべてのコンピュータと通信することができます。複数の特定コンピュータと通信する場合には、各クライアントに対してUDP関数を繰り返し構成する必要があります。こうすることで、データのコピーがLabVIEWによって各クライアントに送信され、データを受信したいクライアントのリストを維持するため、ネットワークトラフィックの複製が作成されます。

単一の送信側と複数のクライアントの間の通信にマルチキャストを使用すると、送信側がクライアントのリストを維持したり、データのコピーを各クライアントに送信せずにすみます。マルチキャストによりブロードキャストされるデータを受信するには、すべてのクライアントはマルチキャストグループに参加する必要があります。送信側は、データを送信するためにグループに参加する必要はありません。送信側は、マルチキャストグループを定義するマルチキャストIPアドレスを指定します。マルチキャストIPアドレスの範囲は、224.0.0.0239.255.255.255です。クライアントがマルチキャストグループに参加する場合、クライアントはグループのマルチキャストIPアドレスにサブスクライブします。マルチキャストグループをサブスクライブすると、クライアントはマルチキャストIPアドレスに送信されたデータを受信します。

LabVIEWでマルチキャストを行うには、「UDPマルチキャストを開く」VIを使用して、UDPデータの読み取り、書き込み、または読み書きが可能な接続を開きます。そして、データ書き込みの場合は「TTL」(有効期間)を、データ読み取りの場合は「マルチキャストアドレス」を、データ読み取り/書き込みの場合は「マルチキャストポート番号」を指定します。デフォルトのTTLは1です。これは、LabVIEWがローカルサブネットのみにデータグラムを送信することを意味します。マルチキャストのデータグラムがルータで受信されると、データグラムの有効期間が減分されます。TTLが1より大きい場合は、ルーターはデータグラムを他のルーターに転送します。次の表は、指定したTTLパラメータの値によってマルチキャストのデータがどのように動作するかを示します。

0 データグラムはホストコンピュータに残ります。
1 データグラムは、そのIPアドレスにサブスクライブする同一ローカルサブネット上のすべてのクライアントに送信されます。ハブ/リピータおよびブリッジ/スイッチはデータグラムを転送します。TTLが1の場合、ルータはデータグラムを転送しません。
>1 データグラムが送信され、ルータによってTTL-1レイヤに転送されます。

UDPマルチキャスティングの使用例は、以下のサンプルVIを参照してください。

  • UDP Multicast – Receiver VI: labview\examples\Data Communication\Protocols\UDP\UDP Multicast\UDP Multicast.lvproj

  • UDP Multicast – Sender VI: labview\examples\Data Communication\Protocols\UDP\UDP Multicast\UDP Multicast.lvproj

TCP

TCPは、エラー、損失、または重複が生じることなくデータを連続して送信できるため、ネットワーク上での安定した転送を保証します。TCPが確認応答を受信するまでデータグラムは再送信されます。

LabVIEWでTCPを使用する

TCPは接続ベースのプロトコルであるため、データを転送する前にサイト間で接続を確立する必要ります。データ転送はクライアントサーバ間で発生します。TCPでは、同時に複数の接続を確立することができます。

接続は、接続要求を受けるか、特定アドレスに対して能動的に接続を要求することで開始されます。TCP接続を確立するには、アドレスとそのアドレスのポートを指定する必要があります。1つのアドレスに指定される複数のポートは、それぞれ異なるサービスに使用されます。

特定のアドレスとポートでの接続を能動的に確立するには、「TCP接続を開く」関数を使用します。接続が正常に確立されると、関数は、その接続を固有に識別するネットワーク接続Refnumを返します。後続のVI呼び出しで接続を参照するには、この接続refnumを使用します。

以下の方法で、接続の受信を待機することができます。

  • TCPリスン」VIを使用してリスナを作成し、指定されたポートでTCP接続が受け入れられるのを待機します。接続が正常に確立されると、VIはリモートTCPクライアントの接続refnum、アドレス、そしてポートを返します。
  • TCPリスナを作成」関数を使用してリスナを作成し、「TCPリスナを待機」関数を使用して新規接続を待機して、受け入れます。「TCPリスナを待機」関数は、関数に配線したリスナIDと同じリスナIDを返します。新規接続の待機が終了したら、「TCP接続を閉じる」関数を使用してリスナを閉じます。リスナからの読み取りや書き込みはできません。

2番目の方法では、「TCP接続を閉じる」関数を使用してリスン操作をキャンセルすることで、タイムアウトを使用せずに接続を待機し、他の条件がTRUEになった場合にリスンをキャンセルすることができるため便利です。「TCPリスン」VIはいつでも閉じることができます。

接続を確立したら、「TCP読み取り」関数および「TCP書き込み」関数を使用して、リモートアプリケーションにデータを読み書きします。

「TCP接続を閉じる」関数を使用して、リモートアプリケーションへの接続を切断します。未読のデータが残っている状態で接続が閉じられた場合、データが消失することがあります。接続を閉じるタイミングは、上位レベルのプロトコルで決定してください。

TCPとUDPの比較

TCPは、信頼性のあるデータ転送が必要な場合に適したプロトコルです。UDPは、パフォーマンスの優れた非接続プロトコルですが、データ転送の信頼性が保証されません。

タイムアウトとエラー

ネットワークアプリケーションを構築する際、エラーが発生した際にどのような処理が必要かよく検討します。たとえば、サーバがクラッシュした場合に各クライアントVIがどのように処理するかを判断します。

1つの解決策として、各クライアントVIにタイムアウトを実装したことを確認します。特定時間経過後に、期待通りの結果が得られなかった場合でも、クライアントは実行を継続するとします。その場合、クライアントは接続を再確立するか、エラーを報告することができます。必要な場合は、クライアントVIによってアプリケーションを閉じることができます。

TCPとUDPのサンプル

TCPおよびUDP VIと関数を使用するサンプルについては、以下のVIを参照してください。

  • labview\examples\Data Communication\Protocols\TCP\Simple TCP\Simple TCP.lvproj

  • labview\examples\Data Communication\Protocols\UDP\Simple UDP\Simple UDP.lvproj

「データ通信方法」ホーム



この記事は役に立ちましたか。

役に立たなかった