今回の記事ではTwinCAT同士で通信する方法を紹介します。TwinCATではEIPやProfinet、もしくはOPCUAなど様々なOptionがありますが、EtherCAT(EAP)という選択肢もあります。
さ、FAを楽しもう。
EAP?
EtherCATオートメーションプロトコル (EAP) デバイスはイーサネットで接続されたPC間で任意の変数を周期的かつ高度に決定論的に交換することができます。EAPデバイス間の通信はPublisher/Subscriber の原理に従って行われ、EtherCAT Technology Group (ETG) によって規定されています (ETG 1005)。
注意するのは、高度的リアルタイム通信を行うには、TwinCAT EAPデバイスにTwinCAT用リアルタイムイーサネットドライバをインストールする必要があります。
Basic principles
TwinCAT EAPデバイスは、TwinCATコントローラAからTwinCATコントローラBへ、ネットワーク経由で任意の変数のデータ転送を可能にします。これらの変数は通常、機械内の処理動作を制御するために使用されます。そのため、プロセス変数(PV)とも呼ばれます。TwinCAT EAPデバイスの場合、送受信はTwinCATリアルタイムイーサネットドライバがサポートする標準ネットワークアダプターを介して行うことができます。
EAPデバイス間の通信は、Publisher/Subscriberの原則に基づいて行われる。原則として、、PublisherはSubscriberを知らず、受信者が存在するかどうかもまったく知らない。一方、Subscriberと呼ばれるレシーバが存在し、特定のメッセージに関心を持ち、そのメッセージを受信するが、そのメッセージの発信元がどのパブリッシャであるか、そのようなパブリッシャが存在するかどうかはまったく知らないんです。
Communication methods
TwinCAT EAPデバイスは2つの通信タイプをサポートしています:サイクリックなプロセスデータ通信(EtherCATタイプ4)とアサイクリックなEtherCATメールボックス通信(EtherCATタイプ5)です。メールボックス通信では、TwinCAT EAPデバイスはAoEプロトコル(AoE – ADS over EtherCAT)のみをサポートしています。AoEプロトコルの仕様はEtherCAT Protocol Enhancements (ETG 1020)に記載されています。プロセスデータ通信では2つの通信モードがあります:
Pushed Data Exchange mode
このモードでは、EAP送信側は周期的に、またはステータスの変化が検出されたときに、プロセス情報をネットワークに送信します。このモードは、TwinCAT 2のネットワーク変数(NWV)のPublisher/Subscriberの原則に対応します。
Polled Data Exchange mode
EAPクライアントはプロセス情報を含むリクエスト・テレグラムをEAPサーバーに送信し、EAPサーバーはレスポンス・テレグラムでプロセス情報をEAPクライアントに送り返します。
connection types
EAP通信は以下のConenction Typeが対応します。
Unicast:
EAPメッセージはあるエンド・ポイントから別のエンド・ポイントに送信される。
Multicast
EAPメッセージは1つのエンドポイントから他の複数のエンドポイントに送信される。
Broadcast
EAPメッセージは1つのエンドポイントからアクセス可能なすべてのエンドポイントに送信される。
Address Mode
EAP通信は以下はMAC address、AMS NetID、IP Addressが対応します。
EAP performance
TwinCAT EAPデバイスを使用する場合は、使用するネットワークアーキテクチャの時間境界条件を考慮する必要があります:
- 専用スイッチ経由で送信されるネットワーク・アーキテクチャでは(イーサネット・プロトコルなど)、通信サイクルは約10ms以下となります。
- ルータ経由でも送信できるネットワーク・アーキテクチャでは、約 100 ms の通信サイクル・タイムを実現できます。
- 他の通信が並行して行われるネットワークでは、EAP通信のパフォーマンスが損なわれる可能性があります。
Implementation
こちらが今回の構成になります。
IPC1 Side
まずは192.168.13.173.1.1側のIPC2を構築します。
Add EtherCAT
Devices>右クリック>Add New Itemで通信Driverを追加します。
EtherCAT>EtherCAT Automation Protocol(Network Variables)を選び>OKで進みます。
Done!EtherCAT(EAP)が追加されました。
Configure Adapter
AdapterのTabを開き、SearchでIPCのEthernet Adapterを設定します。、
実際のアプリケーションに合わせて適切なInterfaceを設定しましょう。
Done!
Add Publisher
今度はPublisher(送信者)の変数を追加します。先程追加したEtherCAT(EAP)>右クリック>Add New Itemします。
Network Variable Publisherを選び>Okで進みましょう。
Done!Publisherが追加されました。
Configure Connection
次は先程追加したPublisherを開きましょう。Publish Tabでは通信設定を行うことができます。
Sending Option
Sending OptionsではPublisherの送信方式を設定でき、今回はRT-Ethernet(Ther Type 88A4h)を設定します。
Publisherの送信方式にUnicastを設定し、また送信先を設定する必要があります。AMS NetldにはIPアドレスと異なり、そのAMS Netldは受信側のTwinCAT Runtimeになります。
TwinCAT RuntimeのAMS Netldを確認するには、TwinCATアイコンを右クリック>Router>Change AMS Netldをクリックします。
AMS Net ldは192.168.15.99.1.1になります。
ですが、実際設定するのは他のSubscriberのAMS Netldなので、ここでは192.168.15.99.2.1になります。
Add Variable
Publihserをセットアップ完了したら、次はIPC1からPublishする変数を追加します。
先ほどのPublisherを右クリック>Add New Itemします。
Network変数の追加画面が表示されます。
今回は配列を作成するため、Create Array Typeをクリックします。
配列の設定画面が表示されるので、アプリケーションに合わせて設定しましょう。
長さ10のByte配列データ・タイプが定義されました。
それで新しいPublish 変数が追加されました。
Add PLC Project
PLC>右クリック>Add New ItemでPLCプロジェクトを追加します。
Standard PLC Projectを選び>Addでプロジェクトを追加しましょう。
Done!PLCプロジェクトが追加されました。
GVL_Pub
Global Variable ListにProcess Output Dataを追加します。
Program
次は通信確認するためのプログラムを作成します。
GVL_Pub.id1[0]:=1; GVL_Pub.id1[1]:=2; GVL_Pub.id1[2]:=3; GVL_Pub.id1[3]:=4; |
Build
Build>Build Solutionでプロジェクトをコンパイルしましょう。
Link
次は先程追加したPublish 変数をGVLの変数と紐つけましょう。
Active Configuration
Active Configurationをクリックし、一回プロジェクトをRuntimeにDownloadします。
OKで進みます。
OKでTwinCAT RuntimeをRun Modeにソフトします。
Login
LoginでプログラムをDownloadします。
Yesで進みましょう。
Start
最後はStartボタンでRuntimeのプログラムを実行します。
IPC2 Side
Publish側のセットアップが完成したので、次はSubscriber側を設定します。
Add EtherCAT CAT
先ほどと同じVisual Studioプロジェクトにもう1つのTwinCATプロジェクトを追加し、I/O>Devices>Add New Itemで新しい通信Driverを追加します。
EtherCAT>EtherCAT Automation Protocol(Network Variables)を選び>OKで進みます。
Done!
Configure Adapter
AdapterのTabを開き、SearchでIPCのEthernet Adapterを設定します。
実際のアプリケーションに合わせて適切なInterfaceを設定しましょう。
Done!
Protocol
IPC2で設定したNetld IDは192.168.15.99.2.1になります。
Add Subscribers
今度はSubscribersを追加するため、EtherCAT(EAP)で右クリック>Add New Itemします。
Network Variable Subscriberを選び>Okで進みます。
Done!Subscribersが追加されました。
Add Sub Variale
先程追加されたSubscriberを右クリック>右クリック>Add New Itemします。
Netld
こちらはIPC1のAMS Netldに設定します。
Create New Variableをクリックします。
先ほどと同じ操作で長さ10のBytes配列変数を定義しましょう。
Done!
Add PLC Project
PLC>右クリック>Add New ItemでPLCプロジェクトを追加します。
Standard PLC Projectを選び>Addでプロジェクトを追加しましょう。
Done!PLCプロジェクトが追加されました。
GVL_Sub
Global Variable ListにProcess Input Dataを追加します。
Build
Build>Build Solutionでプロジェクトをコンパイルしましょう。
Link
次は先程追加したSubscribe 変数をGVLの変数と紐つけましょう。
Active Configuration
Active Configurationをクリックし、一回プロジェクトをRuntimeにDownloadします。
OKで進みます。
OKでTwinCAT RuntimeをRun Modeにソフトします。
Login
LoginでプログラムをDownloadします。
Yesで進みましょう。
Start
最後はStartボタンでRuntimeのプログラムを実行します。
Result
IPC1のPublish状態を確認しましょう。
VarState=0なので、Messageが送信されていますね。
PublisherのFrameState変数も確認しましょう。
現在値は0で、つまりエラーがありません。
次はIPC1のPublisherがPublishしたデータを確認します。
下図のように、01 02 03 04のように出力します。
最後はIPC2のSubscribe側がPublishされたデータを受信したかを確認します。
Done!
Point1
Publishするとき、Variable Idという設定があり、このIDは被らないように設定してください。
IDを変更すると、Publishする変数名も自動的に変更します。
Point2
今回記事では手動で変数を設定しましたが、実際TwinCATでは”Browse for Computer”という機能を使って、ネットワークにあるPublisherを検索できます。
SubscribeしたいTwinCAT Runtimeを選択します。
Done!
Subscribeしたい変数を選び>OKで進みましょう。
Yesで確定します。
Point3
今回の記事で設定したPublisher NetldをEtherCAT EAPのNetldを必ず実機に合わせてください。