この記事は EtherCATについて語る Advent Calendar 2019 の4日目です。
昨日は@nonNoiseさんの EtherCATスレーブに使える半導体 (1) でした。
さて、11月30日(土)に開催されたIoTつくるよ!2に出展し、「ArduinoでEtherCATのデモ」を展示してきました。すこし場違いかと懸念してましたが、思いのほか反響をいただきました。
よくいただいた質問と回答をここにまとめます。その場では正確にお答えできなかったものが多いです。スミマセン。帰ってから調べました。間違いがあったらご指摘ください。
Q1. 接続できるスレーブは何台まで?
EtherCATの規格では最大65535台までです。これは16ビットのアドレスでスレーブを識別するためです。
ちなみに、SOEMの実装ではデフォルトで最大200台までとなっています。これはスレーブを静的な配列変数で管理するというわりと残念な実装になっているためです。私がArduinoに移植したSOEMではRAM容量の都合で最大64台までに制約しています。
Q2. 通信周期は最速でどれくらい?
サイクルタイム(データ更新周期)は最小125usecとされます。EtherCATは100Base-TXのEthernetにもとづいており、最大1518バイトのEthernetフレームを100Mbpsで伝送するには121.44usecを要するのでこれは理論限界に近い値です。
ただし1518バイトものフレームを使うことは実際には稀であり、扱うデータ量が少なければさらに短いサイクルタイム(最速で12.5usec)も実証されているそうです。 (こちらの記事を参照)
ちなみに今回の私のデモでは通信周期は実測で約1.3msecでした。かなり遅いですが、どこがボトルネックかは未調査です。
Q3. IPアドレスが無いってどういうこと?
私たちがふだんパソコン等でEthernetを使うときはたいていIPプロトコルを用いており、Ethernetフレームの上にIPパケットが載っています。IPアドレスというのはIPプロトコルにおける概念です。それに対してEtherCATではIPプロトコルとは異なるプロトコルを用いているので、IPアドレスという概念は存在しません。
ちなみにIPプロトコルではEthernetフレームのタイプ番号が0800hですが、EtherCATプロトコルではタイプ番号が88A4hです。
Q4. IPアドレスが無いならスレーブの識別はどうするの?
EtherCATはスレーブを数珠つなぎ(デイジーチェーン)に接続するので、マスターに近い方から順に1,2,3,…と番号を割り振ることができます。これをオートインクリメントアドレスと言います。物理的な位置にもとづくアドレスです。
マスターは起動時にオートインクリメントアドレスを用いて各スレーブと通信し、各スレーブに固定のアドレスを割り振ります。このアドレスをコンフィギュアドアドレスと言います。
ちなみに今回の私のデモはごく簡単なシステムのため、オートインクリメントアドレスだけを使って処理しており、コンフィギュアドアドレスは使いませんでした。「1台目のスレーブからポテンショメータの値を取得して、2台目のスレーブにサーボの角度を設定する」と言った具合です。
Q5. 距離はどれくらい届くの?
ノード間の距離は100m以内です。これはEtherCATの規格というより、100Base-TXの規格で規定されるものです。
ちなみに、今回のデモ展示用に長さ約10cmの短いLANケーブルを自作しましたが、LANケーブルは短すぎると良くないという噂を聞きました。理由が不明で、根拠となる規定も見つけられませんでした。真相はいかに?
Q6. PoE (Power over Ethernet) には対応するの?
EtherCATでは、従来からあるPoEとは異なる電力供給技術として、EtherCAT Pという規格を定めています。PoEは一般的なCAT5eのLANケーブルを用いて、48V, 15.4Wの電源を供給します。それに対してEtherCAT Pでは、独自仕様のケーブルを用いて、2系統の24V, 3Aの電源を供給し、これにEtherCATの信号を重畳します。
また、電力ケーブルと通信ケーブルを複合したこれまた独自仕様のケーブルにより、最大で630 V AC / 850 V DC, 64Aの電源供給とEtherCAT通信を「1本のケーブル」でおこなうことができます。
(見たことないから知らんけど。)
Q7. EtherCATはオープン規格なの?
オープン規格と言いつつ、仕様書をダウンロードするにはETG (EtherCAT Technology Group)に入会する必要があります。ETGへは無料で入会することができますが、法人でないと入会できないようです。
ちなみに私の所属する組織はETGメンバーではありません。つまり私はモグリです。