EtherCAT開発方法 デバック編

2023/04/19に公開

※Qiitaに投稿した記事の転記です
投稿日 2019年12月11日
更新日 2019年12月11日

この記事は EtherCATについて語る Advent Calendar 2019 の12日目です。
昨日はlipoyangさんの EtherCATマスターSOEMを.NETで使う でした。

#はじめに

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

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

#EtherCATのデバック方法
_20191211_221050.JPG

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

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

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

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

#Wiresharkをインストールする

大丈夫、すぐ出来る。

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

大丈夫、上手く出来る。

#パケットを流し見する。
スクリーンショット_2019-12-11_22-17-13.png

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

#WiresharkにEtherCAT用のフィルタを適応する
スクリーンショット_2019-12-11_22-18-37.png

表示フィルタにecatと書くか、書式よりethercatと検索に入れると以上のフィルタが表示されます。
スクリーンショット_2019-12-11_22-18-48.png
スクリーンショット_2019-12-11_22-19-11.png

#パケットの読み方
スクリーンショット_2019-12-11_22-31-09.png

前に作ったリードのソースを試してみました。

右側にinfoという項目があります。
infoに**'APRD'**とありますね。
これは、前に使ったリードコマンドで間違いないですね。

Sourceの項目に Private と 03:のに種類がありますが、Privateはマスターからスレーブへ、03:から始まるのはスレーブからマスターへの意味です。
スクリーンショット_2019-12-11_22-35-40.png
フレームの中まで観ていくと、判る人には判る内容が書かれています。
この辺の内容については、やはりEtherCATマスターブック 第1巻を読むか、EtherCATテクニカルグループに入るかになります。

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

#パケットの読み方2
スクリーンショット_2019-12-11_22-40-05.png
前に作ったライトのソースも試してみました。
今度はinfoの部分は**'APWR'**に変わっていると思います。

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

ただ問題は・・・実際のEtherCATのパケットは
スクリーンショット_2019-12-11_22-42-41.png

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

#応用編
スクリーンショット_2019-12-11_22-51-12.png

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

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

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

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

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

#おわりに

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

おかしくないですか??

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

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

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

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

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

良きEtherCATライフを!

北神(@nonNoise )

Discussion