Skip to main content

Extract bus logging data from MDF4 files generated by CANedge from CSS Electronics

Project description

MDF4 Iterator - Load Raw CAN Bus Data

This package lets you extract raw CAN bus data from the CANedge MDF4 log files. The package can e.g. be used together with the canedge_browser and can_decoder modules.


Key features

1. Easily extract raw CAN bus data from MDF4 files
2. Data can be loaded from a local path or e.g. from an S3 server path
3. The output can be an iterable or a pandas dataframe
4. Files can e.g. be loaded from lists generated by the canedge_browser package
5. Loaded CAN data can be decoded using the can_decoder package
6. No external dependencies
7. Faster bulk extraction using optional dependencies

Installation

Use pip to install the mdf_iter module:

pip install mdf_iter

Optionally install pandas for fast bulk loading:

pip install pandas

Dependencies

  • pandas (optional)

Platforms

Pre-built wheels are available for the following platforms:

  • Linux: x86-64 (Python 3.7+)
  • Windows: x86-64 (Python 3.7+)

Other platforms require manual compilation from source.


Module usage examples

Below we open and iterate over the CAN records in a log file from local disk:

import mdf_iter

mdf_path = "00000001.MF4"

with open(mdf_path, "rb") as handle:
    mdf_file = mdf_iter.MdfFile(handle)
    record_iterator = mdf_file.get_can_iterator()
    
    for record in record_iterator:
        print(record)

Below we open a log file from an S3 server into a pandas dataframe:

import mdf_iter
import s3fs

fs = s3fs.S3FileSystem(
    key="<key>", secret="<secret>", client_kwargs={"endpoint_url": "<url>"}
)
mdf_path = "bucket_name/12345678/00000001/00000001-12345678.MF4"

with fs.open(mdf_path, "rb") as handle:
    mdf_file = mdf_iter.MdfFile(handle)
    df_raw = mdf_file.get_data_frame()

print(df_raw)

Regarding data sources (local, S3 servers, ...)

The package can by default handle inputs in the form of:

  • Python strings
  • Python Path objects from pathlib
  • File-like objects, obtained using open(file_name, "rb") or fsspec and similar projects.

Any other data source can be adapted to work with the library, if it behaves like a file.

fs = some_fsspec_filesystem_implementation
file_path = a_valid_fsspec_file_path

with fs.open(file_path, "rb") as handle:
    mdf_file = mdf_iter.MdfFile(handle)
    ...

For examples using fsspec to e.g. load data from an S3 server (for use with the CANedge2, see the examples folder.


Extraction methods

Data can be extracted either through an iterator, or in bulk using pandas if it is installed.

with mdf_iter.MdfFile("path") as mdf_file:
    # Using iterator.
    record_iterator = mdf_file.get_can_iterator()
    
    for record in record_iterator:
        ...
    
    # Using pandas.
    df_raw = mdf_file.get_data_frame()

print(df_raw)

Extracting log file metadata

Metadata for a log file is accessible through get_metadata(). This returns a dictionary with string keys and dictionary values in the form of MdfMetadataEntry. These are also dictionaries, which expose the possible metadata from the blocks in the MDF file. The possible fields are:

  • description - description of the field
  • name - name of the field, also part of the key
  • read_only - whether the field is marked as read only (has no effect)
  • unit - associated unit for the field
  • value_raw - the value as a string
  • value_type - the value type

For further usage examples, see the examples folders.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

mdf_iter-2.0.8-cp37-abi3-win_amd64.whl (524.6 kB view details)

Uploaded CPython 3.7+Windows x86-64

mdf_iter-2.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (408.0 kB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ x86-64

File details

Details for the file mdf_iter-2.0.8-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: mdf_iter-2.0.8-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 524.6 kB
  • Tags: CPython 3.7+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.1

File hashes

Hashes for mdf_iter-2.0.8-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 93edaca5ca445c24f44ec35fc43836b8ba32b4d41d7cf29414430523eb66361f
MD5 2e31926d2289d9a35a26760dffcef83d
BLAKE2b-256 b6fb7f06e0cf4fdb7614f0f1d8d370e947c22a6424249d98ca2eee12829cb6a0

See more details on using hashes here.

File details

Details for the file mdf_iter-2.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for mdf_iter-2.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d9ba1f0465bb9bfb637eb480a35aeb3ea16f57cb08e53faa15d67fce1b019946
MD5 ed95d6838732053465482fdf46082220
BLAKE2b-256 c25c762c0397ba4e4b2ce02a21fc55a2869fae4d0c9d4790f0e4e9464d003a10

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page