TOPに戻る

ラズパイ5 +Python+CANopenでモータを回す ④ CANopenのベーシックな規格とSDO/PDO、オブジェクト・ディクショナリ<前編>

 CANバスは、すでに、初期の規格に比べてCAN FDなどバスのデータレート速度が伸びていますが、CANopenの物理層/データ・リンク層に相当します。

 その上に、

  • アプリケーション層と通信プロファイルがCiA 301
  • CANopenマネージャとプログラマブルCANopenデバイスをCiA 302

の二つ(以上)の規格があり、CANopenのベーシックな部分になります。

 この部分は、日本語で読める書籍が入手できます。

  CANおよびCANopenによる組み込みネットワーク

 デバイス・プロファイルやアプリケーション・プロファイル類の規格書番号は400番台になり、モーション・コントロール(サーボ、ステッッピング・モータ、周波数インバータ)がCiA 402です。

 本連載でメインとなるモータを回すCiA 402の日本語資料は、下記のものが参考になります。

EPOS と CANsetter で学ぶ CANopen

EPOS2 Positioning Controller Application Note "デバイス・プログラミング" 

CANopenの要 オブジェクト・ディクショナリ

 オブジェクト・ディクショナリは、標準オブジェクトとメーカ独自のオブジェクトをすべて記載した、いわば「デバイスの機能仕様書」になります。メーカのWebページからedsファイルとしてダウンロードできます。今回利用したオリエンタルモーターのedsファイルは、ドライバのBLVD-KRDページ、

  https://www.orientalmotor.co.jp/ja/products/detail?hinmei=BLVD-KRD

  EDSファイル(CANopen)    BLVD-KRD_CANopen_V200.eds

を利用します。初期、V100でした。その後、400Wモデルなどが追加され、更新されたようです。

SDO(Service Data Object)

 第6回で後述するNMT(Network Management )がPre-operationalのときとOperationalのときに、オブジェクト・ディクショナリを読み書きできます。この操作をSDOの読み書きと言います。

 オブジェクト・ディクショナリを、ざっくりと、番号で説明します。

 1000番から始まるCommunication Objects、最初のあたりは、デバイス・タイプやメーカのバージョン情報とかが記載されています。

 下記の七つは必須です。

  • 1000 デバイス・タイプ情報
  • 1001 エラー・レジスタ
  • 1017 ハートビート・タイム
  • 1008  0:4(サブの数)
  •     1:ベンダID
  •     2:製品コード
  •     3:リビジョン番号
  •     4:シリアル番号

 2000番の手前にあるPDOマッピング関係の領域です。

  •  1400番からPDOの受信communication parameter
  •  1600番台からPDOの受信mapping parameter
  •  1800番からPDOの送信communication parameter
  •  1a00番台からPDOの受信mapping parameter

 この後、2000番台、3000番台、4000番台がありますが、後述します。

 6000番台(6000~9FFF)は、標準化されたデバイス・プロファイル領域=Device Profile Objects(モータではCiA 402)で、各メーカ共よく似た項目(index)があります。ドライブ・プロファイルの動作モードは各社いろいろな対応があり、下記の三つはほぼどこも実装しています。

  • Profile Position Mode (位置制御モード)
  • Profile Velocity Mode (速度制御モード)
  • Homing Mode (原点復帰モード)

 最近のロボット・アームのような用途に適した、

  • サイクリック同期位置モード(CSP)
  • サイクリック同期速度モード(CSV)
  • サイクリック同期トルクモード(CST)

などを実装したコントローラも出てきています。それにともなって、indexの数も増加しているようです。これらのオブジェクトを全部理解して、プログラムで使うわけではありません。

 極端に言えば、一つの動作モードで3~5のオブジェクトを触って、ほかはデフォルトのままでも支障がない場合が多いです。

 MaxonのEPOS4と比較しました。

index
(16進)
名 称 BLVD-KRD
(オリエンタルモーター)
EPOS4
(Maxon)
603Fh Error code -
6040h Controlword
6041h Statusword
605Ah Quick stop option -
605Bh Shutdown option -
605Ch Disable operation -
605Dh Halt option code -
605Eh Fault reaction -
6060h Modes of operation
6061h Modes of operation display
6062h Position demand value
6064h Position actual value
6065h Following error window
6067h Position window
6068h Position Window Time -
6069h Velocity Sensor Actual Value -
606Bh Velocity demand value
606Ch Velocity actual value
606Dh Velocity window -
606Fh Velocity threshold -
6071h Target torque -
6072h Max torque -
6074h Torque demand -
6077h Torque actual value -
6078h Current Actual Value -
607Ah Target position
607Bh Position range limit -
607Ch Home offset
607Dh Software position limit
607Fh Max Profile Velocity' -
6081h Profile velocity
6082h End velocity
6083h Profile acceleration
6084h Profile deceleration
6085h Quick stop deceleration
6086h Motion ProfileType -
6087h Torque slope -
6089h Position Notation Index -
608Ah Position Dimension Index -
608Bh Velocity Notation Index -
608Ch Velocity Dimension Index -
608Dh Acceleration Notation Index -
608Eh Acceleration Dimension Index -
6091h Gear ratio -
6098h Homing method
6099h Homing speeds
609Ah Homing acceleration
60A8h SI unit position
60A9h SI unit velocity
60B8h Touch probe function
60B9h Touch probe status
60BAh Touch probe 1 positive edge
60BBh Touch probe 1 negative edge
60BCh Touch probe 2 positive edge
60BDh Touch probe 2 negative edge
60D5h Touch probe 1 positive edge counter
60E3h Supported homing methods
60F2h Positioning option code
60F4h Following error actual value
60F6h Current Control Parameter -
60F9h Speed Control Parameter -
60FBh Position Control Parameter -
60FDh Digital inputs -
60FEh Digital output -
60FFh Target velocity (pv)
6402h MotorType -
6410h Motor Data -
6502h Supported drive modes
67FEh Version number
67FFh Single device type

 なお、各indexにはsubが存在するものがあります。表では省略しています。edsファイルでは、元のindexのパラメタにSubNumber=3と、subの存在数が書かれています。Position range limit(607Bh)の例では'3'です。

[607B]
ParameterName=Position range limit
ObjectType=0x8
SubNumber=3

[607Bsub0]
ParameterName=Highest sub-index supported
ObjectType=0x7
DataType=0x0005
AccessType=const
DefaultValue=2
PDOMapping=0

[607Bsub1]
ParameterName=Min position range limit
ObjectType=0x7
DataType=0x0004
AccessType=rww
DefaultValue=0
PDOMapping=1
LowLimit=-536870912
HighLimit=0

[607Bsub2]
ParameterName=Max position range limit
ObjectType=0x7
DataType=0x0004
AccessType=rww
DefaultValue=0
PDOMapping=1
LowLimit=0
HighLimit=536870911

 サポート・ソフトのMEXE02の(m14) CANopenオブジェクトディクショナリの表示は、次のように三つsubがあります。

 ドライブ・プロファイルの動作は、いくつかのindex(オブジェクト)を設定し、動作をスタートさせると、コントローラが自動で必要な計算を行って、回転制御をする、優れものです。

 例えば、Profile Position Mode (位置制御モード)であれば、目標位置(Target Position)を指定すれば、徐々に加速し、一定の速度で回転を続け、目標位置に近づくと減速を始めるという台形駆動が行われます。この時、加速(Profile acceleration)と減速(Profile deceleration)は、利用者が設定ができます。

 速度やトルクはコントローラによってPID制御されているので、途中で負荷が変わったとしても自動的に補正がかかり、正しい目標位置まで回転します。

 

 2000~5FFFは、メーカ固有のプロファイル領域です。

2000番台

 BLVD-KRDには存在しません。

 EPOS4では、0x2001 (CAN bit rate)、0x2002 (RS232 bit rate)、0x2005 (RS232 frame timeout)、0x2006 (USB frame timeout)、0x200A (CAN bit rate display)、0x2010 (Active fieldbus)、0x2100 (Additional identity)、0x2101 (Extension 1 identity)、0x210C (Custom persistent memory)、0x2200 (Power supply)などのオブジェクトがあります(EPOS4 Firmware Specification)。

3000番台

 BLVD-KRDには存在しません。

 EPOS4では、チューニング・ツールを使った結果のPIDのパラメタが読み書きできます(EPOS4 Application Notes)。

 また、ディジタル入出力、アナログ入出力などの値も見れます(EPOS4 Firmware Specification)。

4000番台

 このモータ専用のオブジェクトです。解説はどこにもないので、「BLV series R type Driver CANopen communication profile」を読むしかないです。

 例えば、四つある入力端子が反映されるオブジェクトが見つかりません。

端子番号 端子名 初期値
16 DIN0 ID-SEL0
17 DIN1 ID-SEL1
18 DIN2 STOP
19 DIN3 FREE

 MEXE02 の(m12)ゲインチューニングで変更されたPIDのゲインが保存される場所が見つかりません。

 4000番台のオブジェクト一覧です。

Manufacturer  Specific Objects
402Ch: Direct data operation operation data number.
402Dh: Direct data operation operation type
402Eh: Direct data operation position
402Fh: Direct data operation operating velocity 
4030h: Direct data operation acceleration rate
4031h: Direct data operation deceleration rate .
4032h: Direct data operation torque limiting value .
4033h: Direct data operation trigger.
4034h: Direct data operation forwarding destination 
403Ah: Driver input command (2nd).
403Ch: Driver input command (automatic OFF)
403Dh: NET selection data number
403Eh: Driver input command
403Fh: Driver output status
404Bh: Target position (User-defined position unit).
404Ch: Demand position (User-defined position unit).
404Dh: Actual position (User-defined position unit)
404Eh: Target velocity (User-defined velocity unit)
404Fh: Demand velocity (User-defined velocity unit).
4050h: Actual velocity (User-defined velocity unit)
4056h: Present communication error
406Bh: Torque monitor
406Ch: Load factor monitor
406Dh: Cumulative load monitor .
4070h: Next data number
4071h: Loop origin data number
4072h: Loop count 
4073h: Position deviation
4075h: Speed deviation
407Ah: Tripmeter 1
407Bh: Present information 
407Ch: Driver temperature.
407Dh: Motor temperature
407Eh: Odometer
407Fh: Tripmeter 0.
409Bh: Main power supply current.
409Ch: Power consumption
409Dh: Energy consumption
409Eh: User energy consumption.
409Fh: Total energy consumption
40A1h: Total uptime.
40A2h: Number of boots
40A3h: Inverter voltage
40A4h: Main power supply voltage 
40A9h: Continuous uptime
40AAh: RS-485 communication reception byte counter.
40ABh: RS-485 communication transmission byte counter
40C0h: Alarm reset
40C2h: Clear alarm history .
40C5h: P-PRESET execution 
40C6h: Configuration
40CDh: Clear latch information 
40CEh: Clear sequence history
40D0h: Clear ETO
40D1h: ZSG-PRESET .
40D2h: Clear ZSG-PRESET
40D3h: Clear information.
40D6h: Clear user energy consumption
40D7h: Clear tripmeter 0
40D8h: Clear tripmeter 1
4148h: Permission of absolute positioning without setting absolute coordinates
415Fh: JOG/HOME Torque limit value .
4160h: (HOME) Homing mode
4163h: (HOME) Starting velocity.
4169h: (HOME) Backward steps in 2 sensor homeseeking
4186h: Stopping timeout at alarm generation
41CAh: WRAP setting 
4735h: Custom stopping rate.
4736h: Custom stopping time 

資料

 モータを回すCiA 402の日本語資料は、

  • Profile Position Mode (位置制御モード)
  • Profile Velocity Mode (速度制御モード)
  • Homing Mode (原点復帰モード)

などで検索すると、モータ関連のマニュアルが見つかります。多くはEtherCAT用ですが、CANopenと同じ仕様なので、モータの制御には役に立ちます。

混乱のもと

 列挙された項目が、0オリジンと1オリジンの両方があるようです。

 16進表記で、YYYYhと0xYYYYが、この連載では混在しています。

 もとのCANopen用語がわからない変な日本語が散見されます。

連載 ラズパイ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