CODESYSでEtherCAT Masterを構成する
今回の記事は前回の記事の続きとなります。
今回はEtherCAT側をRaspberry Pi上に構成していきます。
環境
- Windows11
- CODESYS CODESYS V3.5 SP17 Patch 2
- CODESYS-Control-for-Raspberry-Pi 4.4.0.0
- Raspberry Pi 4(Bullseye)
EtherCATとは?
ドイツのベッコフが開発したオープンな産業用通信規格です。
ETG(EtherCAT Technology Gloup)で仕様や認証に関しての情報が管理されているようです。
ですので、例えばEtherCATの仕様書が見たい場合はETGへの加盟が必要になりますし、EtherCATデバイスを作って販売する前にはETGのコンフォーマンステストツールを使って社内テストに合格することが必須となります。
これに合格することで製品にコンフォーマンステスト済みロゴを使用でき、ETGで定めたテストによって品質を保証されたEtherCATデバイスとしての販売が可能となります。
なお、法人単位ですがETGへの加盟は無料です。
構成要素
EtherCATはEtherCATネットワークを制御するマスターと、それに従属して動作するスレーブで構成されます。
また通信はフィールドバス上のプロセスデータ(アナログセンサデータやエンコーダなどのデジタルデータなどの入出力情報が連結されたもの)をIEEE 802.3標準Ethernetフレームに載せてやりとりされます。
よって、マスター側は既存のEthernetの資源を転用することができますので一般的なPCにもついているRJ-45ソケットがあれば、ソフトウェア(ドライバ)のインストールでLANケーブルを通じてスレーブデバイスと通信することができます。
ただし、スレーブの場合は専用のコントローラが必要になります。
例えば、通常のEthernetの場合下記の接続になりますが
EtherCATスレーブの場合は下記のように、専用のスレーブコントローラIC(ESC)と
スレーブ情報が読み書きされるEEPROM(SSI)で構成されます。
ESC: EtherCAT Slave Controller
SSI: Slave Information Interface
EtherCATスレーブに使用可能なICは以下の記事でまとめてくださっています。
PHY内臓のICが使いやすそうですね。
マイコンがスレーブICにくっついてきて都合が良いか悪いかは、自分の開発環境によるかもしれません。
なお、スレーブデバイスは有志が評価キットを作ってくれているのもあります。
ただ、Socket通信の制約上、WindowsやMacでは動作できないそうです。
Wiresharkで使用されるパケットキャプチャ(Npcapなど)等の特殊なドライバが必要なようです。
基板としては、ESCの一つであるLAN9252とEEPROMが載っていますので評価目的のスレーブとしては十分ですね。
通信方式
また、EtherCAT通信ではハンドシェイクを必要としないためオーバヘッドが少なく高速通信が可能です。
ハンドシェイクを不要にしている理由はその通信方式にあります。
EtherCATの通信方式はマスターからのパケットが各スレーブに順番に渡されていき、折り返してマスターに戻るというものになります。
これを1サイクルとし、全入出力処理を終えます。
同期方式
EtherCATの同期方法は3パターンあります。
- FreeRun
マスターとは関係なくスレーブのローカルタイマーでトリガーされる。
マスターの通信フレームとは非同期。 - SM同期
マスターからの新しいプロセスデータ受信時にトリガーされる。
マスターの通信フレームと同期。 - DC同期
マスターからの新しいプロセスデータ受信時にトリガーされる。
各スレーブへの通信遅延をDC(Distributed Clock)により補正する。
最初のスレーブがマスタークロックとなり行き帰りで遅延を計測し、ジッタを補正する。
周期的に行われるプロセスデータ通信PDO(Process Data Object)と非周期的に行われるメールボックスデータ通信SDO(Service Data Object)でデータのやり取りがされる。
DC同期方式はEtherCATの特徴的な機能ですね。
EtherCATの通信同期方式に関しては以下の記事が絵つきでとてもわかりやすかったです。
EtherCAT参考記事
用語でサラッと理解するには以下の記事が参考になりました。
フィールドバスの歴史から理解するには以下の記事が参考になりました。
CODESYSでのEtherCAT Masterの実装
Masterと接続するSlaveデバイスがないとEtherCATネットワークを構成できないので、Slaveデバイスを探します。
オムロン製センサ通信ユニットはAmazonでも入手することができそうです。=>Link
値段もお手頃…とは言い難いですが、スレーブデバイスの中では安価なほうです。
ただ、プライベート遊ぶにはなぁ…という値段なので今回はCODEYSを使って接続直前までやってみようと思います(それに他の使い道が…)。
なお、カタログ/マニュアル/CAD/ソフトウェア=>ソフトウェアから会員登録&ログインすることでスレーブデバイス情報が記載してあるESIファイルを取得することができます。
まずは、前回の記事を参考にCODESYSプロジェクトを作成してください。
Masterの追加
ツリーにDeviceという項目があるので右クリックし、デバイスの追加を押してください。

デバイスの追加ウィンドウからフィールドバス=>EtherCAT=>マスターと進み、EtherCAT Masterを選択してください。

Slaveの登録と追加
次にスレーブデバイスをCODESYSに登録します。
メニューバーのツールからデバイスリポジトリを選択してください。

デバイスリポジトリのウィンドウになるので、インストールを選択してください。
すると、ファイル参照画面になるので、ファイル種類でESIを選択し、先ほどダウンロードしたE3NW-ECTを選択してください。

これで、スレーブデバイスの登録ができました。
ここで、再度ツリーからEtherCAT_Masterを右クリックし、デバイスの追加を選択します。

出てきた画面からフィールドバス=>EtherCAT=>スレーブ=>OMRON Corporation=>Digital Type Sensorの中からダウンロードしてきた目的のスレーブデバイスを選択し、デバイスの追加を押してください。

ここまでできたら、ツリーは以下のようにMasterとSlaveの親子関係になっているはずです。

Masterの構成
次にMasterを構成していきます。
ツリーからMasterをダブルクリックすると下図の画面となります。

ブラウズを押して、EtherCAT Slaveを接続するMaster側のNICを選択してください。
今はMasterがRaspberry Piですので、有線ポートのeth0を選択してください。
Slaveの構成
次にSlaveを構成していきます。
SlaveもMasterと同様にツリーにあるSlaveデバイスをダブルクリックすると、下図の画面が出てきます。

エキスパートをチェックすると、スタートアップ、タイムアウト、ウォッチドッグ、エイリアスなどの設定ができるようになります。
分散クロックの項目でDCの選択をFree Runにしておくと、Masterとの同期は考えずにSlaveが動いてくれるので、ひとまず動作させるにはFree Runに設定しておきます。
I/OマッピングでPDOを確認できます。

プログラムからPDOへのアクセス
各データには以下のようにアドレスからアクセスできます(Inputモジュールなのでプログラム変数に代入していますが、Outputの場合はアドレスに変数や値を代入すればOKです)。

まとめ
CODESYSでのEtherCAT Masterの構成方法をご紹介しました。
今回行ったことは以下です。
- CODESYSでのEtherCAT Master/Slaveの構成
- ESIファイルによるEtherCAT Slaveの登録
- プログラムからPDOへのアクセス
見ていただいたかたありがとうございました😊
Discussion