Decode NMEA 2000 data via widely standard DBC format
The extensive DBC contains 170+ PGNs and ~1500 signals
Use our ID converter to check if your NMEA 2000 PGNs are covered
Based on the official 2022 v3.000 N2K PGN database (appendix A & B)
Avoid manually constructing an NMEA 2000 DBC from scratch
Send us a raw CANedge log to see what data can be extracted
What is an NMEA 2000 DBC?
A DBC file is a standardized method for storing the "rules" on how to interpret raw CAN bus data. In particular, it contains details on what 'signals' (e.g. RPM, Vehicle Speed, …) are contained within which 'messages' (i.e. CAN IDs).
In the NMEA 2000® standard, messages are referred to as Parameter Group Numbers (PGN) and parameters as signals.
Further, a DBC file includes names, descriptions, positions and lengths of the signals - as well as how to offset & scale them. In short, the NMEA 2000 DBC file is key to decoding your data in most CAN bus software tools.
About the NMEA 2000 DBC methodology
The purpose of this NMEA 2000 DBC file is to provide a supplement to the PDF-based NMEA 2000 Appendix B. Since most CAN software supports DBC files, this DBC lets you quickly process your boat/ship data - rather than spending time on manually entering data from the NMEA 2000 PDF standard.
The DBC has been created by CSS Electronics in collaboration with the NMEA organization.
To purchase and use this NMEA 2000 DBC file, you need to separately purchase the NMEA 2000 Appendix B and send us your purchase receipt.
The reason for this is that we only provide a re-structuring of the NMEA 2000 PGNs - not a 'legal license'. Thus, to legally use the DBC, you'll need to first purchase the Appendix B PDF, which will serve as the legal license.
The "NMEA Network Message Database (NMEA 2000 PGNs Appendix A & B)" can be purchased by contacting the NMEA organization at email@example.com. For more details, see the NMEA standards overview.
We have based the NMEA 2000 DBC file on the official 2022 v3.000 NMEA 2000 PGN database (from the NMEA standard appendices). The database contains ~1800 signals of which ~1500 can be represented in the DBC format.
For some use cases you may want to add additional signals to the DBC file - see our guide in the FAQ on how to do this.
When is an N2K DBC used?
The NMEA 2000 protocol is used across many maritime vessels and equipment - including ships, boats, carriers etc. Because the NMEA 2000 protocol is standardized, you can use the NMEA 2000 DBC file to decode data across marine brands/models - e.g. for use in marine telematics.
In our experience, the NMEA 2000 DBC will typically let you decode the majority of the NMEA 2000 signals from a NNMEA 2000 based vessel, with the rest being proprietary OEM-specific data. In most cases, this lets you extract the most critical NMEA 2000 signals, e.g. information related to speed, GPS position, water depth, heading, yaw, rate, rpm, fuel data, temperatures, etc. With that said it differs a lot vessel-by-vessel, so we always recommend to perform tests for the specific boat/ship you need to record NMEA 2000 data from.
If you're using our CAN loggers, we can offer to decode a sample log file with the NMEA 2000 DBC before you decide whether to purchase the full NMEA 2000 DBC (this sample test is 100% free). This way you can see exactly what data parameters you can extract from a specific marine vessel (or multiple vessels) before deciding. Simply contact us with your raw log file samples.
If you do not have one of our CAN bus data loggers, you can perform an evaluation by parsing the unique CAN IDs from your NMEA 2000 application (e.g. logged with another NMEA 2000 data logger) into our Google sheet on this page to check which of your NMEA 2000 PGNs are included in the DBC file.
In some maritime vessels, there are multiple CAN bus networks. Some may be NMEA 2000® based, while others (e.g. engine-related) may be J1939-based. For such use cases, you may require both a NMEA 2000 DBC file and a J1939 DBC file.
In both cases, you can get free sample demo conversions from us and you can evaluate your CAN IDs via our Google Sheet to test which DBC file contains which PGNs.
What PGNs are in the DBC?
If you have a list of NMEA 2000 or J1939 CAN IDs, you can paste them in our 'CAN ID to PGN converter':
- Convert raw CAN IDs to J1939 or NMEA 2000 PGNs
- Check if the PGNs are in the J1939 or NMEA 2000 DBC
- Convert J1939 or NMEA 2000 PGNs to raw CAN ID
NMEA 2000 single frame vs. fast packet
In the NMEA 2000 standard, you will often see a mix of 'single frames' and 'fast packets'. Single frames contain 1-8 data bytes, while fast packets contain >8 across multiple CAN frames.
To decode fast packet data using the NMEA 2000 DBC file, you need to first "reconstruct" the relevant CAN frames into a single CAN frame with all the payload data, after which the normal DBC decoding can be applied.
We recommend that you check out our NMEA 2000 fast packet Python script example here. The script provides some basic utility functions and examples for handling multiframe NMEA 2000® fast packets. If you use the CANedge to log your NMEA 2000® data, you can use the Python script classes as a starting point for processing NMEA 2000 fast packet data and e.g. integrating your data with Grafana dashboards as per our guide.
Do you have any questions?Contact us
|Standard(s)||The DBC is based on the v3.000 (2022) NMEA 2000 PGN database (Appendix A & B)|
|Fast packets||The DBC file includes a mix of single frame and fast packet NMEA 2000® PGNs|
|Descriptions||Names, descriptions, value tables etc. are based on the NMEA 2000 appendices|
|PGN encoding||The message VFrameFormat is "J1939PG", meaning that most CAN software will match IDs based on the 18-bit PGNs|
|Value tables||Value tables are included for signals where meaningful|
If you need to record data from a boat/ship, you will be recording raw CAN bus data. This data will typically be encoded as per the NMEA 2000 or J1939 protocol - and often a large share of the data will be standardized. This means you can use a standard DBC file to decode the data in most CAN bus software tools, making it easy to get to useful information. The challenge is that no NMEA 2000 DBC files (except this one) are available for sale, and creating one from scratch will typically take 10-20 hours depending on the #signals you require. For convenience, we have therefore compiled an NMEA 2000 DBC file based on the official NMEA 2000 standard. This is ideal for use cases where you wish to get started quickly and in particular if you're going to decode data across multiple different vessels.
We have collaborated with the NMEA organization to construct the DBC file based on various database files, which we've cleaned and re-formatted to the DBC file format.
The free, open source asammdf GUI/API supports the loading of NMEA 2000 DBC files natively. This means that it's easy to decode raw NMEA 2000® single frame data from the CANedge series - as well as e.g. exporting/plotting the decoded data.
You can also e.g. use our open source Python API, which lets you load raw CANedge log files from your ships/boats and decode the data via the NMEA 2000 DBC. The Python API can also be used to handle NMEA 2000® fast packet data - see our transport protocol API examples.
Not necessarily. A PGN may include e.g. 4 signals in the NMEA 2000 DBC file - yet, in your specific application it could be that e.g. only 1 of these signals is used.
When converting the data from such a case using the DBC file, some tools may still return converted data for all 4 signals. However, upon inspection you'll find that the data of invalid signals is typically outside the valid min/max range and constant.
Yes, but be aware that the format is proprietary with no open spec. Further, even small errors in spaces etc. will lead to the file not rendering properly. Various DBC editor tools allow editing, e.g. our online DBC file editor or Vector's CANDB++ tool. Be aware, however, that simply saving the DBC file via one of these tools may change the format and structure.
We do not recommend editing the DBC file unless you're an advanced user. While we can offer some basic support on your DBC file, we can't help with detailed editing of the file. However, if you're interested in learning more on this topic, see our DBC intro.
Below we provide a step-by-step guide on how you can e.g. modify or add PGNs or signals to the NMEA 2000® DBC:
Focus on relevant PGNs
As a first step, we recommend that you identify what PGNs are of interest to you in the first place.
If you have a CANedge, we suggest that you log a sample of raw NMEA 2000 data with the device. You can then convert the log file to CSV using our MF4 converters (mdf2csv) and open it as text file in Excel. Here you can copy the column of CAN IDs and use Excel's "remove duplicates" to get a unique list of CAN IDs.
Next, enter this list of CAN IDs into our online CAN ID to PGN Google sheet. Here, you can convert the list of CAN IDs to PGNs - and thus get a list of PGNs (in decimal form) that you can lookup in the NMEA 2000 PDF. You can also quickly see if some or all PGNs are already included in the NMEA 2000 DBC file if you e.g. view the file in a DBC editor.
Modify/add signals in the NMEA 2000 DBC
Below we outline how you can add a new PGN from the NMEA 2000 PDF to the DBC:
- Open the DBC file in a DBC editor and compare the details in the DBC vs. the PDF standard to understand the logic
- Next, add a new PGN. First, verify that the PGN is a 'single frame' PGN (more on fast packets below)
- In your DBC editor, set the Frame Format to J1939PGN. Next, add the NMEA 2000 PGN in the PGN Decimal field and enter the name of the PGN (e.g. attitude). Note that in the NMEA 2000 PDF, you can find the PGN ID in the upper right corner of each PGN description section. Specify a PGN name that is max 32 chars, without spaces or special characters. Optionally, you can add a longer string with the name in the Comment field
- In the editor, add a new signal. Enter the signal name (without spaces), found in the NMEA 2000® PDF next to the Field #. Note also that you only need to enter the signals you're interested in (you can e.g. skip the SID, reserved signals etc)
- Specify the type field to set whether the signal is Signed or Unsigned. In the NMEA 2000® PDF, each signal has a type, e.g. int8 (= Signed), uint16 (= Unsigned), bit(n) (= Unsigned) etc.
- Next, enter the bit position and length fields. In the NMEA 2000 PDF the Length can be found as the 'Byte Field Size' (in this case, the value should be multiplied by 8) or the 'Bit Field Size'. The Bitpos reflects the start bit of the signal and is more complex to derive from the PDF. To do this, you'll have to accumulate the lengths of the signals before the signal you're interested in. For example, if you are adding signal 2 and signal 1 has a length of 1 byte (8 bits), the bit position of signal 2 should be 8.
- Add the scaling factor and unit fields. In the PDF, the field called 'Resolution' contains the factor and unit, e.g. 1/4 RPM
- Optionally, you can add the minimum / maximum fields. In the NMEA 2000 PDF, these are available from the 'Range' field
Test your updated DBC file
To test out your modified DBC, try loading your CANedge MF4 log file with raw NMEA 2000® data in the asammdf GUI and load your NMEA 2000 DBC in the 'Bus Logging' tab. You should now be able to decode your data and visualize it as outlined in our asammdf GUI intro. You can of course also use the DBC to decode your data via our Python API (which can also be used for NMEA 2000 fast packet decoding) - or push the data into browser dashboards.
Regarding NMEA 2000 fast packets
NMEA fast packet messages are more complex and require a more advanced data processing workflow. See our 'fast packet' example here. The principle for creating the DBC is the same, but requires that data is entered beyond the 8 data bytes. To enable longer CAN messages, set the PGN DLC to the full length (in bytes) for the fast packet message. E.g. if the last signal has a Bitpos of 360 and a length of 16 bits, the full DLC would be (360 + 16) / 8 = 47. Since fast packets are an advanced topic, we recommend that you start with the single frame messages.
The legal licensing for using this DBC file is linked to the license for the NMEA 2000® Appendix A & B. That means that using the NMEA 2000 decoding rules falls under the same terms as if you were creating the DBC manually using your NMEA 2000® Appendix A & B PDF. If revisions are made to the NMEA 2000 DBC file we offer (e.g. based on errors/omissions), we will inform you and send you an updated version free of charge. However, if you wish to get a more recent version than the one you originally purchased, you would need to both acquire the updated license from NMEA and the updated DBC from us.
The construction of the DBC file is done in a programmatic way and involves a number of tests throughout. However, if you do spot an inconsistency or a signal that is decoded in an unexpected way, please contact us - it may be related to an error in the original source data, or in our conversion process. We will then fix the issue and send out an updated version of the DBC file, as well as report any issues with the source material to the NMEA organization.
NMEA 2000 is a registered trademark of the National Marine Electronics Association.