EtherCAT開発方法　デバック編

この記事は [EtherCATについて語る Advent Calendar 2019](https://adventar.org/calendars/4097) の12日目です。
昨日はlipoyangさんの [EtherCATマスターSOEMを.NETで使う](https://lipoyang.hatenablog.com/entry/2019/12/11/120416) でした。

#はじめに

アドベントカレンダーって、クリスマスまでのワクワク感を毎日楽しく過ごす
って事なので、皆さん楽しんでますか〜！

次回は実験成果の発表をしていく予定なんで許してね♪

#EtherCATのデバック方法
![_20191211_221050.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/15f46dfc-5b7f-98f2-80a8-249c6854f52b.jpeg)

EtherCATのデバック方法としては、通信しているパケットの中身を観に行く事が最も有効的な手段です。

ここで、パケットキャプチャーで有名な**Wireshark**を使ってデバックする方法を簡単にご紹介します。

尚、　EtherCAT公式も、このWiresharkを使うようにとドキュメントに記載されているくらい、Wiresharkを使うことを推奨します。


**このデバック方法は、TwinCATやSOEM、自作のライブラリでも確認できます。**


#Wiresharkをインストールする

大丈夫、すぐ出来る。

#Wiresharkを起動し、EtherCATが接続されているNICポートを選択します。

大丈夫、上手く出来る。

#パケットを流し見する。
![スクリーンショット_2019-12-11_22-17-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/5ce53069-92f8-b10b-f4e1-f6d75b564634.png)

EtherCATのスレーブに電源が入っていれば、通信して無くてもDHCPの確認パケットやMDNS、ICMPなどがピョコピョコ出てくると思います。
EtherCATスレーブには影響はありませんが、まぁ出てきちゃうよねぇ〜（著者が試したのはUbuntuなので他のOSでは出ないかも）

#WiresharkにEtherCAT用のフィルタを適応する
![スクリーンショット_2019-12-11_22-18-37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/cf99e740-7c16-bedd-0dad-633652a4b5bf.png)

表示フィルタに**ecat**と書くか、書式よりethercatと検索に入れると以上のフィルタが表示されます。
![スクリーンショット_2019-12-11_22-18-48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/e95c31c0-8caa-794c-7dc2-b0994dbd250b.png)
![スクリーンショット_2019-12-11_22-19-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/535d38bf-776c-3e72-8902-018299ec2b2a.png)

#パケットの読み方
![スクリーンショット_2019-12-11_22-31-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/27883566-4228-c4a0-38a4-5481e76f3d72.png)

[前に作ったリードのソース](https://qiita.com/nonNoise/items/bbe1689344ccc7b8ace0)を試してみました。

右側にinfoという項目があります。
infoに**'APRD'**とありますね。
これは、[前に使ったリードコマンド](https://qiita.com/nonNoise/items/bbe1689344ccc7b8ace0)で間違いないですね。

Sourceの項目に　Private と　03:のに種類がありますが、Privateはマスターからスレーブへ、03:から始まるのはスレーブからマスターへの意味です。
![スクリーンショット_2019-12-11_22-35-40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/6c841a43-079e-fbfc-0569-48b7e677493a.png)
フレームの中まで観ていくと、**判る人には判る**内容が書かれています。
この辺の内容については、やはり[EtherCATマスターブック 第1巻](https://www.switch-science.com/catalog/5919/)を読むか、EtherCATテクニカルグループに入るかになります。

見る場所としては、offset:0x0e00　と書かれている部分が分かりますでしょうか。これはリードをする際に0x0e00を見に行くようにプログラムしたので、プログラム通りであることが伺えます。

#パケットの読み方２
![スクリーンショット_2019-12-11_22-40-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/82bf9280-3a24-4741-6842-e61ceac19f7a.png)
[前に作ったライトのソース](https://qiita.com/nonNoise/items/5bc4c214a64b78a37cb3)も試してみました。
今度はinfoの部分は**'APWR'**に変わっていると思います。

この様に、**よくわからないけど動いているEtherCATの中身を知りたい！**って時に大変役に立ちます。

ただ問題は・・・実際のEtherCATのパケットは
![スクリーンショット_2019-12-11_22-42-41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/9cef5383-e7a0-fe02-6e26-877dd9245fc5.png)

こんな感じで、大量に流れるような感じです。
一個づつ解析するのは骨が折れますので、なるべく単機能での動作確認を行いたいですね・・・汗

#応用編
![スクリーンショット_2019-12-11_22-51-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12499/626d3910-8354-ff10-d873-e2982663f299.png)

さて、EtherCATアドベントカレンダーでも皆様色んな使い方をされているので、自分も試したいなぁ〜って思うことあると思います。

例えば、マスタープログラムを作成したい！移植したい！
マスターがPCなら上記のWiresharkで見ればよいですが、例えばマスターがマイコンだったり、市販のシーケンサーだったりする際は、デバックが大変ですよね・・・

なので、オススメは、マスターをPCに接続して、マスターが送信しているパケットがEtherCAT的に正しいかを確認する！という手です。

最初にお伝えした通り、**Wireshark**はEtherCATでも公認しているデバック方法で、EtherCATのパケットが正しいかを確認するのにもってこいです。**(著者も多く助けられました)**

無事にecatのパケットフィルタが通れば、EtherCATパケットとして正常ということです。（下手なパケットを送るとエラーと出た気がします）

#おわりに

さて、ここまでさも**当然**の様に話をしてきましたが・・・

**おかしくないですか？？**

え？何でWiresharkでEtherCATが見れるの？産業用だよ？ニッチ過ぎない？？

まぁ、EtherCATってちゃんとIEEEにポート番号の申請をしたりで**ネットワーク政治上問題のない通信**という根回しの良さが、こうした開発ツールにも受け入れてもられるということじゃないのかなぁ。

https://wiki.wireshark.org/Protocols/ethercat

凄い話だよなぁ。高価なソフト何か買わなくても、家でパケットキャプチャ出来ちゃうんだから・・・

というデバック方法についての話でした！

良きEtherCATライフを！

北神(@nonNoise )