TOPに戻る

ラズパイ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状態で変更し、「データの書き込み」で反映すると思います。試していません。

 また、プログラムでも変更できます。試していません。

連載 ラズパイ5 +Python+CANopenでモータを回す

(1) 構成と環境(オリエンタルモーター の「BLMR5100K-A-B」 + 「BLVD-KRD」)

(2) サポート・ソフト MEXE02

(3) PythonでSDOの読み出し(仮)caninfo.py

(4) CANopenのベーシックな規格とSDO/PDO、オブジェクト・ディクショナリ<前編>

(5) CANopenのベーシックな規格とSDO/PDO、オブジェクト・ディクショナリ<後編>

(6) 二つの状態遷移(NMTとStatus Machine)

(7) CANバス信号を見る<前編>canreset.py candump0.py

(8) CANバス信号を見る<中編>Arduino

(9) CANバス信号を見る<後編>CANopenのデコードができ無償で使えるツールAnalog Devices TMCL-IDE

(10) モーション CiA 402の規格<Homing mode> canHome.py

(11) モーション CiA 402の規格<Profile Position Mode (PPM)-前編> canPPMread.py

(12) モーション CiA 402の規格<Profile Position Mode (PPM)-中編> caninfo2.py canppm.py

(13) モーション CiA 402の規格<Profile Position Mode (PPM)-後編> canppm2.py

(14) モーション CiA 402の規格<Profile Velocity Mode (PVM)> campvm.py