【XCP】最小構成のMBD事例 第2章 その180【PyXCP②】

事例

バックナンバーはこちら。
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を提示。
    • 比較的自明なパラメータが多いが一部分かり難いものもあるので次回説明。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました