TOPに戻る

ラズパイ5 +Python+CANopenでモータを回す ⑨ CANバス信号を見る<後編>CANopenのデコードができ無償で使えるツールAnalog Devices TMCL-IDE

 CANバスを流れるデータは、いろいろなツールでロギングできます。下の画像は、ラズパイで、can-utilsのダンプ・ソフトcandumpを動かしたものです。

 例えば、一番左のcan0はデバイス名で、その右の3桁の数値はCAN-IDもしくはCOB-IDと呼ばれます。

これをデコードしてくれるWebがあります。

  Online CANopen COB-ID converter

 その右側の[8]はフレームのバイト数です。最初や最後のNMT、SYNCなどを除くと、大半が8バイトで構成されています。これがフレームと呼ばれ、最初の1バイトは、たとえば0x40は読み込みのアップロード要求です。0x4Bは、アップロード応答のコマンド指定子CSです。

 その次の2バイトがStatuswordやSDOのコマンド(index)になります。indexは数百あるので、手作業でデコードするのは大変ですが、できないわけではありません。デコードは、オブジェクト・ディクショナリを見ながら行います。MEXE02などのツールを使ってもできますが、.edsファイルはテキストなので、検索しながら一致する命令を探します。

 慣れると、10個ほどのindexが頻繁に出てくるので、覚えてしまいます。indexに続くのがデータですが、多くが、ControlwordもしくはStatuswordです。解釈はバイナリで読み取ります。

 一番解読しにくいのがエラー・コードですし、コードがわかっても意味が分からないことが多いです。

◆Controlword

State LowByte of Controlword [binary]
shutdown 0xxx x110
switch on 0xxx x111
disable voltage 0xxx xx0x
quick stop 0xxx x01x
disable operation 0xxx 0111
enable operation 0xxx 1111
fault reset 1xxx xxxx

Statusword

State ID Statusword [binary]
Start 0 x0xx xxx0 x000 0000
Not Ready to Switch On 1 x0xx xxx1 x000 0000
Switch on disabled 2 x0xx xxx1 x100 0000
ready to switch on 3 x0xx xxx1 x010 0001
switched on 4 x0xx xxx1 x010 0011
refresh 5 x1xx xxx1 x010 0011
measure init 6 x1xx xxx1 x011 0011
operation enable 7 x0xx xxx1 x011 0111
quick stop active 8 x0xx xxx1 x001 0111
fault reaction active (disabled) 9 x0xx xxx1 x000 1111
fault reaction active (enabled) 10 x0xx xxx1 x001 1111
Fault 11 x0xx xxx1 x000 1000

開発ツールTMCL-IDE

 現在アナログ・デバイセズになっていますが、BLDCモータやステッピング・モータ、それらのインターフェース・ボードを作っていたTMCL社の開発ツールは、デバイスやメーカの制限もなく、CANバスを監視できたり、NMTのコマンドをCANバスに送出できます。

 2022年TMCM-CANopen Revision V1.6.0.0では、CANバスのダンプはできました。

 現在ダウンロードできるTMCL-IDE 4.2.0ではCANopenのデコードもリアルタイムに行ってくれます。

 利用できるインターフェース機器の一部です。ここでは、Ixxat (USB-to-CAN V2 Compact)を使っています。

  • CAN-USB/2 (ESD)
  • Leaf Light v2 (Kvaser)
  • IPEH-002021 (Peak)
  • Ixxat (USB-to-CAN V2 and USB-to-CAN V2 Compact)
  • RTMI(USB-2-RTMI?)

実行例-<その1>canreset.py

 canreset.pyを動かします。

import canopen
import time
import logging
# logging.basicConfig(level=logging.DEBUG)

# Start with creating a network representing one CAN bus
network = canopen.Network()

# Connect to the CAN bus
# sudo ip link set can0 up type can bitrate 1000000
network.connect(bustype='socketcan', channel='can0')
print("\n===start  ID=12 OrientalMotor\n")

network.check()

# Add some nodes with corresponding Object Dictionaries
node = canopen.BaseNode402(12,'Downloads/BLVD-KRD_CANopen_V200.eds')
network.add_node(node)

# all nodes simulaneously as a broadcast message
network.nmt.state = 'RESET'
time.sleep(0.5)
print('network state 1) = {0}'.format(network.nmt.state))

# Reset network
node.nmt.state = 'RESET'
node.nmt.wait_for_bootup(15)
node.nmt.state = 'RESET COMMUNICATION'
node.nmt.wait_for_bootup(15)
print('node state 1) = {0}\n'.format(node.nmt.state))

node.setup_402_state_machine()
time.sleep(0.1)
print('state_machine state 1) = {0}'.format(node.state))
#clear Fault
node.sdo[0x6040].raw = 0x80
time.sleep(0.2)
network.check()
print('state_machine state 2) = {0}'.format(node.state))

print('\ngoing to exit... stopping...')
if network:
    for node_id in network:
        node = network[node_id]
        node.nmt.state = 'PRE-OPERATIONAL'
        #node.nmt.stop_node_guarding()
        #node.nmt.state = 'STOPPED'
#network.sync.stop()
network.disconnect()

 仮想環境envcanで実行中の様子です。

 TMCL-IDEのトレース画面です。ほとんどがnode.setup_402_state_machineの実行部分のようです。内容は、マッピングされたPDOデータの読み出しです。

 

 TMCL-IDE 4.2.0をインストールしたら、メニューとかに見当たりません。C:\Analog Devices\に実行プログラムがありました。

コントローラBLVD-KRDのedsを読み込む

 上記のcanreset.pyのデコードは、どのメーカも同じindexが用意されているので、問題なく表示されているようです。しかし、6000番台はほぼ同じでも、2000や4000番台は、メーカによって相当異なります。

 なので、BLVD-KRD_CANopen_V200.edsを読み込んで使いたいです。

 C:\Analog Devices\TMCL-IDE-Rel4.2.0にUserEdsというディレクトリを新規に作ります。このUserEds内に、BLVD-KRD_CANopen_V200.edsをコピーしておきます。

 TMCL-IDEを立ち上げます。

  Device欄にあるIxxat (USB-to-CAN V2 Compact)を選択し、ID=12をサーチさせるとBLVD-KRDを見つけてきて、edsファイルも読み込んでくれます。そうすると、サブメニューが追加され、オブジェクト・ディクショナリの表示や値の変更などができるようになります。

 MEXE02と異なり、CANopenの各種indexの読み書きやNMTの状態遷移などが直接実行される有用なツールになります。

 

canreset.pyを動かすPythonの仮想環境

 2023年10月に更新されたラズパイOS bookwormでは、pythonは仮想環境を利用してプログラムを作ります。

python仮想環境 備忘録

仮想環境の作成

python -m venv envtest

有効化

source envtest/bin/activate

無効化

deactivate

初期状態に(いったん deactivate してから)

python -m venv --clear envtest

 

 envcanという仮想環境を作ります。

yoshi@ras05:~ $ python -m venv envcan

yoshi@ras05:~ $ source envcan/bin/activate

 作り立ての仮想環境には、ライブラリがない状態です。canopenライブラリをインストールします。

(envcan) yoshi@ras05:~ $ pip install canopen
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting canopen
  Using cached https://www.piwheels.org/simple/canopen/canopen-2.2.0-py3-none-any.whl (61 kB)
Collecting python-can>=3.0.0
  Using cached https://www.piwheels.org/simple/python-can/python_can-4.3.1-py3-none-any.whl (262 kB)
Collecting wrapt~=1.10
  Using cached wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (80 kB)
Collecting packaging>=23.1
  Using cached https://www.piwheels.org/simple/packaging/packaging-24.0-py3-none-any.whl (53 kB)
Collecting typing-extensions>=3.10.0.0
  Downloading https://www.piwheels.org/simple/typing-extensions/typing_extensions-4.11.0-py3-none-any.whl (34 kB)
Collecting msgpack~=1.0.0
  Using cached msgpack-1.0.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (400 kB)
Installing collected packages: wrapt, typing-extensions, packaging, msgpack, python-can, canopen
Successfully installed canopen-2.2.0 msgpack-1.0.8 packaging-24.0 python-can-4.3.1 typing-extensions-4.11.0 wrapt-1.16.0

(envcan) yoshi@ras05:~ $ pip list
Package           Version
----------------- -------
canopen           2.2.0
msgpack           1.0.8
packaging         24.0
pip               23.0.1
python-can        4.3.1
setuptools        66.1.1
typing_extensions 4.11.0
wrapt             1.16.0

 実行します。最初に、ip link setコマンドでデバイスcan0の状態をUPに設定します。

(envcan) yoshi@ras05:~ $ sudo ip link set can0 up type can bitrate 1000000

(envcan) yoshi@ras05:~ $ python canreset.py

実行例-<その2>caninfo2.py

 caninfo2.pyを動かします。実行画面です。

 TMCL-IDEのトレース画面です。

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