8.2. ADS通信#
TwinCATの各モジュール(TwinCAT PLC、ユーザーHMIなど)を独立したデバイスとして扱うことができます。各タスクには、それぞれ対応するソフトウェアモジュール(「サーバー」または「クライアント」)が存在します。
各サーバとクライアント間は「メッセージルータ」によって、統一されたADS(Automation Device Specification)インターフェースを介してメッセージが交換されます。メッセージルータは、同一TwinCATシステム同士のメッセージ交換と、異なるメッセージルータに対するTCP/IP接続を管理し、相互にメッセージ配信します。

TCPソケットにおけるADSメッセージコマンド#
ADSコマンドにはAMSヘッダと呼ばれるアプリケーション層のメッセージヘッダを持ちます。

AMS Net IDとADSポート#
AMS Net IDは、ADSルータやEtherCATメインデバイスなど、ADSの宛先を示す6byteのアドレスです。

また、ADSルータ内のリアルタイムTwinCATモジュールには、個々にADSポートと呼ばれる固有の番号が割り振られています。たとえばモーション機能であるNC Task SAFであれば 501, PLC機能であれば 851 などです。
コマンドの種別#
ADSのコマンドシーケンスは大きく分けて次の通り2つの方式に分けられます。
- 非同期通信(Read/Write)
クライアントがサーバーにADSリクエストを送信します。クライアントは(ADS確認なしで)動作を継続します。サーバーはADSリクエストを処理し、コールバック(クライアントへのADS確認)によって結果をクライアントに返します。このとき、AMSヘッダの
Inboke Idの部分により元のコマンド正しく処理されたかどうかを判定することができます。- 通知(Notification)
クライアントは、特定のサービスに対するADSリクエストをサーバーに送信して自身を登録します。サーバーは、クライアントがサービスリクエストをキャンセルするまで、コールバック(クライアントへのADS確認)によってクライアントにサービスを自律的に提供します。この通信方式の利点は、クライアントプログラムからの周期的なADSリクエストが発生しないため、ADSプロトコルのオーバーヘッドが少ないことです。
個々のADSコマンドのデータ構成は次のとおりです。
Cmd |
Description |
|---|---|
0x0000 |
Invalid |
0x0001 |
|
0x0002 |
|
0x0003 |
|
0x0004 |
|
0x0005 |
|
0x0006 |
|
0x0007 |
|
0x0008 |
|
0x0009 |
このコマンドでは、変数名を指定するのではなく、Index GroupやIndex Offsetという単位でTwinCAT内のリソースとそのアドレスを指定し、データの送受信を行います。
PLCであればこのページにメモリエリアの解説があります。とくに、変数に対してバイトアドレス単位であるAT%Mやビットアドレス単位であるAT%MXで指定されたアドレスが格納されます。
これらのアドレスは、AT%MやAT%MX等でアドレスを明示しない限りビルドによって変動します。2.0 (Offs: 440006.0)