バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はPyXCPのCAN-FD対応の動作確認を行った。
一見すると動作しているように見えたが、
どうやらCAN-FD送信が出来ていないようである。
PyXCPもVersionがあるので、Version別の挙動を確認してみることとなった。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
PyXCPのVersion別CAN-FD対応状況
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
PyXCPのVersion別にCAN-FDに対応状況を調べるんだっけ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
調べてきた。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
ほう。
なんか良い情報があると良いのだけど。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
ざっと調べた感じだと以下だ。
Version | CAN-FD受信 | CAN-FD送信 | 備考 |
---|---|---|---|
0.13.0 | NG | NG | |
0.13.1 | NG | NG | |
0.13.2 | NG | NG | |
0.13.3 | OK | NG | CANフィルタ追加 |
0.13.4 | OK | NG | |
0.13.5 | OK | NG | |
0.13.10 | OK | NG | |
0.14.0 | OK | NG | |
0.14.2 | OK | NG | |
0.14.3 | OK | NG | |
0.15.0 | OK | NG | |
0.15.1 | NG | NG | DAQ queue消滅? |
0.15.2 | NG | NG | |
0.15.3 | NG | NG | |
0.15.4 | NG | NG | |
0.15.5 | OK | NG | DAQ queue復活 |
0.15.6 | OK | NG | |
0.16.0 | OK | NG | |
0.16.3 | OK | NG | |
0.16.4 | OK | OK | Python-CANへis_fdフラグ追加(Serialパラメータ抜きで送信可能) |
0.16.5 | OK | OK | |
0.16.7 | OK | NG? | 無条件でDLC 15 |
0.16.10 | OK | NG? | |
0.16.17 | OK | NG? |
状況考察
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
これは・・・。
予想以上にごちゃごちゃしてるな・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そうだね。
まぁ大雑把には以下の流れだねー。
- 0.13.3でXCPonCANが動くようになる。
- 0.15.1でdaqQueueが消滅してDAQ受信の挙動が怪しくなる。
- 0.15.5でdaqQueueが復活してDAQ受信が元に戻る。
- 0.16.4でPython-CANへのCAN-FD送信指示が増えるが、Serialパラメータがあると送信エラーになる。
- 0.16.7でCAN-FDの場合は無条件でDLC 15(64byte)に。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
結局何をすれば問題無い状態になるんだ??
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
コンフィグレーション用のJSON記述のSerialパラメータを削除すれば、
最新版でも動作はするね。
ただ、DLCが無条件で15。つまり64byte送信になる。
これが嫌だったら0.16.5のversionを使うのが妥当だろう。
DLCが無条件で15になっている理由
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
でも、なんで無条件でDLCが15になるんだろう?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
ソースコード上のコメントを見ると、
AUTOSAR仕様が理由のようなことを書いていたが、
私の解釈だとDLCを15にして64byteのフレームを作ることを強制する仕様では無いんだよね。
まぁ勘違いして入った仕様なのかもしれない。
幸か不幸か、未だにUpdateが入ってるパッケージなので、そのうち修正されるかもしれないが。
加えてbitrate_switchが有効になっていないので、これもそのうち修正されることを期待だな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
うーん、その修正が入る前は0.16.5を使う感じかなー。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
それが良いと思うよ。
まぁ0.16.5で再度動作確認をしてみよう。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
ちなみにpipでインストールすると最新版になると思うんだけど、
version指定ってできるの?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
できるよ。
以下の指定方法が可能。
これはpyxcpに限らずpipの仕様だ。
pip install pyxcp==0.16.5
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
ほう。
Versionを指定してインストールできるのね。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- PyXCPのVersion別CAN-FD対応状況を確認。
- かなり、いろいろ変化している。
- SERIALパラメータがあると、CAN-FDフレーム送信でエラーが発生する。
- よって、現時点では0.16.5のVersionを使用する。
- CAN-FDフレーム送信可能、DLC可変。
バックナンバーはこちら。
コメント