06 October 2010

Packetlogger update with fixed field lengths and lookup values

The NMEA has in the past decided to keep the NMEA 2000 PGN database private. To get access to the database you need to become a member of the NMEA or buy the standard outright. Appendix B is $900. And, as of recent, this is not enough as the NMEA is now desupporting PGNs in favour of SAE standards that require you to buy SAE standards as well.

The money for the standards in itself is not so much a problem as is the fact that if you buy it you are not allowed to publish the data contained in the standard.

The best unencumbered source for NMEA 2000 data that I have found so far is the NMEA 2000 database in Vector's CANalyzer / CANoe demo product that you can download here. It does seem to contain a slightly older version of the NMEA database as not all fields described by the NMEA are present.

It is a pity that the various industry bodies keep insisting on non-free standards. It is my belief that open standards such as the Internet standards which are published by the IETF using the RFC process form a better way to promote standard adoption.

Anyway, using the data mentioned above I have been able to confirm a lot of guesses that I had already made earlier, and fix some other fields. In particular the lookup values of a lot of fields have seen significant improvements. I have also been able to determine field lengths for PGNs and fields that I do not have logs for.

The analyzer now does correct decoding of everything that I have seen in the field through my own logfiles and those that have been sent to me, as far as I can see.

As usual, you can download the NMEA analysis + reader programs here.

The complete list of improvements:

  • All field lengths of NMEA PGNs should be correct.
  • All field descriptions of NMEA PGNs with lookup values should be correct.
  • The XML file now also mentions whether a field is signed or unsigned.
  • The XML file now describes the real NMEA 2000 field type, not the converted type. For instance, the analyzer converts radians to degrees as these are more 'natural' for humans to understand. Previously those fields were described as being in 'degrees', now the correct unit is given as 'rad', and the resolution is also given with the correct magnitude.
  • The analyzer now correctly decodes signed integer fields such as the time offset in minutes in PGN 129033.
  • The database now knows about IEEE float data fields. The analyzer cannot print these out yet as I have no samples of this data yet.
  • Initial support for Darwin (Mac OS X). The analyzer works very well. I've ported the serial port reader programs as well, but the actisense-serial program does not seem to want to read from the serial port as presented by Actisense's OS X drivers yet.

As of now I am no longer in need of unqualified log files. You still can and should send me a log file if you see a PGN that the analyzer decodes incorrectly, of course.

2 comments:

  1. Kees: Well done in making such progress. Your improvements to the XML file to include signed information will help OpenSkipper's decoding of this. I noticed that you output a resolution of "0.0001 rad". Given that the units are given elsewhere, it might be better to make this simply "0.0001"; what do you think? Andrew

    ReplyDelete
  2. Hi Andrew,

    Yes you're right. This is an artifact of the fact that I generate the XML from an internal C data structure that has this knowledge in a different form. I'll remove the 'rad' information in the next release.

    Kees

    ReplyDelete