EtherCATのSDOとかPDOとか

EtherCATに関する文章を読んでいて、何のことわりもなく唐突にSDOとかPDOとかいう異質な言葉が出て来て面食らったことはないですか?

SDOとかPDOとかってCANの用語じゃないの?

SDOとかPDOとかいうのは、EtherCAT用語というよりは本来はCANopen用語のはず。EtherCATの上位層プロトコルのひとつであるCoE(CANopen over EtherCAT)において用いられる概念です。…いや、たぶんそのはずなのですが、EtherCATの話の中で特にCoEとことわることなくSDOとかPDOとかいう言葉が使われることが多い感じがします。

そもそもCANopenというのは、その名から分かるようにCANの上位層プロトコルとして作られたものですが、EtherCATの上にも載ります。それがCoE(CANopen over EtherCAT)です。さらにCANopenの上位層として、例えばモータ等を制御するCiA402ドライブプロファイルなどがあります。

イメージとしては下図のような感じです。(わりとテキトーに描いた図なのでレイヤーの高さはいいかげんかも…)

f:id:licheng:20191225123152p:plain

SDOとPDOのちがい

まあ、SDOとPDOについての説明はさんざん既出だと思うので、こんな辺鄙なブログでわざわざ語るようなことでもありませんが、いちおう簡単に触れておきます。SDOはマスターが通信したいときに通信したいスレーブに要求を投げてデータを書いたり読んだりする通信です。それに対してPDOはマスターと全スレーブが予め示し合わせて周期的に一斉に読み書きをする通信です。言うまでもなく、PDOを使ってこそEtherCATの本領である低レイテンシ・低ジッタを発揮できます。

CiA402

モータ等を制御するCiA402ドライブプロファイルを例にとってみましょう。CiA402には以下のようなOD(オブジェクトディクショナリー)が定義されています。まあ、BLEでいうキャラクタリスティックの定義のようなものです。IndexというのはBLEでいうUUIDのようなものです。そして各ODにはデータ型(整数型や浮動小数点型など)、アクセス(Read&WriteかRead Onlyか)、名前(それが何のデータか)が定義されています。
そして、SDOでは全てのODのデータにアクセスできますが、PDOではすべてのODのデータを周期通信データにマッピングできるわけではありません。 CiA402のODから一部抜粋して下表に示します。

Index(Hex) Name Type Access PDO Mappable?
6040/0 コントロールワード UINT16 RW Yes
6041/0 ステータスワード UINT16 RO Yes
6060/0 動作モード INT8 RW Yes
6071/0 目標トルク INT16 RW Yes
6072/0 最大トルク UINT16 RW No
6077/0 現在トルク INT16 RO Yes

お分かりでしょうか? この中では最大トルクがPDOにマッピングできませんね。目標トルクや現在トルクは常々設定・取得し続けなければならないものでPDOで通信すべきです。それに対して、最大トルクというのはふつうは一度設定すればそうそう変更するものではありません。だから最大トルクはSDOでのみアクセスとなっているのでしょう。まあ、それ言うと動作モード(トルク制御、速度制御、位置制御などのモード)だってそうそう変更するものではないと思いますが…?

今日の駄文はここまでです。わりとテキトーなことを書いたので詳しくはちゃんとした仕様書を読んでください。