ラズパイ5 +Python+CANopenでモータを回す ⑤ CANopenのベーシックな規格とSDO/PDO、オブジェクト・ディクショナリ<後編>
前回、要となるオブジェクト・ディクショナリを説明しました。その内容を読み書きするのがSDOです。項目数が多いので、全部読み出すだけでも、数十秒から、分単位の時間がかかります。canopenのライブラリで一つのオブジェクトを読んだ後は1ms待ってから次を読み書きします。
そこで、利用するドライブ・プロファイルの動作に必要なオブジェクトを登録しておき、素早く読み書きするためにPDOが使われます。
●PDOとは
PDO(Process Data Object)は、SDOの中でもすぐに必要なセンサのデータ、このモータでいえば、ロータリ・エンコーダに基づくリアルタイム・データを自動的に送受信する際に使用します。
NMT状態を「Pre-operational」から「Operational」にするとPDOの読み書きができます。
- Receive PDO(RPDO);受信したPDO
- Transmit PDO(TPDO);送信されたPDO
それぞれ、規格上最大で512個用意できるのですが、多くのシステムでは、デフォルトで用意されているCOB-IDはそれぞれ四つずつなので、その中で利用します。
●PDOマッピング
例えば、6083h: Profile accelerationの詳細を見ると、PDO yesと書かれています。PDOにマッピングしてもよいオブジェクトです。けれど、SDOの書き込みで、最初に設定しておけば用が足りるオブジェクトなので、マッピングしません。
6064h: Position actual valueの詳細を見ると、PDO yesと書かれています。PDOにマッピングしてもよいオブジェクトです。常に今いる位置がわかるので、PDOマッピングして利用します。
マッピングされているindexです。
Receive-PDO (RPDO) (Master -> Driver)
- 1400h: 1st RPDO communication parameter
- 1401h: 2nd RPDO communication parameter
- 1402h: 3rd RPDO communication parameter
- 1403h: 4th RPDO communication parameter
- 1600h: 1st RPDO mapping parameter
- 1601h: 2nd RPDO mapping parameter
- 1602h: 3rd RPDO mapping parameter
- 1603h: 4th RPDO mapping parameter
Transmit-PDO (TPDO) (Driver -> Master)
- 1800h: 1st TPDO communication parameter
- 1801h: 2nd TPDO communication parameter
- 1802h: 3rd TPDO communication parameter
- 1803h: 4th TPDO communication parameter
- 1A00h: 1st TPDO mapping parameter
- 1A01h: 2nd TPDO mapping parameter
- 1A02h: 3rd TPDO mapping parameter
- 1A03h: 4th TPDO mapping parameter
MEXE02の(m14) CANopenオブジェクトディクショナリで、この領域を見ます。
デフォルトのマッピングは、(m12) CANopen通信ステータスのPDOモニタに表示されています。
現在、 Modes of operation=3のProfile Velocity Modeになっています。この運転モードでは、RPDO4にマッピングされている「Target velocity」が必須です。
もう一つのModes of operation=1のProfile Position Modeでは、「Target position」が必須です。みると、RPDO3にマッピングされています。つまり、どちらのドライブ・プロファイルのモードでも、デフォルト・マッピングのままで変更せずに利用できます。
RPDO3のCOB-IDは0b1000+Node-ID(0x0c=0b0001100)なので、0b10000001100=0x40cです。上記のオブジェクトディクショナリでは10進数で表示されて、1036で、正しい値になっています。EPOS4の時は、デフォルトのNode-IDのままだったので、手動で変更しました。
Transmission typeは255=0xffになっています。次の項目の図「(p5) CANopen object通信初期値・設定」ではevent-driven(受信タイミングで反映)になっています。0x00のsynchronous(Syncで反映)を選べます。syncを有効にしたら、どちらも同じことになるように思えますが確認の実験はしていません。EPOS4のときは、デフォルトのasyncronousからsynchronousに変更しました。
●PDOマッピングの変更
MEXE02の(p5) CANopen object通信初期値・設定で行えると思います。OFF状態で変更し、「データの書き込み」で反映すると思います。試していません。
また、プログラムでも変更できます。試していません。