今回の記事ではCodesysのNetwork Variable 機能を使用し、複数のCodesys Runtimeで簡単にデータを交換する方法を1から説明します。また、記事の中で使用したのはWAGO のPFC200とBerghofのRaspberry PI Controllerになります。
さ、FAを楽しもう。
Network Variables?
Network Variablesは、ネットワーク内の異なる PLC 間で交換できます。 変数は、送信者と受信の両方で厳密かつ同一のリストに定義する必要があり、デバイスの 1 つのアプリケーションだけがネットワーク変数を定義できます。 リストは、1 つまたは複数のプロジェクトに含めることができます。
また、Network Variablesは、送信者から受信者への一方向のみのブロードキャストとして送信される。 ただし、デバイスが送信者リストと受信者リストの両方を含むことも可能です。
以下の場合、ネットワーク変数を介したデータ交換はできない可能性があります。
- デバイス(ターゲットシステム)がサポートしていない場合
- ファイアウォールによる通信が遮断されている場合.
- 他のクライアントやアプリケーションが、ネットワーク変数リストのプロパティで設定されているUDPポートを使用している場合
- 送信側デバイスと受信側デバイスごとに複数のアプリケーションがネットワーク変数リストを使用する場合
リテラルまたは定数で定義された制限を持つ配列のみが、Network Variables経由で送信されます。
- “arrVar : ARRAY[0..g_iArraySize-1] OF INT ;” は送信されません。
- “arrVar : ARRAY[0..10] OF INT ;” が送信される。.
注意するのはネットワーク変数の最大サイズは255バイトですが、 ネットワーク変数の数は無制限です。GVLのサイズがネットワーク・テレグラムの最大長を超える場合、データは複数のテレグラムに分割されます。 コンフィギュレーションによっては、データの不整合につながる可能性があります。
さらに、送信側から受信側へのUDPによるデータ転送中、各サイクルにおいて以下の位置またはイベントでデータが失われる可能性があります。つまり、あるサイクルでレシーバーが受信したデータは最新ではなく、古い可能性があります。
- 送信側(ネットワークドライバ、スタック)
- ルーター
- スイッチ
- ネットワークの衝突
- 受信側ネットワーク・ドライバー、スタック)
Implementation
Sender(Wago)
最初にWAGO PFC200 ControllerからNetwork Variable Listを作成し、ネットワークにあるCodesys Runtimeにデータを送信するようにしましょう。
WAGO PFC200 ControllerのプロジェクトからApplication>Add Object>Network Variable List(Sender)でNetwork Variable Listを追加します。
こちらはCodesysのNetwork Variable List(Sender)の設定画面になります。
Name
こちらはNetwork Variables List名になります。
Task
こちらは送信する変数を制御する現在のアプリケーションのタスクになります。
注意するのはCODESYSは常にタスク・サイクルの最後に変数を送信します。
Network Type
次はNetwork typeを設定します。Network Variablesのデータ交換はUDPのみになります。
Setting
次はSettingsボタンをクリックします。
Network Variablesのデータ交換先のPort番号やIP アドレスを設定します。
Port:CODESYSが他のネットワークユニットとのデータ交換に使用するポートの番号で、デフォルト値は1202になります。注意するのはネットワーク内の他のノードも同じポートを定義する必要があり、プロジェクトで複数のUDP接続が定義されている場合、すべての設定のポート番号はこの値に合わせてください。
Broadcast Adr: デフォルト値は255.255.255.255で、すべてのネットワークユニットとデータ交換が行われることになります。例えば”197.200.100.x “の範囲のIPアドレスを持つすべてのノードと通信する場合、197.200.100.255しておきましょう。
下図の例では192.168.13.40のようにCodesys Runtime Targetを指定することができます。
また、192.168.13.255のようにBroadcastを設定できます。
Listidentifier
こちらは network variable listの識別IDに使用し、交換するデバイスが送信側と受信側である場合、異常動作を防ぐために変数リスト識別子は一意にする必要があります。Variable List識別子は、GVLオブジェクトのプロパティダイアログで定義します。
今回Wagoー>BerghofのList Identifierを1に設定します。
Interval
こちらはCODESYSは定義された周期内で変数を送信します。
Done!それでNetwork Variable Listが定義されました。
Variables
次はいつものGlobal Variable Listと同じように変数を定義しましょう。
Receiver(Berghof)
次はWagoが送信したデータをBerghof Controllerを受け取りたいので、Berghof側でもNetwork Variable Listを追加する必要があります。
Berghofのプロジェクト側で右クリック>Add Object>Network Variable List(Receiver)をクリックしましょう。
こちらはNetwork Variable List(Receiver)の設定画面になります。
Name
Network Variable List名を設定します。
Task
TaskはDefaultのままにしましょう。
Sender
Senderはいま追加するNetwork Variable ListはどこのCodesys Runtime送信してきたデータを受信するかを設定します。今回の記事では2つのControllerも同じのプロジェクトなので、SenderのDrop-ListでそのままWAGOのControllerを選びましょう。
Result
Done!Codesys IDEはNetwork Variable List(Sender)側のデータ構造を全部自動的に同期させます。
Sender(Berghof)
次はBerghof側からWAGO Controllerにもデータを送信していきましょう。
Berghofのプロジェクトから>Application>右クリック>Add Obejct>Network Variable List(Sender)をクリックします。
先ほどと同じのNetwork Variable List設定画面が表示されます。
Listidentifier
ここで注意するのはList IdentifierはWAGOのNetwork Variable List(Sender)と被らないようにしてください。
Network Setting
ネットワーク設定は1対1の設定でもよいですし、Boardcastの設定でもOKです。
Done!
Variables
そのあとはいつもの通りに変数を定義します。
Wago(Receiver)
最後はWAGO側がBerghofのControllerから送信したNetwork Variableを受け取る設定を行います。
WAGO Controller側を右クリック>Add Object>Network Variable List(Receiver)を選択します。
先ほど説明したNetwork Variable Listと同じ設定画面が表示されます。
BerghofのNetwork Variable List(Sender)の変数リストにも同期されました。
Program(WAGO)
WAGO側のデータをNetwork Variable Listに書き込みます。
OutData[0].15:=bPlus; NVL_Sender.SendBytes[0]:=16#AB; NVL_Sender.SendBytes[99]:=16#FD; |
Program(Bergof)
Berghof側にもデータをNetwork Variable Listに書き込んでみましょう。
NVL_Sender.sendData[0]:=1234.5; NVL_Sender.sendData[3]:=5.24521; |
Result
Done!Wago PFC200とBerghof ControllerがNetwork Variable Listでデータ交換できるようになりました。