ラズパイ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 # Start with creating a network representing one CAN bus # Connect to the CAN bus network.check() # Add some nodes with corresponding Object Dictionaries # all nodes simulaneously as a broadcast message # Reset network node.setup_402_state_machine() print('\ngoing to exit... stopping...') |
仮想環境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のトレース画面です。