LoginSignup
0
0

CAN通信ログ(MF4)の中身を見る(その2)

Last updated at Posted at 2023-12-12

Jupyterで使いそうな操作をメモ

前提

import asammdf

# MDFファイルを読み込む
mdf = asammdf.MDF('path/to/mdf/file')

シグナル名を部分一致検索

[c for c in mdf.channels_db if "xxx" in c.lower()]

特定のシグナル名のメッセージ名を調べる

[mdf.groups[gi].channel_group.acq_name for gi, _ in mdf.channels_db['xxx']]

特定のシグナルのソースを調べる

どのCAN から取得したとか。取得方法によっては格納されてないこともありそう。
その場合、sourceが Noneになるので、エラー処理が必要

[mdf.groups[gi].channels[ci].source.path for gi, ci in mdf.channels_db['xxx']]

特定のシグナルから全部調べる(おまけ)

[(mdf.groups[gi].channel_group.acq_name, mdf.groups[gi].channels[ci].name, mdf.groups[gi].channels[ci].source.path) for gi, ci in mdf.channels_db['xxx']]

シグナルの値(Signal class)を取得する

シグナル名が重複しない場合

mdf.select(['xxx'])

シグナル名が重複する場合

mdf.select([(None, gi, ci) for gi, ci in mdf.channels_db['xxx']])

シグナルの値(pandas)を取得する

シグナル名が重複しない場合

mdf.to_dataframe(['xxx'])

シグナル名が重複する場合

取得はできるが、カラム名が xxx, xxx_1, xxx_2, ... となるので、いけてない。

mdf.to_dataframe([(None, gi, ci) for gi, ci in mdf.channels_db['xxx']])

シグナルの値を取得する際の便利そうなオプション

use_interpolation=False
欠損値を補完しない
ignore_value2text_conversions=True
テキストへの変換をせず、数字のままにしてくれる
raster=0.5
0.5秒ごとにリサンプリングする
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0