N2KLib - A Java NMEA 2000 library

Anastasia
Phil May and Andrea Twigg
Wed 28 Nov 2018 17:29
It all started when my second Volvo Penta 4” engine display
was destroyed by UV. Rather than throw another $1000 down the drain
replacing like for like, I decided to go with a more standard solution,
involving a Volvo->NMEA 2000 gateway plus a Maretron NMEA 2000 display
(DSM410). Half the price and a much more versatile colour display.
The majority of the replacement is up and running, but the Maretron has the
ability to highlight display engine alarms, which is something I have not
managed to get working so far. I decided to get an Actisense NMEA2000 to
serial gateway (NGT) so I could connect my laptop to the NMEA 2000 network and
see what is going on.
Having purchased the NGT gateway I wanted to try it out, but
it was three months before I could connect to the real network on Anastasia, so
I decided to see what NMEA2000 my Raymarine E120 chart plotter (the one I
brought home to fix the display backlight) would produce on its own. I
plugged it into the NGT, fired up the Actisense packet sniffer and immediately
saw some packets coming in from the plotter (it sends out datum and cross track
error messages all the time). Obviously I then wanted to send some data to
the plotter to see what I could get it to do. Google came up with
various apps that might do what I want, but they all cost money. However,
I did find and excellent project on github (Canboat) that has an XML file
defining most of the NMEA 2000 packets, so how hard could it be to write
something to send packets to my plotter?
One thing led to another. First I wrote the NMEA2000
library with a simple command line interface. Then I added log file input,
to replay a log file I found in the Canboat project). It was logical to
add a GUI to be able to see packets on the fly, and control the logging.
Finally I added a simple autohelm to generate more meaningful data for the
simulation. So now I can construct a route on my chartplotter, fire up the
app, and see the chartplotter navigate the route, with simulated wind and tide
to give it something to think about. The UI can also capture log files so
you can recreate a session at a later time.
I am going to release the code as open source to github, but
here is what it looks like in action.
Wind, heading, cog, current vectors all present and correct on
the chartplotter. ![]() The data screens are all populated
![]() ![]() The UI main window lists the latest of each packet type
received and sent. You can see that the E120 sends quite a few unknown
packet types, but interpreting these is not necessary for operation. The sent
messages are being generated by the application based on the initial
configuration plus navigation information from the chart plotter.
![]() You can zoom in on the details of a packet to see more
information (all from the pgns.xml file).
![]() The UI menus should be self-explanatory.
![]() ![]() ![]() ![]() Configuration of the yacht.
![]() The set of N2K messages for simulation that I have written so
far. I would have liked to simulate some random AIS targets but
unfortunately the E120 does not support AIS input over the NMEA 2000
port.
![]() |