バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
診断通信と同じようにCANの上位プロトコルであるXCPonCANを実現するにあたって、
Python-CANの上位ライブラリとしてPyXCPが存在する。
前回はとりあえず、pipを使ったインストールをしたところ。
今回からPyXCPをお試しで使っていくことになる。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
各種import

Pythonといえば、まず最初にどのライブラリやパッケージ、関数をimportするかってところだねー。

PyXCPに限った話であれば以下をimportすればOK。
from pyxcp.config import readConfiguration
from pyxcp import transport
from pyxcp.transport.candriver.pc_vector import Vector # "CAN_DRIVER": "Vector"を指定する場合に必要
from pyxcp.master import Master

あと、後述する予定だが、
トランポート層でCANインターフェースの設定周りでJSONを使うんだよね。
本来であればJSONファイルから設定を取り込むのだが、
Pythonコード内にJSONを埋め込んで、それをファイルIOという体で渡すため
StringIOというモジュールを使う。
よって、以下もimportしておく必要がある。
from io import StringIO
StringIO

StringIO?
どういう使い方をするの?

「Python上の文字列をファイルIOのように扱う」
としか言いようがないかな。

例えば、以下のようにコードを実行すると
from io import StringIO
txt = """
test1
test2
test3
"""
f = StringIO(txt)
for line in f:
print(line, end="")

以下のような結果になる。
test1
test2
test3

特に利点が感じられないのだけど・・・。

PyXCPでファイルIOでしかコンフィグレーションできない部分があるんで、そこで使うんだよ。
StringIOはファイルIOと見なされるんで、ファイルの代わりに使える。
って利点だね。

まぁそういうものがあって、今回それを利用するってのだけわかった。
実際のコンフィグレーション文字列

そして実際のコンフィグレーション文字列はこれになる。
JSON = """{
"TRANSPORT": "CAN",
"CAN_DRIVER": "Vector",
"CAN_USE_DEFAULT_LISTENER": true,
"CHANNEL": "0",
"CAN_ID_MASTER": 2,
"CAN_ID_SLAVE": 1,
"CAN_ID_BROADCAST": 256,
"MAX_DLC_REQUIRED": false,
"CREATE_DAQ_TIMESTAMPS": true,
"SERIAL": 0,
"BITRATE": 500000,
"APP_NAME": "PyXCP-CAN"
}"""

これをStringIOに渡せばファイルIOっぽくなるってことか。

で、いろいろパラメータがあるけど、
それぞれの意味は?
なんとなく分かるのも多いけど。

そうだね。
大体が自明なパラメータではあるが、
何を示しているか分かりにくいのもあるだろう。
そこら辺は次回説明する。
まとめ

まとめだよ。
- PyXCPを利用する上で必要なimportを列挙。
- 設定ファイルがJSONファイルを想定しており、Python内の文字列をファイル
- 認識されるためにio.StringIOもimport。
- StringIOに引き渡すJSONを提示。
- 比較的自明なパラメータが多いが一部分かり難いものもあるので次回説明。
バックナンバーはこちら。
コメント