LabVIEW基本TCP/IP通信

概要

この記事では、TCP/IP通信の基本に関する概要を説明します。LabVIEWに関する前提知識が必要となります。LabVIEWの初心者である場合は、最初にこのLabVIEWチュートリアルを参照することで、この記事をよりよく理解することができます。

内容

TCP通信プロトコル

インターネットプロトコル (IP)、ユーザデータグラムプロトコル (UDP)、および転送制御プロトコル (TCP) は、ネットワーク通信の基本ツールです。TCP/IPという名前は、最もよく知られている2つのインターネットプロトコル群である転送制御プロトコル(TCP)およびインターネットプロトコル(IP)から来ています。TCP/IPを使用して、単一ネットワークまたは相互接続されたネットワーク(インターネット)上で通信を行うことができます。

TCP/IP通信のユーザインタフェースは、信頼できるネットワーク通信を確保するための複雑性を感じさせないシンプルな作りになっています。TCP/IP通信の仕組みについては、「LabVIEWヘルプ」の「TCP/IPおよびUDPでLabVIEWを使用する」を参照してください。 

LabVIEWでのTCP通信には、機能→データ通信→プロトコル→TCPパレットにあるTCP/IP機能を使用してください。DAQ、計測器、ファイルI/Oの通信と同様に、処理には接続開始、情報の読み書き、および接続終了が含まれます。

ほとんどのI/O通信では、プロセッサは常にクライアントであり、ディスクドライブサーバ、外部計測器サーバ、またはDAQボードサーバへの接続を開始します。TCP/IP接続では、コンピュータはクライアントまたはサーバとして機能します。以下のブロックダイアグラムは、「TCP接続を開く」を使用してリモートサーバへの接続を開始するクライアントアプリケーションを示しています。サーバ、すなわちデーモンはリモート接続をリスンし、適切に応答します。

TCP接続を開く

LabVIEWユーザは、TCP/IP通信用のカスタムアプリケーションを開発できます。プログラマはクライアントとサーバの両方を開発する責任があります。 

誰でもサーバへの接続を開始できるため、サーバのアクセス制御が必要になる場合があります。以下のブロックダイアグラムは、サーバが「TCPリスン」VIのリモートアクセスの出力値を使って、リモートクライアントがサーバへのアクセス権を持っているかどうかを判断する方法を示しています。

通信アプリケーション開発する

アプリケーションの多くは、1つの値の読み書きだけを行うわけではありません。通信はプロトコルを含む、進行中のプロセスです。たとえば、クライアントは以下の4つのコマンドを8ビット整数でサーバに送信したと想定します。

1 = データを収集して確認
2 = データを送信
3 = ステータスを取得
4 = 接続を閉じる

以下の図*は、サーバがこれらのコマンドをどのように受信するかを示しています。基本的なTCP機能は同じですが、周囲のコードにより複雑な接続と堅牢な通信が可能になります。

  • WhileループがVIの残りの部分を囲みます。これにより、各接続が閉じるたびにVIを再起動しなくても、複数の連続した接続を処理することができます。VIは、複数の同時接続を処理できません。 
  • 外部のケースストラクチャが、接続が有効かどうかを判断します。 

    • 有効な接続が確立されていない場合には、何も起こりません。 
    • 有効な接続が行われると、VIはWhileループに入り、TCP/IPポートから1バイトを読み取ります。このバイトはクライアントの1~4のコマンドを保持します。
    • 接続は有効で、読み取りタイムアウトの時間内にコマンドが受信されなかった場合、内部ケースストラクチャのデフォルトケースが内部のWhileループの継続端子にTRUE値を送信し、接続をアクティブな状態に保ちます。
       
内部ケースストラクチャのデフォルトケースがTRUE値を送信する


以下のブロックダイアグラム*は、内部ケースステートメントの他の4つのケースを示しています。各ケースは、サーバが送信する特定のコマンドを処理します。各ケースは、ループを継続するかどうかを決定する継続端子に情報を送信します。特に、Quit (終了) ケースは常にFALSEの値を返します。ループを終了すると、サーバはクライアントとの接続を閉じます。

終了ケースは常にFALSEの値を返す終了ケースは常にFALSEの値を返す 
終了ケースは常にFALSEの値を返す終了ケースは常にFALSEの値を返す 


このタイプのサーバアーキテクチャを使用することで、より複雑なネットワーク通信手順に対応するための柔軟なサーバを開発できます。開発するプロトコルは、前述の例よりも複雑な場合があります。

*これらの画像は旧バージョンのLabVIEWのものです。データワイヤと機能アイコンの色がバージョンと一致しない場合があります。コードの構造は引き続き適用可能です。

Was this information helpful?

Yes

No