TCP/IP通信の利用
目的と必要な機器
このドキュメントでは、Aurora Vision StudioとPLCデバイス間でTCP/IP通信を行う実践的な例を説明します。この例では、Aurora Vision Studio 4.11とSIMATIC S7-1200 CPU 1212C AC/DC/RLY(TIA Portal V15使用)を使用しています。理論的な背景については、TCP/IP通信に関する記事をご覧ください。
必要な機器:
- SIMATIC S7-1200コントローラまたはSIMATIC S7ファミリの他のコントローラ
- TIA Portal V15
- Aurora Vision Studio 4.11 Professional以降
概要と最初のステップ
この例では、Aurora Vision StudioからPLCに数値を送信し、PLCがその値の平方根を計算して返すアプリケーションを作成します。アプリケーションはマスター、PLCはスレーブとして設定されます。
最初に、PLCとPCの間でハードウェア接続を行う必要があります。ネットワーク設定については次の章で説明します。
ネットワーク設定
主ネットワーク設定
TIA Portalで新しいプロジェクトを作成し、新しいデバイスを追加をダブルクリックしてデバイスを追加します。ダイアログボックスに表示されるコントローラ一覧から、お使いのコントローラモデル、CPUなどを選択します。設定が完了したらOKボタンをクリックします。


プログラムブロックリストを展開し、Mainアイコンをダブルクリックします。ネットワークビューが表示されるはずです。右側にある通信タブを開き、通信 -> オープンユーザ通信 -> その他にあるTCONアイコンをダブルクリックします。

TCONインストラクションはTCP通信を確立するために使用します。これがネットワークビューに表示されます。TCONを右クリックし、プロパティを選択します。

コンフィグレーションタブで、PCのIPアドレスを設定する必要があります。IPアドレスを確認するには、コマンドプロンプトでipconfigコマンドを使用します。他のパラメータは次の図のように設定します。これらの設定を使用する場合、PLCデバイスのIPアドレスは自動的に設定されます。接続できない場合は、次の章のトラブルシューティングの手順に従ってください。

IPアドレスのトラブルシューティング
前の章の説明どおりにPCのIPアドレスを適切に設定できなかった場合は、以下の手順に従って静的IPアドレスを設定する必要があります。この手順を飛ばしても構いません。
ツールバーからアクセス可能なデバイスを選択して設定ウィンドウを開きます。PG/PCインターフェースの種類としてPN/IEを選択し、PLCに接続されているイーサネットカードを選択します。検索を開始ボタンをクリックし、アクセス可能ノードの一覧からPLCを選んで表示ボタンをクリックします。新しい静的IPアドレスが表示されるので、前の章の手順でそのIPアドレスを使用できます。


PLCプログラムの作成
この章では、TCP/IP通信を確立するPLCプログラムの作成方法について説明します。
すでにネットワークビューにTCON関数ブロックがあるはずです。次に、プロジェクトツリーの新しいブロックの追加をダブルクリックして、ここに示すように変数テーブルを作成します。データブロック(DB)を選択し、以下の画像に示すようにブロックに名前を付けます。

次に、データブロックで変数を定義します。以下の画像に示すように、同じ名前とデータ型を使用してください。新しい行を作成するには、任意の行を右クリックして行の挿入を選択します。このステップでは、開始値の正しい値の設定が重要です。

ネットワークビューでTCONブロックのすべての入出力をラベル付けします。接続のラベル付けには、データブロックからプログラムブロック(たとえばTYCON)に変数をドラッグアンドドロップするか、接続をダブルクリックして表示されるアイコンを選択します。

Mainプログラムに5つのネットワークを追加します。これを行うには、既存のネットワークを右クリックしてネットワークの挿入を選択します。

通信タブから、前の画像にあるように、追加の通信ブロックであるTDISCONを挿入します。すべての接続を以下の画像に示すようにラベル付けします。TCONブロックはTCP/IP接続を確立するために使用され、TDISCONは接続を閉じるために使用されます。

次のステップは、Aurora Vision StudioとPLC間でデータのやり取りを許可することです。メッセージの受信にはTRCVブロックを、Aurora Vision Studioへのメッセージの送信にはTSENDブロックを使用します。追加したブロックに以下の画像に示すようにラベルを付けます。

TCONを使用してTCP/IP経由での接続を開始するには、REQ入力に立ち上がりエッジ信号を使用する必要があります。他の機能ブロックにも同様のことが適用されます(TRCVではEN_R入力に立ち上がりエッジ信号を設定する必要があります)。これらの値を手動で切り替えるには、接続を右クリックして変更を選択します。このサンプルアプリケーションでは、値を手動で切り替えるのを避けるために、自動パルス発生器が使用されます。新しいネットワークを挿入し、タイマー操作フォルダー内の基本命令タブにあるTPブロックを追加します(下の画像)。

次の画像の構成を使用して、適切な信号を生成するネットワークを作成します。

最後のステップでは、例として乗算などのサンプル数学関数を追加してください。この例では、Aurora Vision Studioから受信した数値を二乗し、PLC側で計算された結果をAurora Vision Studioに送り返します。

すべての前のステップが正しく実行された場合、PLCプログラムは準備ができています。プログラムをコンパイルしてデバイスにダウンロードします。変数の現在の状態を確認するには、監視モードをオンにします。


次のステップでは、シンプルなHMIが作成されます。 ControlsタブからNumericUpDownおよびTextBoxコントロールを追加します。NumericUpDownのoutValue出力をWriteRealToBufferのinValue入力(前の図)に、ReadRealFromBufferフィルターの出力outValueをTextBoxコントロールのinTextに接続します。次の図に示すように、NumericUpDown HMIコントロールのプロパティを設定します。

最後のステップでは、以前に追加したコントロールを説明するためにLabelコントロールを使用します。現在のアルゴリズムは次の図に示すようになります。プログラムは現在の状態で動作しますが、次のステップで改善されます。

Main Loopは、常にtrueであるLoopのinShouldLoop入力によって連続的に実行されます。それを変更するには、ImpulseButtonを追加して "切断して終了" と名前を付けます。 Loopフィルターは、true値がinShouldLoop入力に渡されるとループを生成します。 ImpulseButtonのoutValue出力のデフォルト状態はfalseなので、これをLoopフィルターに接続する前に否定する必要があります。 MainLoopマクロフィルター内にCopyObjectフィルターを挿入し、Bool?データ型を設定します。 ImpulseButtonのoutValueをCopyObjectフィルターのinObjectに接続します。 outObject出力を右クリックして、Property OutputおよびNotバリアントを選択します。次に、outObject.Not出力を次の図に示すようにinShouldLoop入力に接続します。

同じImpulseButtonコントロールを使用して、メインタスクでTCP/IP接続を閉じます。上記の説明と図25からの構造を使用して、メインタスクのLoopフィルターを制御します。

アプリケーションはほぼ完成していますが、すべての良好で安定したアプリケーションにはエラーハンドリングが必要です。次の変更では、現在の接続状態(例:接続待ち、接続が有効、接続が切断されたなど)を表示できるようにします。これを行うには、MainLoopマクロフィルターに移動し、プログラムエディタウィンドウで右クリックしてステップマクロフィルターを挿入します。新しく作成されたマクロフィルターを "SetHmiMessage" と名前を付け、新しいString?型の入力を作成します。新しく作成された入力の名前をinMessageとします。このマクロフィルターは、このアプリケーション内のいくつかの場所で使用されます。 MainLoopマクロフィルター内で使用する場合は、マクロフィルターのプロパティにコマンド "Connection is active" を挿入します。

SetHmiMessageマクロフィルターに入り、String?型のCopyObjectフィルターを追加します。新しいLabelコントロールをHMIウィンドウに追加します。デフォルトのテキストを "接続を待機中" に設定します。 CopyObjectフィルターからのoutObjects出力をLabelコントロールのinText入力に接続します。結果は以下の画像のようになります:

現在、接続状態メッセージには "接続を待機中" と "接続がアクティブ" の2つの異なるバリエーションがあります。次に、接続が切断されたときに表示されるメッセージを追加します。これを行うには、MainLoopマクロフィルターのエラーハンドラーを使用する必要があります。プロジェクトエクスプローラーウィンドウに表示されるMainLoopマクロフィルターを右クリックし、「新しいエラーハンドラーの追加...」を選択します。リストからIO ERRORを選択します。次の図に示すように:

新しく作成したエラーハンドラーに入り、SetHmiMessageマクロフィルターを追加します。 inMessage?入力を "接続が切断されました" に設定します。次の図に示すように:

結果は以下の画像のようになります。すべての前のステップが正しく実行された場合、プログラムは問題なく動作するはずです。

エラーが発生するプログラムをテストする場合は、設定でブレークを解除する必要があります。次の画像に示すように、これらの設定で、エラーメッセージが表示されるポップアップウィンドウは表示されません。
