CAN DBC File Explained - A Simple Intro [+Editor Playground]

Need a simple, practical intro to CAN DBC files?

In this tutorial we explain DBC files (CAN bus databases), incl. structure, syntax, examples - and our powerful online DBC editor.

To get practical, we also include real J1939/OBD2 data and DBC files - which you can load in free open source CAN software/API tools.

Get ready to fully understand CAN DBC files!

 Tip: Start by checking out our 5 min intro video above!


What is a CAN DBC file?

As explained in our intro to CAN bus, DBC files are vital to CAN bus data logging and analysis.

A CAN DBC file (CAN database) is a text file that contains information for decoding raw CAN bus data to 'physical values'.

To understand what 'raw CAN data' looks like, see the below example CAN frame from a truck:

CAN ID    Data bytes
0CF00400  FF FF FF 68 13 FF FF FF

If you have a CAN DBC that contains decoding rules for the CAN ID, you can 'extract' parameters (signals) from the data bytes. One such signal could be EngineSpeed:

Message  Signal       Value  Unit
EEC1     EngineSpeed  621    rpm

To understand how DBC decoding works, we will explain the DBC syntax and provide step-by-step decoding examples.

CAN DBC File Basics

DBC message and signal syntax

Let us start with a real CAN DBC file example.

Visualized is a demo J1939 DBC file that contains decoding rules for speed (km/h) and engine speed (rpm).

If you have recorded raw CAN bus data from e.g. a heavy-duty truck, then you can download this DBC file and use it to determine if these signals can be extracted from the data.

download J1939 data & demo DBC


At the heart of a DBC file are the rules that describe how to decode CAN messages and signals:

J1939 EEC1 EngSpeed RPM CAN DBC File Database Format Message Signal


  • A message starts with BO_ and the ID must be unique and in decimal (not hexadecimal)
  • The DBC ID adds 3 extra bits for 29-bit CAN IDs to serve as an 'extended ID' flag
  • The name must be unique, 1-32 characters and may contain [A-z], digits and underscores
  • The length (DLC) must be an integer between 0 and 1785
  • The sender is the name of the transmitting node, or Vector__XXX if no name is available

  • Each message contains 1+ signals that start with SG_
  • The name must be unique, 1-32 characters and may contain [A-z], digits and underscores
  • The bit start counts from 0 and marks the start of the signal in the data payload
  • The bit length is the signal length
  • The @1 specifies that the byte order is little-endian/Intel (vs @0 for big-endian/Motorola)
  • The + informs that the value type is unsigned (vs - for signed signals)
  • The (scale,offset) values are used in the physical value linear equation (more below)
  • The [min|max] and unit are optional meta information (they can e.g. be set to [0|0] and "")
  • The receiver is the name of the receiving node (again, Vector__XXX is used as default)







Get our 'Ultimate CAN Guide'

Want to become a CAN bus expert?

Get our 12 'simple intros' in one 160+ page PDF:


CAN Bus - The Ultimate Guide Tutorial PDF



Example: Extract physical value of EngineSpeed signal

To understand how DBC decoding works, we'll show how to extract the signal EngineSpeed from the CAN frame in the intro:

CAN ID    Data bytes
0CF00400  FF FF FF 68 13 FF FF FF

For illustration we will do this 'manually' - in practice a software/API tool will of course be used.

Engine Speed RPM Signal Extraction DBC
CAN ID DBC File Matching PGN

1: Match the CAN ID vs DBC ID

In practice, most raw CAN log files contain 20-80 unique CAN IDs. As such, the first step is to map each CAN ID to the relevant DBC messages. The method depends on the ID and protocol:

11-bit CAN IDs: If you open a DBC in a text editor, 11-bit IDs appear in decimal form. For example, ID 0x123 appears as 291.

29-bit CAN IDs: 29-bit IDs are stored in the DBC as 32 bit IDs, with the extra 3 bits indicating that the ID is extended. You can extract the 29-bit ID by applying a mask (0x1FFFFFFF).

29-bit CAN IDs (PGN): For some higher-layer protocols (J1939, ISOBUS, NMEA 2000), messages should be matched at the 18-bit PGN level. In the DBC, these IDs have a PGN meta field and use PGN masking (PDU2: 0x3FFFF00, PDU1: 0x3FF0000).

In our example, the raw data CAN ID 0xCF00400 (217056256) is a 29-bit ID from a J1939 application (PDU2). We apply the mask 0x3FFFF00 and get the PGN 61444. If we apply the same mask to the demo DBC IDs, we find that the 32 bit ID 2364540158 also equals 61444. In other words we have a match!


The DBC file 32-bit version of a 29-bit can be derived by storing the 29-bit ID in the lower 29-bits and then setting the most significant bit to 1. This can be denoted as (CAN ID)|(1<<31). It can seem redundant, but the ability to distinguish between 29-bit and 11-bit IDs is important e.g. when considering the visualized example of an extended 29-bit ID 0x00000123 (291). In the DBC file, this would receive a 32-bit ID of 2147483939, making it possible to uniquely separate out this ID from e.g. the standard 11-bit variant of 0x123, which would be denoted in the DBC file with the 11-bit decimal ID 291.


It is important to understand that PGN matching in a DBC file implies that there is not a one-to-on relation between the CAN IDs in your raw data and the DBC messages. Instead, a single PGN message in your DBC can match multiple 29-bit CAN IDs, as explained in our J1939 intro.

As a result, you should design your J1939 DBC file so that you ensure message uniqueness at the PGN level, rather than at the 29-bit ID level. Otherwise, a CAN software/API tool will essentially have two potential decoding rules for each 29-bit CAN ID in the raw data, with no explicit logic to determine which to use.

It also means that when you construct a J1939 DBC file, the choice of 29-bit CAN ID (i.e. 32 bit DBC ID) to specify for a message is not directly relevant - as long as it maps to the intended J1939 PGN. For example, both the 29-bit IDs 0x0CF004FE and 0x0CF004F0 map to the J1939 PGN 0xF004 (EEC1), meaning that for the purposes of DBC decoding your data either 29-bit ID can be used. However, you cannot enter e.g. an 18-bit PGN directly into the DBC file.

j1939-pgn-converter-example Tip: Use our J1939 PGN converter to easily convert between CAN IDs and PGNs.




Engine Speed RPM J1939 Data DBC
Our DBC editor lets you visualize the bit position of a CAN signal

2: Extract the CAN signal bits

Next, use the DBC bit start, length and endianness to extract the relevant bits from the CAN frame data payload. In our example, the EngineSpeed start bit is 24 (meaning byte 3 when counting from 0) and the bit length is 16 (2 bytes):

FF FF FF 68 13 FF FF FF

In this case, we extract the 4th and 5th bytes (0x68 and 0x13) and reorder them to 0x1368 (4968) due to the signal being little-endian (as indicated by the @1 in the DBC).


In the example, we use little-endian (Intel), meaning that the 'bit start' in the DBC file reflects the position of least-significant bit (LSB). If you add a DBC signal in a DBC file viewer from Vector (CANDB++) or Kvaser, the LSB is also used as the bit start in the DBC editor.

If you instead add a big-endian (Motorola) signal in a DBC editor GUI, you'll still see the LSB as the bit start - but when you save the DBC, the bit start is set to the most significant bit (MSB) in the signal. This approach is designed to make the GUI editing more intuitive, but can be confusing if you switch between a GUI and text editor.

To avoid this confusion, our DBC file editor instead uses the DBC syntax within the editor for both little-endian and big-endian signals - meaning that the bit start you enter in the editor equals the bit start you'll see in the DBC - even for big-endian.



3: Scale/offset the extracted bits

Finally, we need to apply the DBC-based scale factor and offset value in a linear equation to get the physical value. In our EngineSpeed example, the factor is 0.125 and the offset is 0:

physical_value = offset + scale * raw_value_decimal
	
       621 rpm = 0 + 0.125 * 4968

In short, the EngineSpeed physical value (aka scaled engineering value) is 621 rpm. We could now proceed to perform this extraction across multiple timestamped CAN frames in order to e.g. visualize the vehicle's engine speed as a time series plot.

truck engine speed J1939 DBC decoding intro Tools like asammdf lets you DBC decode and visualize e.g. engine speed






Online CAN DBC editor

To help you create your own DBC files, we provide a free online DBC editor, which was also used in the examples above.

In particular, the signal preview and decoding functionality makes it a powerful tool for learning about the DBC file syntax.

Feel free to bookmark the editor and share it!

online DBC editor




How to get DBC files?

It is important to note the following:

CAN bus decoding rules are application specific.

It is up to each Original Equipment Manufacturer (OEM) to decide how to encode their sensor data into CAN bus frames. Therefore, the CAN decoding rules for an Audi A6 differ from e.g. a Toyota Camry.

But can you get the DBC for your car/truck/boat/..., then?

Short answer: It depends.

Generally, DBC files are proprietary and only known to the OEM. Engineers working at the OEM typically have access to the full DBC files for the equipment they build.

OEM DBC proprietary

If you are not the OEM, consider instead the below options:

1: Standardized DBC files (protocol-specific)

Need to record data from heavy-duty vehicles, boats/ships, tractors or cars? If so, you can leverage one of the below:


J1939 DBC

J1939 DBC File

Most heavy-duty vehicles use the J1939 protocol. This DBC contains 1800+ J1939 PGNs (12000+ signals)

learn more

NMEA 2000 DBC

NMEA 2000 DBC File

Most boats/ships use the NMEA 2000 protocol. This DBC contains decoding rules for 170+ N2K PGNs (1500+ signals)

learn more

ISOBUS DBC

ISOBUS DBC File

Most agriculture vehicles use the ISOBUS/J1939 protocols. This contains decoding rules for ~100 PGNs (650+ signals)

learn more

OBD2 DBC

OBD2 DBC File

Most non-EV 2008+ cars support OBD2 over CAN. This OBD2 DBC contains decoding rules for 150 OBD2 PIDs

learn more

A standardized DBC file like our J1939 DBC will typically allow you to DBC decode 60-80% of the CAN bus messages that you record from a J1939 network in a given truck, excavator, tractor or other heavy-duty machine. The rest of the messages are proprietary. The explanation is that most heavy-duty OEMs agree to encode most standard parameters like speed, RPM, temperatures etc. according to the J1939 specification - but they are not forced to do so. For example, an OEM may decide that the J1939 standard does not provide adequate encoding for a specific subset of their data - and instead opt for a proprietary encoding. Others may simply prefer to only use the J1939 encoding for a very limited subset of their data - if any at all. A similar logic applies to the NMEA 2000 and ISOBUS data.

OBD2 differs to some extent as your car's electronic control units do not rely on OBD2 to function. Rather, each car OEM implements their own proprietary CAN protocol for this purpose. You can use a CAN bus data logger to request OBD2 data from the car and the car will then respond if it supports the requested data. It is somewhat up to the OEM to what extent they support OBD2 data in their car, meaning that a specific car will typically only support a subset of the potentially available OBD2 parameters.

Because of the above, you should generally test what data is available from a specific application early on. If you have one of our CAN bus data loggers, you can record data from your application and send it to us for free sample DBC decoding, allowing you to identify what data is available before you decide whether to get a specific DBC file.



2: Free DBC files and data samples

Below we provide 100% free 'data packs' that contain log files with raw CAN data and DBC files:


Heavy-Duty Data Pack

J1939 Data Pack - J1939 Demo Heavy Duty Sample Data

This pack contains demos of our full J1939/ISOBUS DBCs and raw CAN data from heavy-duty vehicles like trucks, tractors, excavators and more

download

Car Data Pack

OBD2 Data Pack - Proprietary Car DBC Files and Sample Data

This contains our OBD2 DBC and raw OBD2 data from various cars. It also contains 25+ reverse engineered DBC files collected from online resources

download

EV Data Pack

EV data pack

This contains reverse engineered DBC files for several EV brands incl. Kia, Hyundai, Nissan, Tesla, VW, Skoda, Audi and more. See also our electric car case studies

download


3: Reverse engineered CAN DBC files for cars/EVs

As explained, our car/EV data packs contain many reverse engineered DBC files, ready-for-use.

However, if you did not find a DBC for your vehicle, you can try one of the below online open source resources:

  • OpenDBC: DBC files for BMW, Cadillac, Chrysler, Ford, GM, Honda, Hyundai, Lexus, Nissan Leaf, Tesla, Toyota, VW and more
  • Tesla Model 3 & Y: DBC file for Tesla Model 3 and Tesla Model Y
  • OBD Dash: Proprietary UDS PIDs for Mitsubishi, Renault, Subaru, Opel, Hummer and more
  • Kia Soul: Google sheet containing decoding information for the Kia Soul EV
  • Open Garages: Collection of links for decoding info, incl. Mazda, Ford Mondeo, Prius, Mini Cooper, Dodge and more
  • EV PID collection: Proprietary OBD2/UDS PIDs for EVs, incl. Hyundai Kona, Ioniq EV, Kia Niro, Optima, Ray, Soul EV and more
  • Nissan Leaf DBC: Nissan Leaf EV DBC files for use in some Leaf EV models (though not 2019+)
  • Renault Zoe: This CSV contains decoding info for the Renault Zoe EV

Note that some of the databases above contain information for decoding proprietary UDS data. The proprietary UDS databases are typically not structured in DBC form, though you can take outset in our UDS DBC files to get started on creating your own UDS DBC file. See also our Unified Diagnostic Services tutorial.





4: External sensor-to-CAN modules

An alternative way to add the data you need is to use external sensors in addition to your CAN/LIN data.

For example, our CANedge CAN bus data loggers come with optional GPS/IMU. This allows you to enrich your CAN data with GPS position, speed, trip distance, acceleration rates and more.

Similarly, you can add sensor-to-CAN modules to add e.g. GPS/IMU, temperature or analog/digital/pulse data. Generally, sensor-to-CAN modules come with free DBC files.

OBD2 Car Dashboard Vehicle Grafana In this Grafana dashboard OBD2 data is combined with GPS/IMU data




Need to log CAN data - and easily DBC decode it?

The above 'data packs' have been recorded with the CANedge, our 2 x CAN/LIN data logger with optional WiFi/LTE/GPS.

The CANedge lets you easily record data from any CAN bus and process it via free software/API tools.

Tip: Download the software to test out the data packs right now.

learn more





DBC software tools (editing & processing)

Software that uses CAN DBC files can be split in two groups: Editing & data processing.

DBC editor tools

  • CSS Electronics: Our free online DBC editor lets you load, edit, review and save DBC files - with great preview features and full DBC support
  • Vector CANDB++: The free demo version of Vector's CANalyzer includes a useful version of CANDB++, the Vector DBC editor. It offers the most extensive functionality available, including quick "consistency checks" of DBC files
  • Kvaser Database Editor: Kvaser provides a free and easy-to-use CAN DBC editor, which includes the ability to append DBC files and visualize the signal construction
  • canmatrix: This open source Python DBC module lets you load DBC files, edit them and export them to other formats. It is used in e.g. asammdf and our Python API

CAN DBC File Editor Software Tools
CAN DBC decoding tool software free open source

CAN data processing tools

Most CAN data processing tools support DBC files - including below:

  • asammdf GUI: The asammdf GUI lets you load raw MDF4 data and DBC convert it to human-readable form - as well as create quick plots, analyses and exports
  • MF4 decoders: Our MF4 decoders let you DBC decode raw CAN/LIN data to create CSV/Parquet data lakes - ready for e.g. dashboards
  • Python/MATLAB: You can also DBC decode your data via our Python API and MATLAB integration for programmatic analysis

Getting started: If you need to construct a new DBC file, we recommend using one of the DBC editors above. For most users (incl. beginners), we recommend our own online DBC editor. When creating a new DBC file, you can take outset in the default template - or clear this to create your own DBC file from scratch.

To ensure your DBC looks OK, we recommend to open the DBC in a text editor. This way you can verify that the basic DBC syntax looks as you'd expect - and you can use this version as a benchmark for comparison. It's a good idea to maintain git revisioning on any changes to the DBC from here.

Test your DBC: As a second step, we recommend to test the DBC file using a CAN bus decoder software tool. For example, if you're using a CANedge CAN bus data logger to record raw CAN data from your application, you can use the free CAN decoder software, asammdf, to load your raw data and your DBC file. This way you can quickly extract the signal you added in the DBC - and verify via a visual plot that the construction looks OK.

Expand your DBC: Next, you can add any remaining CAN messages and signals, as well as comments/descriptions, value tables etc. We recommend to do regular checks as before to ensure the construction is OK.

Check consistency: Finally, you can optionally do a full 'consistency check' via Vector's CANDB++ tool. In CANDB++ select 'File/Consistency Check' and keep an eye out for critical errors (though note that your DBC may be sufficiently valid for most tools, even if some issues are reported). Once you are done, we always recommend doing a visual analysis of your scaled CAN data to ensure that you do not have e.g. endianness, scale factor or offset errors.




Advanced DBC file topics

In this section we cover advanced topics related to DBC files.


Meta, attributes, multiplexing and TP


The DBC file can contain various extra information and below we outline the most common types. This information is stored in the DBC file after all the messages. The comment attribute lets you map a 1-255 character comment to a message ID or signal name, e.g. to provide more information.

Example for EEC1 message:

CM_ BO_ 2364540158 "Electronic Engine Controller 1"

Example for EngineSpeed signal:

CM_ SG_ 2364540158 EngineSpeed "Actual engine speed which is calculated over 
a minimum crankshaft angle of 720 degrees divided by the number of cylinders....";


Custom attributes can be added to messages and signals in a similar way as the comment syntax. A typical attribute is the VFrameFormat, which can be used to describe the message frame type. It is initialized as below:

BA_DEF_ BO_  "VFrameFormat" ENUM  "StandardCAN","ExtendedCAN","reserved","J1939PG";

Once initialized, a message can be mapped as follows (indexing from 0):

BA_ "VFrameFormat" BO_ 2364540158 3;

In this case, we inform that the message EEC1 is of the J1939 PGN type, which may result in specific display or handling in various DBC editor GUI tools, as well as data processing tools. Similarly, you can add J1939 SPN IDs as an attribute as below:

BA_DEF_ SG_  "SPN" INT 0 524287;
BA_ "SPN" SG_ 2364540158 EngineSpeed 190;

Here, EngineSpeed is assigned the SPN 190.


Some CAN DBC signals are 'state variables', such as gear-shift, diagnostic trouble codes, status codes etc. These take discrete values and will require a mapping table to enable interpretation.

The CAN DBC format enables this via value tables, which let you assign a state description to the physical decimal value of each state of a signal. The states should be in descending order as in below example:

VAL_ 2297441534 MaterialDropActiveStatus 3 "NotAvailable" 2 "Error" 1 "On" 0 "Off" ;


Multiplexing is sometimes used in CAN bus communication, with perhaps the most known example being within OBD2 communication. Consider for example the below OBD2 response frames:

7E8   03 41 11 30 FF FF FF FF
7E8   03 41 0D 37 FF FF FF FF

Here, both response frames carry 1 byte of data in byte 3, yet despite the CAN ID being identical, the interpretation of the data differs between the two frames. This is because byte 2 serves as a multiplexer, specifying which OBD2 PID the data is coming from.

To handle this in a DBC file context, the below syntax can be applied:

BO_ 2024 OBD2: 8 Vector__XXX
 SG_ S1_PID_0D_VehicleSpeed m13 : 31|8@0+ (1,0) [0|255] "km/h" Vector__XXX
 SG_ S1_PID_11_ThrottlePosition m17 : 31|8@0+ (0.39216,0) [0|100] "%" Vector__XXX
 SG_ S1 m1M : 23|8@0+ (1,0) [0|255] "" Vector__XXX
 SG_ Service M : 11|4@0+ (1,0) [0|15] "" Vector__XXX
...
SG_MUL_VAL_ 2024 S1_PID_0D_VehicleSpeed S1 13-13;
SG_MUL_VAL_ 2024 S1_PID_11_ThrottlePosition S1 17-17;
SG_MUL_VAL_ 2024 S1 Service 1-1;

Here, the M in the Service signal serves as the 'multiplexor signal'. In this case, it toggles which OBD2 service mode is used (mode 01, 02, ...). The signal S1 is multiplexed by Service, which is evident from the SG_MUL_VAL_ field where the two are grouped.

As evident, the signal S1 has the value m1 after the signal name, which means that if the Service signal takes the value 1, the data reflects the OBD2 service mode 01.

The above is referred to as simple multiplexing. But CAN DBC files also support extended multiplexing, where a multiplexed signal (in this case S1) can also be a multiplexor and thus control the interpretation of other parts of the data payload. To see this, note that S1 takes the same role as Service in the syntax, adding an M after m1 and being grouped with the two OBD2 PIDs, speed and throttle position.

Extended multiplexing works as before: If S1 takes the value 13 (HEX 0D), it means that only signals that are A) part of the S1 group and B) have a multiplexer switch value of 13 should be taken into account. In this example, it means that byte 4 reflects data for vehicle speed. If byte 3 equals 17 (HEX 11), byte 4 reflects data for the throttle position instead.

DBC multiplexing and extended multiplexing are advanced topics and not supported by all DBC editors or data processing tools. However, you can use e.g. the CANDB++ DBC editor or our online DBC editor to more easily view and understand DBC files with multiplexing, like our OBD2 and UDS DBC files. Further, all CANedge software/API tools support extended multiplexing in terms of DBC decoding data. For more on this topic, see Vector's guide to extended multiplexing in DBC files here.


Some higher-layer CAN bus protocols include transport protocols, e.g. below:

You can learn more about how these transport protocols work in our intros above.

Importantly, not all CAN software/API tools support transport protocol aka multi-frame data. As an exampe, the transport protocols are supported via the CANedge MF4 decoders (and thus indirectly for e.g. dashboard visualization and Python/MATLAB analysis) - but not the asammdf GUI.

In addition to the more limited software/API support, the DBC file format is not optimally designed for transport protocol handling - and as a result, the implementation may vary by software. Of course, if you use our J1939 DBC, ISOBUS DBC, NMEA 2000 DBC, OBD2 DBC or UDS DBC, these will already be set up for use with the CANedge MF4 decoder TP handling.



Alternative CAN database file formats

While DBC is the most widely supported CAN database file format, below are common alternatives:


LDF vs. DBC files (LIN bus)

If you record raw data from a LIN bus (Local Interconnect Network), you will typically not have a DBC file available, but instead a LIN Description File (LDF). For example, the popular HELLA battery sensor comes with LDF files for decoding, but not DBC files. However, the formats are very similar and in most cases you can manually transform your LDF file into a DBC file to enable support within a wider array of software/API tools. With that said, some LIN signals are encoded in the LDF file in a non-linear way, which is not supported by the DBC format. See our LIN bus intro for details.

LDF vs DBC LIN Description File

CANopen Electronic Data Sheet EDS file

EDS vs. DBC files (CANopen)

If you are recording CANopen data from e.g. PLCs/machinery/robotics, the decoding rules may be described in an Electronic Data Sheet (EDS) file instead of a DBC file. EDS files can be opened in a text editor like DBC/LDF files, but the structure differs significantly. If you wish to create a DBC file based on your EDS file, it is therefore useful to have an EDS editor tool that visualizes the contents. Note also that CANopen decoding rules often involve the use of multiplexing. See our CANopen intro for details.


A2L vs. DBC files (CCP/XCP)

As an OEM you may be working with the CCP/XCP protocols, which enable read/write access to electronic control units (ECUs) for e.g. data measurement or calibration. Here, a more advanced database format is often used called A2L (ECU Description Files), which describe all the information required by an external tool for communicating with an ECU. A2L files also describe how to decode signals recorded via CCP/XCP, but the format offers far more complex conversion methods vs. the simple linear equation supported by DBC files. As such, you can typically transform some of the A2L decoding rules into a DBC file format - but not necessarily all. See our CCP/XCP intro for details.

A2L example signal

ARXML file Matlab

ARXML vs. DBC files

AUTOSAR (AUTomotive Open System ARchitecture) is standard used in defining automotive software architectures. Here, ARXML (AUTOSAR XML) files are used in describing all relevant system information. Like DBC files, ARXML files can include message/signal definitions - although this typically only comprises a small subset of the ARXML file.






CAN DBC file example use cases

DBC files are vital to practically any use case related to logging CAN bus data - below we outline some examples:

Black box CAN logger insurance warranty

OEM CAN data logging

Proprietary DBC files are often used by OEMs for decoding their CAN data - e.g. for blackbox data logging

can bus blackbox
J1939 vehicle fleet management cloud telematics

Heavy-duty J1939 telematics

For heavy-duty vehicle fleets, the J1939 DBC enables decoding of data across mixed brands

j1939 telematics
OBD2 data logger on board diagnostics

Logging OBD2 data from cars

The OBD2 protocol lets you log data across car brands - and easily decode it using our free OBD2 DBC file

obd2 logger
CANopen data logger preventive maintenance

Predictive maintenance

DBC files are key to setting up prediction models for analyzing physical values from machines/vehicles

predictive maintenance

Do you have a CAN logging & DBC decoding use case? Reach out for free sparring!

Contact us



FAQ


The CAN DBC file format was developed by Vector Informatik GmbH in the 1990s. Today it is by far the most common format for storing CAN bus conversion rules. It should be noted, though, that the DBC standard is proprietary in the sense that no official DBC file format documentation is available. As such, most online DBC syntax documentation is added by 3rd parties.


In some cases (like SAE J1939), a DBC file may include more CAN signals in a CAN message than are actually packed in the dataframe. The J1939 DBC that we offer is based on the J1939 Digital Annex and provides information that goes across most heavy duty vehicle brands. Of course, not every truck or excavator will include the same data and often a specific vehicle model/year will only use e.g. 2-3 SPNs within a specific CAN message - while the J1939 DBC may specify up to e.g. 8 unique signals for that particular CAN message ID.

To handle this, the J1939 standard specifies that bytes padded with "FF" should be considered invalid or not available. Some DBC decoding tools will still decode these parts of the data frame, which can result in odd-looking charts where the invalid signals take on constant values equal to their theoretical maximum. Other tools, like asammdf and our Python API modules, enable the user to ignore invalid signals - thus limiting the decoded data to the relevant signals.


In some cases it can be useful to load multiple DBC files in parallel. For example, in marine telematics you often have multiple DBC files, e.g. one for your GPS module, wind sensor and engine data. These can either be combined into one 'master DBC file' or you can rely on software that can load multiple DBC files (such as asammdf or our MF4 decoders).


For more intros, see our guides section - or download the 'Ultimate Guide' PDF.





Need to log & DBC decode your CAN data?

Get your CANedge today!






Recommended for you